Rubrik: Fenster | 13.09.01 |
CallWindowProc-Funktion Diese Funktion sendet eine Nachricht an ein Fenster bzw. seiner Fenstzerprozedur. | ||
Betriebssystem: Win95, Win98, WinNT 3.1, Win2000, WinME | Views: 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:
lpPrevWndFunc | Erwartet die Adresse der Prozedur, welche die Nachricht erhalten soll. |
hWnd | Erwartet das Handle des Fensters, welches die Nachricht empfangen soll. |
Msg | Erwartet eine Nachricht (z.B. eine der Standard-Fensternachrichten) |
wParam | Erwartet Zusatzinformationen der Nachricht (falls benötigt) |
lParam | Erwartet 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