vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Fenster13.09.01
CallWindowProc-Funktion

Diese Funktion sendet eine Nachricht an ein Fenster bzw. seiner Fenstzerprozedur.

Betriebssystem:  Win95, Win98, WinNT 3.1, Win2000, WinMEViews:  17.188 

Deklaration:

Declare Function CallWindowProc Lib "user32.dll" _
  Alias "CallWindowProcA" ( _
  ByVal lpPrevWndFunc As Long, _
  ByVal hWnd As Long, _
  ByVal Msg As Long, _
  ByVal WParam As Long, _
  ByVal lParam As Long) As Long

Beschreibung:
Diese Funktion sendet eine Nachricht an ein Fenster bzw. seiner Fenstzerprozedur.

Parameter:
lpPrevWndFuncErwartet die Adresse der Prozedur, welche die Nachricht erhalten soll.
hWndErwartet das Handle des Fensters, welches die Nachricht empfangen soll.
MsgErwartet eine Nachricht (z.B. eine der Standard-Fensternachrichten)
wParamErwartet Zusatzinformationen der Nachricht (falls benötigt)
lParamErwartet Zusatzinformationen der Nachricht (falls benötigt)

Rückgabewert:
Die Funktion liefert das Ergebnis der Fensterprozedur zurück.


Beispiel:

Private Declare Function GetClassLong Lib "user32.dll" _
  Alias "GetClassLongA" ( _
  ByVal hWnd As Long, _
  ByVal nIndex As Long) As Long
 
Private Declare Function SetClassLong Lib "user32.dll" _
  Alias "SetClassLongA" ( _
  ByVal hWnd As Long, _
  ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long
 
Private Declare Function GetClassName Lib "user32.dll" _
  Alias "GetClassNameA" ( _
  ByVal hWnd As Long, _
  ByVal lpClassName As String, _
  ByVal nMaxCount As Long) As Long
 
Private Declare Function CallWindowProc Lib "user32.dll" _
  Alias "CallWindowProcA" ( _
  ByVal lpPrevWndFunc As Long, _
  ByVal hWnd As Long, _
  ByVal Msg As Long, _
  ByVal WParam As Long, _
  ByVal lParam As Long) As Long
 
Private Declare Function LoadImage Lib "user32" _
  Alias "LoadImageA" ( _
  ByVal hInst As Long, _
  ByVal lpsz As String, _
  ByVal dwImageType As Long, _
  ByVal dwDesiredWidth As Long, _
  ByVal dwDesiredHeight As Long, _
  ByVal dwFlags As Long) As Long
 
' Get/Set-Class nIndex-Konstanten
' ===============================
 
' Ermittelt die Größe des Extraspeichers der Klasse
Private Const GCL_CBCLSEXTRA = -20
 
' Ermittelt die Größe des Extraspeichers des Fensters
Private Const GCL_CBWNDEXTRA = -18
 
' Ermittelt das Handle des Brush's der Klasse
Private Const GCL_HBRBACKGROUND = -10
 
' Ermittelt das Handle des Cursors der Klasse
Private Const GCL_HCURSOR = -12
 
' Ermittelt das Handle des Icons der Klasse
Private Const GCL_HICON = -14
 
' Ermittelt das Handle des Moduls der Klasse
Private Const GCL_HMODULE = -16
 
' Ermittelt den Menünamen der Klasse
Private Const GCL_MENUNAME = -8
 
' Ermittelt den Fensterstyle der Klasse
Private Const GCL_STYLE = -26
 
' Ermittelt die Prozeduradresse der Klasse
Private Const GCL_WNDPROC = -24
 
 
' LoadImage dwImageType-Konstanten
' ================================
 
' gibt einen Handle zu einem Bitmap zurück
Private Const IMAGE_BITMAP = 0
 
' gibt einen Handle zu einem Icon zurück
Private Const IMAGE_ICON = 1
 
' gibt einen Handle zu einem Cursor zurück
Private Const IMAGE_CURSOR = 2
 
' gibt einen Handle zu einer Enhanced Metadatei zurück
Private Const IMAGE_ENHMETAFILE = 3
 
 
' LoadImage dwFlags-Konstanten
' ============================
 
' Lädt ein Bitmap mit Dib-Sektionen
Private Const LR_CREATEDIBSECTION = &H2000
 
' Lädt das Bild in den Standardfarben (Not LR_MONOCHROME)
Private Const LR_DEFAULTCOLOR = &H0
 
' Lädt das Bild in der Standardgröße des Bildes
Private Const LR_DEFAULTSIZE = &H40
 
' Lädt das Bild aus einer Datei
Private Const LR_LOADFROMFILE = &H10
 
' Ersetzt bestimmte Grautöne eines Bildes mit den
' Systemfarben für 3D-Ramen, die normalerweise den
' Grautönen zugeordnet sind
Private Const LR_LOADMAP3DCOLORS = &H1000
 
' Ersetzt alle Pixel des Bildes mit dem Farbwert des ersten
' Pixeles des Bitmap durch die Standard
' Fensterhintergrundfarbe
Private Const LR_LOADTRANSPARENT = &H20
 
' Lädt das Bild in Schwarzweiss
Private Const LR_MONOCHROME = &H1
 
' Diese Option erzwingt das Zurückgeben des gleichen Handles,
' wenn die Funktion mehrmals aufgerufen wird
' und das Bild nicht erneut geladen wird
Private Const LR_SHARED = &H8000
 
' Lädt das Bild aus einer Resource
Private Const LR_COPYFROMRESOURCE = &H4000
 
 
' Fensternachrichten
Private Const WM_CLOSE = &H10 ' Schliesst das Fenster
 
' Handle auf das ICON
Private hIcon As Long
' Beispiel: Der Fensterklasse unserer Form ein anderes
' Icon zuweisen
Private Sub Form_Load()
  Dim Retval As Long
  Dim Buffer As String * 256
 
  ' Klassennamen ermitteln
  Retval = GetClassName(Me.hWnd, Buffer, Len(Buffer))
  If Retval = 0 Then
    MsgBox "Der Klassenname konnte nicht ermittelt werden"
  Else
    MsgBox "Der Klassenname dieses Fensters ist """ & _
      Left$(Buffer, Retval) & """"
  End If
 
  ' Icon laden
  hIcon = LoadImage(App.hInstance, App.Path & "\Misc01.ico", _
    IMAGE_ICON, 16&, 16&, LR_LOADFROMFILE)
  If hIcon = 0 Then
    MsgBox "Fehler beim Laden des Icons"
    Exit Sub
  End If
 
  ' Icon der Klasse zuweisen (das Fenster zeigt darauf
  ' keinerlei Reaktionen.
  ' Man müsste zu diesem Zweck selbst ein Fenster dieser
  ' Klasse mit Hilfe der CreateWindowEx Funktion erstellen)
  Retval = SetClassLong(Me.hWnd, GCL_HICON, hIcon)
  If Retval = 0 Then
    MsgBox "Das Icon konnte nicht zugewiesen werden"
  End If
End Sub
' Form schließen - einmal anders
Private Sub Command1_Click()
  Dim ProcAddress As Long
 
  ' Ermitteln der Prozedur-Adresse unserer Form
  ProcAddress = GetClassLong(Form1.hWnd, GCL_WNDPROC)
  If ProcAddress = 0 Then
    MsgBox "Die Prozeduradresse der Fensterklasse " & _
      "konnte nicht ermittelt werden."
    End
  End If
 
  ' Schließen-Nachricht (WM_CLOSE) senden
  CallWindowProc ProcAddress, Me.hWnd, WM_CLOSE, 0&, 0&
End Sub

 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.