Page 1 sur 1

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

Posté : dim. 23 juin 2013 14:13
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.

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

Posté : dim. 23 juin 2013 16:19
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

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

Posté : dim. 23 juin 2013 17:18
par aulus
Merci pour ces explications. J'ignore donc les avertissements.

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

Posté : dim. 23 juin 2013 17:40
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

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

Posté : dim. 23 juin 2013 18:11
par aulus
Merci pour cette astuce. Me voilà plus serein devant mon écran :D