begin process at 2012 05 29 07:48:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

lundi 18 avril 2011 à 23:45:35 | ListView_FindItem() -> passage de LVITEM à LVFINDINFO .lParam

dyroj

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.
mardi 19 avril 2011 à 01:35:55 | Re : ListView_FindItem() -> passage de LVITEM à LVFINDINFO .lParam

patatalo

Membre Club Administrateur CodeS-SourceS
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.

@++
mardi 19 avril 2011 à 02:09:47 | Re : ListView_FindItem() -> passage de LVITEM à LVFINDINFO .lParam

patatalo

Membre Club Administrateur CodeS-SourceS
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.

@++
mardi 19 avril 2011 à 06:28:55 | Re : ListView_FindItem() -> passage de LVITEM à LVFINDINFO .lParam

dyroj

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.
mardi 19 avril 2011 à 09:51:58 | Re : ListView_FindItem() -> passage de LVITEM à LVFINDINFO .lParam

patatalo

Membre Club Administrateur CodeS-SourceS
re,

Quel Windows tu utilises ?
mardi 19 avril 2011 à 10:36:29 | Re : ListView_FindItem() -> passage de LVITEM à LVFINDINFO .lParam

dyroj

seven et xp. pk?
mardi 19 avril 2011 à 14:01:32 | Re : ListView_FindItem() -> passage de LVITEM à LVFINDINFO .lParam

patatalo

Membre Club Administrateur CodeS-SourceS
re,

Pas moyen de faire fonctionner ce truc alors:
Code C/C++ :
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.

@++
mardi 19 avril 2011 à 15:19:41 | Re : ListView_FindItem() -> passage de LVITEM à LVFINDINFO .lParam

dyroj

merci sa fonctionne


Cette discussion est classée dans : listview, lvitem, finditem, lparam, lvfindinfo


Répondre à ce message

Sujets en rapport avec ce message

Modification d'un item dans un listview [ par abdoulax ] Bon voilà une question tou bête pourtant ça fé un pti moment que je galaire dessus. En fait j'ai remplie mon listview avec des items, associé à une i listview petit probleme [ par babylone2019 ] Bonjour,voila j'ai creer cette fonction pour inserer du texte dans ma list view, mais bon il me retourne -1 des la fonction ListView_InsertItem();Mais Recherche dans listview [ par draluorg ] Salut a tous,J'ai un petit soucis de perf pour tester l'existance d'un SubItem dans une listview.En fait j'ai une fonction AddLvItem a qui j'envoie le api win32 listview dans tabcontrol c++ [ par Spunk62 ] Bonjour, je cherche a mettre une listview dans un tab control (par exemple si onglet 1 afficher listview sinon non) ma listview (reçois un tableau ): Gestion de la souris listview c++ api Win32 [ par Spunk62 ] Bonjour, je voudrai savoir comment récupérer la cellule d'une listview avec un click de la sourisvoila ce que j'ai fait:       case WM_LBUTTONUP:      listview finditem [ par cgmorpheus ] Bonjours tout le monde,Pour commencer je tien a dire que je suis débutant en API,alors excuser moi si je n'emploie pas les terme exact dans mon explic Trie Listview [ par abdoulax ] Bonjours,Je voudrai trier les colonnes d'un listview, voici ma fonction de comparaison :HWND hList;int CALLBACK Compare(LPARAM lParam1, LPARAM lParam2 Annuler Action Menu en Hookant [ par Zootella ] Hello, j'ai cette procédure hook: LRESULT CALLBACK HookMenuMessage(int nCode, WPARAM wParam, LPARAM lParam) { if(nCode == HC_ACTION) { ListView - API Windows [ par banane_rose ] dans tout les exemple que j'ai vu c'était que des dialog mais moi je veux pas de dialog ! comment on fait pour créer une listview par createwindowex TEXTURE OPENGL [ par Batman60 ] SALUTje voudrais afficher des textures bmp sur les faces d'un cube ,un défilement de 10 textures par exemple ,qui s'affichent une par une ,la même sur


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,343 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales