Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0398: Demonstration von CallWindowProc

 von 

Beschreibung 

Zeigt die CallWindowProc mal in anderem Zusammenhang. Geeignet für echte Subclassingfans oder einfach als Trockenübung zum Testen.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

CallWindowProcA (CallWindowProc)

Download:

Download des Beispielprojektes [3,13 KB]

'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-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

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.