[R] WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

[R] WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)

#1

Message par aulus »

Bonjour,

Mikell a écrit ce code (extraits) dans un fil de ce forum :

Code : Tout sélectionner

...
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
...

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $tNMHDR, $hWndFrom, $iCode
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    $hListView = GuiCtrlGetHandle($listView)

    Switch $hWndFrom
        Case $hListView
            Switch $iCode
              Case $LVN_COLUMNCLICK
                   $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
                   $colonne = DllStructGetData($tInfo, "SubItem")
                   If $colonne = $lastclicked Then
                        $var = not $var
                   Else
                        $var = 0
                   EndIf
                   $lastclicked = $colonne
                   _LVSort($colonne, $var)
              Case $NM_DBLCLK  ; CLICK
                   Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
                   $item = DllStructGetData($tInfo, "Index")+1
                   Local $name = ControlListView($gui, "", $listview, "GetText", $item-1, 2)
                   Local $num = ControlListView($gui, "", $listview, "GetText", $item-1, 0)
                 _ShowData($num, $name)
           EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
...
 
J'obtiens les avertissements suivants :
WARNING: $hWnd: declared, but not used in func.
Func WM_NOTIFY($hWnd,
~~~~~~~~~~~~~~~~~~~~^
WARNING: $iMsg: declared, but not used in func.
Func WM_NOTIFY($hWnd, $iMsg,
~~~~~~~~~~~~~~~~~~~~~~~~~~~^
WARNING: $iwParam: declared, but not used in func.
Func WM_NOTIFY($hWnd, $iMsg, $iwParam,
J'ai tenté de supprimer les arguments jugés inutiles par le programme, mais alors la fonction ne marche plus.

Pourriez-vous m'éclairer sur l'utilité de ces arguments ?

Je vous remercie.
Modifié en dernier par aulus le dim. 23 juin 2013 17:18, modifié 1 fois.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)

#2

Message par matwachich »

Ignorez les messages d'erreur et ne supprimez JAMAIS ces arguments.
Cette fonction est appelée par l'API Windows lors d'un évènement WM_NOTIFY sur vos fenêtre, et comme c'est windows qui l'appel, alors la fonctions doit accepter le même nombre d'arguments qui seront passer lors de l'appel. (C'est une fonction callback pour être plus technique)

L'utilité de ces paramètres ...
hWnd - Handle de la fenêtre concerné par l'évènement
iMsg - C'est le message généré/envoyé par la fenêtre (dans ce cas, il sera toujours = WM_NOTIFY vu que c'est le seul message qu'on a demandé à rediriger vers cette fonction avec GUIRegisterMsg)
wParam et lParam - Sont des pointeur vers des structures de données remplies de plus de détails sur le message et l'évènement

Au fait, pour mieux comprendre tout ce tralala il faut connaitre un minimum l'API Win32
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)

#3

Message par aulus »

Merci pour ces explications. J'ignore donc les avertissements.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)

#4

Message par mikell »

Si le message d'erreur t'agace, tu peux ajouter l'expression #forceref pour les paramètres inutilisés dans la fonction, ça devrait calmer Au3Check

Code : Tout sélectionner

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [R] WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)

#5

Message par aulus »

Merci pour cette astuce. Me voilà plus serein devant mon écran :D
Répondre