CListCtrl & LBUTTONDOWN

Signaler
Messages postés
65
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
26 mars 2007
-
Messages postés
65
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
26 mars 2007
-
Bonjour,



j'ai dans une boite de dialogue de mon appli une CListCtrl dans laquele
j'insère de ligne coreespondant à des produits selectionés. Mon
problème est que je n'arrive pas à capter l'evenement OnLButtonDown
quand je clique sur une des lignes de ma liste.

J'ai pourtant mis dans mon .cpp :



BEGIN_MESSAGE_MAP(CSaisieViewBottom, CFormView)

//{{AFX_MSG_MAP(CSaisieViewBottom)

ON_WM_LBUTTONDOWN()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()



void CSaisieViewBottom::OnLButtonDown(UINT nFlags, CPoint point)

{

AfxMessageBox("Click");

}



Avec la declaration correspondante dans le .h, mais rien y fait.



Qui pourrait m'aider svp ?

9 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
ON_WM_LBUTTONDOWN
est à la riguer à traiter dans une classe perso dérivée de
CListCtrl
. Si c'est pour détecter un changement de sélection, c'est plus ON_LBN_SELCHANGE qu'il faut traiter
Messages postés
65
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
26 mars 2007

Ma classe derive d'une CFormView, et contient plusieurs CListCtrl.

Je cherche a intercepter un click de souris sur une des lignes de ma liste pour faire apparaitre une popup sur celle ci.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Donc il va falloir créer une nouvelle classe dérivant de CListCtrl. Cette
classe ne traitera que le click. Pour l'incorporer à la vue il faudra faire un CreateWindow (ou Create je sais plus) au lieu d'utiliser les ressources. Il est cependant peut-être possible d'associer directement l'ID du contrôles à la nouvelle classe en modifiant à la main les zones AFX des sources.
Messages postés
65
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
26 mars 2007

Y'aurait pas un moyen de faire un truc du genre :

ON_BN_DOUBLECLICKED(IDC_BTN_QUANTITE_PLUS, OnDoubleclickedBtnQuantitePlus)

Comme j'ai fait avec les boutons de ma fenetre dans le message map ?
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Pour le double click oui :
ON_LBN_DBLCLK

pour le silple click il faut sous-classé.
Messages postés
65
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
26 mars 2007

J'ai essayé cet evenement, mais je n'arrive pas à le recevoir. J'ai
donc essayé de rajouter LBS_NOTIFY dans le style de ma liste :

m_Liste.SetExtendedStyle(m_Liste.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LBS_NOTIFY);




Mais rien n'y fait, ca ne passe tjs pas.

RQ: je ne sais pas si ca joue, mais je n'ai pas de create sur ma liste,
j'ai juste une association de variable sur ma liste avec le classe
wizard :

DDX_Control(pDX, IDC_LISTE, m_ListeRefs);

avec IDC_LISTE l'identifiant de ma liste dans mes ressources.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Le style LBS_NOTIFY est à cocher dans les ressources de ta form. ou à rajouter par ModifyStyle

Essaye dans ce cas de traiter WM_NOTIFY et le code NM_CLICK
Messages postés
65
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
26 mars 2007

Si le style est à modifier sur les propriétés de ma boite de dialogue, je ne le trouve pas.

J'ai un "No parent notify" decoché, mais je ne pense pas que ce soit ca ?
Messages postés
65
Date d'inscription
mardi 13 juillet 2004
Statut
Membre
Dernière intervention
26 mars 2007

En fait mon soucis c'est que je n'arrive pas a intercepter un seul des messages specifier dans la MSDN ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_clistbox.asp
)

Je pense que je vais abandonner l'ajout des mes elements selectionnés
dans cette liste, je vais passer par un autre control, en esperant que
ca marche avec cet autre control. Je ne sais pas encore lequel utiliser.