Selection dans une listeview

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 25 janv. 2007 à 17:44
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 - 25 janv. 2007 à 20:44
Yop,

Voila je voulai faire en sorte que lorsque un item avait été trouvé lord d'une recherche, celui ci soit selectionner. Attention la fenêtre de recherche est une autre fenêtre que la principale. La recherche fonctionne très bien, le problème est que mon item ne se selectionne jamais. Je me suis dit,c'est sans doute un problème de focus, donc lorsque le text est trouvé, juste avant la selection, je fait un SetFocus sur la listview, mais bon cela ne sert a rien, car la fenetre de recherche part derrière la principal, ce n'est pas pratique et mon item n'est de toute façons pas sélectionner. Pour la sélection j'utilise ListViewSetItemState(hwLV,pos,LVIS_SELECTED,0) il y a-t-il une erreur ?

En résumé je voudrai bien faire comme la recherche du notepad windows. C-a-d la fenetre de recherche reste en 1er plan et derrière, mon item est selectionné dans la listeView :s mais je n'y arrive pas.

J'espère que vous m'avez compris lol

Merci d'avance.
++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2007 à 17:55
http://www.cppfrance.com/code.aspx?ID=35788



Regarde à la fin de lvrtInsertItem().

ciao...
BruNews, MVP VC++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
25 janv. 2007 à 18:38
Cela ne fonctionne pas, je comprend pas pourquoi . Ma listview a bien les style étendu, et je fait exactement comme toi, mais rien n'y fait.

Voici le code de traitemant du message WM_COMMAND de ma fnêtre de recherche (dialogbox) :

  case WM_COMMAND :
                 switch(HIWORD(wParam)){
                     case BN_CLICKED : switch(LOWORD(wParam)){
                                                                  case IDD_SEARCH : { char szText[200];
                                                                                                        char szSearch[200];
                                                                                                        int iCount,iX;
                                                                                                        LV_ITEM lviItem;
                                                                                                        BOOL bo = 0;
                                                           
                                                                                                        iCount = ListView_GetItemCount(hwListVParentWindows);
                                                                                                        if(iCount == 0)break;
                       
                                                                                                       GetWindowText(hwEditSearch,szSearch,200);


                                                                                                       lviItem.mask = LVIF_TEXT | LVCF_WIDTH;


                                                                                                       for(iX=iPosition;iX<iCount;++iX){
                                                                                                                        lviItem.iItem = iX;
                                                                                                                        lviItem.iSubItem = 1;
                                                                                                                        lviItem.cchTextMax = 200;
                                                                                                                        lviItem.pszText = szText;
                                                                                                                        ListView_GetItem(hwListVParentWindows,&lviItem);


                                                                                                                        if(MyStrStr(szText,szSearch)){bo=1;break;}
                                                                                                        }
                                                           
                                                                                                         if(bo){SendMessage(hwListVParentWindows,LVM_ENSUREVISIBLE,iX,0);
                                                                                                            lviItem.state = LVIS_SELECTED | LVIS_FOCUSED;
                                                                                                            lviItem.stateMask = LVIS_SELECTED | LVIS_FOCUSED;
                                                                                                            SendMessage(hwListVParentWindows,LVM_SETITEMSTATE,(long)iX,(long)&lviItem);
                                                                                                            iX++;
                                                                                                            iPosition = iX;
                                                                                                         }
                                                                                            
                                                                                         }
                                       break;
                                       case IDD_CANCEL : EndDialog(hwDlg,0);
                                       break;
        
                                }
                   break;
++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
25 janv. 2007 à 18:56
Enfin cela va un peu mieu vu que grace a ensurevisible ont assure sa visibilité dans la listview, mais il est tjrs pas en surbrillance :s

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
25 janv. 2007 à 20:15
Salut !

A la ligne : lviItem.mask = LVIF_TEXT | LVCF_WIDTH;
Il te manquerait pas LVIF_STATE ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
25 janv. 2007 à 20:25
trop drole !!!

ciao...
BruNews, MVP VC++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
25 janv. 2007 à 20:36
Certe mais cela ne change rien.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
25 janv. 2007 à 20:44
Plus sérieusement ! C'est ton statemask je pense qui déconne. Il sert à masquer les items qui seront affectés selon leur état.
Donc là toi tu demandes de modifier des items qui ont le focus et sont déjà sélectionnés.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
_________________________________________________
Site officiel de YoyoCut, découpe fichiers open source
0
Rejoignez-nous