VB 5/6-Tipp 0398: Demonstration von CallWindowProc
von Alex Englhardt
Beschreibung
Zeigt die CallWindowProc mal in anderem Zusammenhang. Geeignet für echte Subclassingfans oder einfach als Trockenübung zum Testen.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Textfeld "Text3" ' Steuerelement: Schaltfläche "cmdCallWindowProc" ' Steuerelement: Textfeld "Text2" ' Steuerelement: Textfeld "Text1" ' Steuerelement: Schaltfläche "cmdWindowProcB" ' Steuerelement: Schaltfläche "cmdWindowProcA" ' Steuerelement: Beschriftungsfeld "lblAdrCurrentWindowProc" ' Steuerelement: Beschriftungsfeld "lblAdrWindowProcB" ' Steuerelement: Beschriftungsfeld "lblAdrWindowProcA" 'Autor: Alex Englhardt 'E-Mail: Alex.Englhardt@t-online.de Option Explicit Private Declare Function CallWindowProc Lib "user32" 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 AdrWinProcA As Long Private AdrWinProcB As Long Private AdrCurrentWinProc As Long Private Sub cmdCallWindowProc_Click() Dim lngRet As Long If AdrCurrentWinProc > 0 Then lngRet = CallWindowProc(AdrCurrentWinProc, 1, 2, 3, 4) Call MsgBox("Rückgabewert: " & CStr(lngRet), _ vbInformation + vbOKOnly, "CallWinProc") End If End Sub Private Sub cmdWindowProcA_Click() AdrCurrentWinProc = AdrWinProcA Text3.Text = AdrWinProcA End Sub Private Sub cmdWindowProcB_Click() AdrCurrentWinProc = AdrWinProcB Text3.Text = AdrWinProcB End Sub Private Sub Form_Load() 'Adressen festlegen AdrWinProcA = GetAddressOfWinProc(AddressOf WinProcA) Text1.Text = GetAddressOfWinProc(AddressOf WinProcA) AdrWinProcB = GetAddressOfWinProc(AddressOf WinProcB) Text2.Text = GetAddressOfWinProc(AddressOf WinProcB) End Sub Public Function GetAddressOfWinProc(AddrWinProc As Long) As Long 'Diese Funktion wird verwendet um den AddressOf Operator auf 'eine Variable zu legen. GetAddressOfWinProc = AddrWinProc End Function '---------- Ende Formular "Form1" alias Form1.frm ---------- '--------- Anfang Modul "Module1" alias Module1.bas --------- 'Autor: Alex Englhardt 'E-Mail: Alex.Englhardt@t-online.de 'Die Variablen hWnd,MSG,wParam und lParam können frei verwendet 'werden. Beim Programmieren der WindowProc's das ByVal nicht 'vergessen -> sonst Abflug Option Explicit Public Function WinProcA(ByVal hWnd As Long, ByVal Msg As _ Long, ByVal wParam As Long, ByVal lParam As Long) As Long WinProcA = MsgBox("Die Funktion WinProcA wurde mit " & _ " folgenden Werten aufgerufen:" & vbCrLf & "hWnd=" & CStr(hWnd) & _ vbCrLf & "MSG=" & CStr(Msg) & vbCrLf & "wParam=" & CStr(wParam) & _ vbCrLf & "lParam" & CStr(lParam) & vbCrLf & vbCrLf & "Rückgabewert " & _ "wird über Ja/Nein bestimmt.", vbInformation + vbYesNo, "WinProcA") End Function Public Function WinProcB(ByVal hWnd As Long, ByVal Msg As _ Long, ByVal wParam As Long, ByVal lParam As Long) As Long WinProcB = MsgBox("Die Funktion WinProcB wurde mit " & _ " folgenden Werten aufgerufen:" & vbCrLf & "hWnd=" & CStr(hWnd) & _ vbCrLf & "MSG=" & CStr(Msg) & vbCrLf & "wParam=" & CStr(wParam) & _ vbCrLf & "lParam" & CStr(lParam) & vbCrLf & vbCrLf & "Rückgabewert " & _ "wird über Ja/Nein bestimmt.", vbInformation + vbYesNo, "WinProcB") End Function '---------- Ende Modul "Module1" alias Module1.bas ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.