Bonjour
Est-ce qu'il est possible de savoir si on clique dans un CListCtrl sur une ligne déjà sélectionnée?
Merci.
Bonjour
Est-ce qu'il est possible de savoir si on clique dans un CListCtrl sur une ligne déjà sélectionnée?
Merci.
bah il suffit que tu stock dans une variable la ligne selectionner "avant" et que à chaque fois que l'on reclique sur le controle tu compares, "la "nouvelle" ligne cliqué et l'ancienne !
J'avais pensé à faire cela. Mais le problème c'est lorsqu'on utilise les touches du clavier. J'ai essayé de mettre à jour la variable aussi dans le LvnItemChanged. Mais le problème, c'est que l'evenement ItemChanged est envoyé avant le Clicked, donc dans le clicked on a tjs ancien selectionne = nouveau selectionne
je ne sais pas, je ne connais pas les MFC, donc je peux difficilement t'aider autrement que ce que je t'ai dit.
désoler, et bonne continuation !
fais le test dans l'évenment ItemChanged alors
L'événement ItemChanged n'est pas appelé lorsqu'on clique sur une ligne déjà sélectionnée (l'item ne change pas )
Salut!
Tu n'as qu'a capturer l'evenement ItemChanged et ne rien faire! Puis quand tu capture Clicked alors tu fais ton traitement!
Attention tu n'appel la methode parente que lorsque tu capture le message "Clicked"!!!
Autrement il me semble que a une methode IsSelected qui t'éviterait un boolean :
Cathar_Rhythm ->
salut,
tu as regardé ça:
http://c.developpez.com/faq/vc/?page...CtrlEventMouse
En fait, je veux faire qqchose dès qu'on sélectionne une ligne (par click ou par clavier) et aussi lorsqu'on clicke sur une ligne deja sélectionnée et je veux si possible le faire qu'une seule fois. Car pour l'instant, j'effectue la même action deux fois. Donc c'est pas très très grave mais si vous avez une solution pour ne la faire qu'une seule fois...
Je ne vois pas trop le probleme, tu peux le faire facilement en jouant avec les messages de windows et les gestionnaires d'évènement.
Cathar_Rhythm ->
En fait, dans l'événement ItemChanged, je fais une action et dans l'évènement Clicked, je fais la même action. Donc, lorsque je clicke sur une ligne non sélectionnée, je fais deux fois la même action. Donc j'aimerais savoir s'il est possible de la faire une seule fois.
Malheureusement, il me semble que tu seras obligé de déclarer tes 2 gestionnaires par contre tu peux le faire de la manière suivante si c'est le même code
Comme comme ça tu écris qu'une seule fois le code!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void MaClasse::OnCLicked(<parametres>) { .... } void MaClasse::OnItemChanged(<parametres>) { this->OnClicked(<parametres>); //Si se sont les mêmes parametres //Sinon, mais je ne suis plus très sûre de la syntaxe SendMessage(WM_CLICKED, this, NULL); }
Cathar_Rhythm ->
salut,
essaye de proceder comme suit:
traitement systematique sur le click souris.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 void CSdiSplitterView::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult) { LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; // TODO: Add your control notification handler code here m_bKeydown =true; *pResult = 0; } void CSdiSplitterView::OnClick(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here TRACE("\n Click"); *pResult = 0; } void CSdiSplitterView::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here TRACE("\n OnItemchanged :%d",m_bKeydown); if(m_bKeydown) { // TRAITEMENT. } m_bKeydown=false; *pResult = 0; }
dans itemchanded traitement uniquement si evenement clavier avant (variable m_bKeydown).
Avec le OnKeyDown, ça marche très bien.
Donc merci beaucoup.
Partager