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

5/5 (5 avis)

Vue 10 226 fois - Téléchargée 808 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

Messages postés
21
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
30 octobre 2007

Fort ce module 10/10
Messages postés
5
Date d'inscription
vendredi 19 décembre 2003
Statut
Membre
Dernière intervention
17 mars 2006

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 :)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
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
Messages postés
60
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
20 mai 2007

Bonjour PCPT,
ça revien à un code en C enfaite (gestion des messages), code bon comme d'habitude, mais pas de superbe design cette foi ;)
Messages postés
165
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
13 juillet 2008

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.