J'ai créer une classe CButtonMenu descendante de CMenu.
Quelle m"éthode je dois surcharger pour capturer le clic de la souris sur tel ou tel élément de mon menu ??
J'ai créer une classe CButtonMenu descendante de CMenu.
Quelle m"éthode je dois surcharger pour capturer le clic de la souris sur tel ou tel élément de mon menu ??
Hé hé je m'y attendais à celle-là : maintenant que tu as ta liste de boutons comment gérer les événements ? Non ?
Pour gérer les pressions sur les boutons , à mon avis , il ne faut pas créer une nouvelle classe héritant de CMenu mais plutôt gérer les messages BN_CLICKED provenant des différents boutons dans la file de message et dans les méthodes WinProc ou PreTranslateMessage .
La tu auras les données message ( BN_CLICKED ) , le WPARAM et LPARAM du message qui te donne l'ID ressource du bouton.
Cet ID ressource peut-être exploité par GetCtrlID.
en fait, ces boutons ne sont pas les éléments d'un menu.
Lorsque je clic sur le bouton droit de la souris, j'ai un menu propre à chaque bouton qui apparait.
je voudrais gérer l'evenement clic sur le menu, et non pas sur le bouton.
Lorsqu'on fait un clic droit avec la souris c'est en régle générale pour afficher un menu contextuel ou "PopUp menu".Lorsque je clic sur le bouton droit de la souris, j'ai un menu propre à chaque bouton qui apparait.
Voir l'aide sur les pop-up menus
Un bouton c'est fait pour être pressé par la souris du bouton gauche.
Faire gaffe à ce genre de détails car l'utilisateur va s'y perdre.
Je concois tres bien, mais je me sers de ces boutons pour representer d objets auquels je peux attribuer d options via le clic droit. le clic gauche servant uniquement à la selection d'un objet. Cela me permet de gagner de la place sur l'ecran..
En ce qui concerne la capture d'evenement clic, tu m'as parlé d'une fonction WinProc que j'ai mise en place, mais le probleme c ke l'evenement BN_CLICKED n'est pas capturé ..
j'ai fait une boulette ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 LRESULT CECB2Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if (message == BN_CLICKED) MessageBox("clic bouton", "test", MB_OK); return CDialog::WindowProc(message, wParam, lParam); }
ya t il un autre moyen ?
Après investigations ( merci qui ??) il faut passer par WM_COMMAND puis traiter wParam qui contient le code du message BN_CLICKED ( si tel est le cas ) et lParam l'identifiant ressource du bouton :
ça marche il fallut que je teste cela dans un de mes projets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 LRESULT CECB2Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if(message==WM_COMMAND) { if (::GetDlgCtrlID((HWND) lParam)==IDC_BUTTON1) MessageBox("clic bouton", "test", MB_OK); } return CDialog::WindowProc(message, wParam, lParam); }![]()
si le but c'est d'afficher un menu contextuel ( click droit ), tu as l'evenement OnContextMenu
bé ecoute, je vais te dire que ça fonctionne et que c exactement ce dont j'avais besoin.
je te remercie pr tt, et c pas encore fini ...![]()
Partager