Focus d'une fenêtre (évènements get lost par subclassing)


Description

Bonjour,
Comment savoir réellement quand une Form perd ou retrouve son focus...
il faut intercepter le Message WM_ACTIVATE

Source / Exemple :


'                   PCPT [AFCK] 17 sept 2005
'
'module SubClassing appelant la procédure de la Form appelante au changement du Focus
'
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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
                        (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'
Private Const WM_ACTIVATE = &H6
Private Const GWL_WNDPROC = (-4)
'
Private Old_WindowProc As Long
'
Public Enum eFocus
    LostFocus = 0
    GetFocus
End Enum
'
'
'
Private Function New_WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If Msg = WM_ACTIVATE Then
        New_WindowProc = True
        Call FORM_MAIN.ChangeControlsFocus(wParam)
    Else
        'laisse la procédure indemne pour les autres messages
        New_WindowProc = CallWindowProc(Old_WindowProc, hwnd, Msg, wParam, lParam)
    End If
End Function
'
'
Public Sub StartSubclassing(hwnd As Long)
    Old_WindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf New_WindowProc)
End Sub
'
'
Public Sub StopSubclassing(hwnd As Long)
    Dim lngRetVal As Long
    lngRetVal = SetWindowLong(hwnd, GWL_WNDPROC, Old_WindowProc)
End Sub

Conclusion :


j'avais fait ce code juste pour certains de mes tests, mais comme je vois très souvent la question sur le forum, le voici à disposition ;)

espérant qu'il soit apprécié^^
++

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.