ListView_FindItem() -> passage de LVITEM à LVFINDINFO .lParam

dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012 - 18 avril 2011 à 23:45
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012 - 19 avril 2011 à 15:19
Bonjour,
je voudrai utiliser la fonction ListView_FindItem() dans une autre colonne que la 1ère . voila mon code qui ne fonctionne pas :

//struct LVITEM
LVITEM LvItem;
LvItem.mask = LVIF_PARAM | LVIF_TEXT;
LvItem.iItem = 0;
LvItem.iSubItem = 2;
LvItem.pszText = "abc";
LvItem.lParam = 0;


//struct LVFINDINFO
LVFINDINFO lvFindInfo;
lvFindInfo.flags = LVFI_PARAM | LVFI_STRING;
lvFindInfo.psz = "abc";
lvFindInfo.lParam = (LPARAM)(&LvItem);


int indexFind = ListView_FindItem(GetDlgItem(hWnd, C_LISTVIEW_CLIENTS), -1, &lvFindInfo);

std::cout << indexFind << std::endl;

Sa m'affiche -1 donc il ne trouve pas la chaîne "abc" alors qu'elle y est dans la listview. Je pence que le problèmes viens du passage de la structure LVITEM en LPARAM : lvFindInfo.lParam = (LPARAM)(&LvItem);
J'ai bien essayer lvFindInfo.lParam = (LPARAM)(LvItem); mais rien a faire sa ne fonctionne pas.
Donc si vous connaissez une procédure pour chercher une chaîne dans une autre colonne que la 1ère dans une listview, je vous prie de me l'expliquer.
Au revoir.

7 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
19 avril 2011 à 01:35
salut,

Ton problème vient de LVITEM, il faut que tu renseignes la colone désirée dedans avec LVIF_COLUMNS. Le reste est inutile car tu l'obtiendras après ta recherche par un GetItem.

@++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
19 avril 2011 à 02:09
re,

Correction.

A partir du moment au LVFINDINFO comprends LVFI_PARAM, tous les autres membres sont ignorés. Tu dois donc renseigner la chaîne à rechercher dans LVITEM je pense.

@++
0
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012
19 avril 2011 à 06:28
Merci pour ta reponce patatalo.
Pour le LVIF_COLUMNS j'avais déjà tester mais sa ne fonctionne pas.
Et pour la chaîne à rechercher dans LVITEM et bah c'est se que je fais : LvItem.pszText = "abc"; Mais sans resultat.
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
19 avril 2011 à 09:51
re,

Quel Windows tu utilises ?
0

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

Posez votre question
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012
19 avril 2011 à 10:36
seven et xp. pk?
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
19 avril 2011 à 14:01
re,

Pas moyen de faire fonctionner ce truc alors:
int ListView_FindItem2(HWND hListView, const LVITEM *flvi)
{
  LVITEM lvi;
  char szBuf[256];

  RtlMoveMemory(&lvi, flvi, sizeof(LVITEM));

  lvi.pszText = szBuf;
  lvi.cchTextMax = 256;

  while (1)
  {
    szBuf[0] = 0;
    lvi.mask &= LVIF_TEXT|LVIF_STATE|LVIF_PARAM;

    if (!ListView_GetItem(hListView, &lvi))
      return -1;

    if ((lvi.mask & LVIF_TEXT) && (flvi->pszText != 0))
      if (!strcmp(lvi.pszText, flvi->pszText))
        lvi.mask &= ~LVIF_TEXT;

    if ((lvi.mask & LVIF_STATE) && (lvi.state == flvi->state))
      lvi.mask &= ~LVIF_STATE;

    if ((lvi.mask & LVIF_PARAM) && (lvi.lParam == flvi->lParam))
      lvi.mask &= ~LVIF_PARAM;

    if (lvi.mask == 0) return lvi.iItem;

    lvi.mask = flvi->mask;
    lvi.iItem++;
  }
  return -1;
}


LVITEM lvi;
lvi.iItem = START_ITEM;
lvi.iSubItem = 1;		// 0=premi&#65533;re colonne, 1=deuxi&#65533;me colonne, ...
lvi.mask = LVIF_TEXT;
lvi.pszText = "Text2Find";

ListView_FindItem2(GetDlgItem(hWnd, IDC_LISTVIEW), &lvi))



Ne pas oublier d'incrémenter iItem pour des recherches consécutives.

@++
0
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012
19 avril 2011 à 15:19
merci sa fonctionne
0
Rejoignez-nous