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

Soyez le premier à donner votre avis sur cette source.

Vue 10 550 fois - Téléchargée 833 fois


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

Ajouter un commentaire Commentaires
fostos Messages postés 21 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 30 octobre 2007
16 févr. 2007 à 03:43
Fort ce module 10/10
cs_GecK Messages postés 5 Date d'inscription vendredi 19 décembre 2003 Statut Membre Dernière intervention 17 mars 2006
17 mars 2006 à 09:12
Super.
PCPT tu m'a sorti d'une grosse galère.
Le source est vraiment impec, clair et bien débroussaillé (pas de trucs inutiles) donc chapeau et encore merci :)
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
29 sept. 2005 à 20:57
salut CsM,
et non, pas de design particulier cette fois, ce n'est pas du tout le but. seul le module est important (donc dispo sans dl).
la moto, c'est juste pour avoir un exemple de suite^^ (toujours mieux qu'un simple label)
PCPT
CsM Skate Messages postés 60 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 20 mai 2007
29 sept. 2005 à 20:14
Bonjour PCPT,
ça revien à un code en C enfaite (gestion des messages), code bon comme d'habitude, mais pas de superbe design cette foi ;)
Noiretulipe Messages postés 164 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 13 juillet 2008
29 sept. 2005 à 17:54
rien à voir avec la choucroute, mais or mis le vert que je n'aime pas trop, la moto est belle ... ;)

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.