julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 2008
-
13 janv. 2005 à 03:50
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 2008
-
21 avril 2005 à 18:48
J'ai cree un listview avec les styles:
LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP
LVS_REPORT | LVS_EDITLABELS
WS_VISIBLE |WS_CHILD | WS_TABSTOP
Dans ce listview j'ajoute deux colonnes avec le code suivant:
BOOL LISTVIEWInitColumns(t_listview listview, unsigned int nbcolonnes, char *titrecolonne[], unsigned int taillecolonne)
{
LVCOLUMN lvc;
unsigned int icol;
char buffer[256];
// Add the columns.
for (icol = 0; icol < nbcolonnes; icol++)
{
lvc.iSubItem = icol;
strcpy(buffer, titrecolonne[icol]);
if (ListView_InsertColumn(listview.handle, icol, &lvc) == -1)
return FALSE;
}
return TRUE;
}
J'ajoute dans ces colonnes des données avec la finction suivante:
void LISTVIEWInsertItem(t_listview listview, unsigned int nbcolonnes, t_listviewdata data, int itemindex)
{
LVITEM lvi;
unsigned int i;
lvi.mask = LVIF_TEXT | LVIF_STATE ;
lvi.state = 0;
lvi.iImage = 0;
lvi.cchTextMax = 256;
lvi.iItem = itemindex;
for (i = 0; i < data.nbdata && i < nbcolonnes; i++)
{
lvi.iSubItem = i;
lvi.pszText = data.data[i];
// 1ere colonne =>On doit créer une nouvelle colonne
if (i == 0)
ListView_InsertItem(listview.handle, &lvi);
//Les autres colonnes =>On n'a qu'à ecrire dans la colonne precedemment créée
else
ListView_SetItemText(listview.handle, itemindex, i, lvi.pszText);
}
}
Pour info, mes structures sont:
typedef struct s_listview
{
HWND handle;
unsigned long ID;
unsigned int x, y, w, h;
}t_listview;
typedef struct s_listviewdata
{
unsigned int nbdata;
char *data[NBCOLMAX];
int imageindex; //Pour l'instant je travaille uniquement en vue details, donc pas besoin
} t_listviewdata;
Le probleme arrive lorsque je veux modifier lors de l'execution du prog les données contenues dans le listview. Je modifie sans probleme la donnée se trouvant dans la première colonne, mais je ne peux pas modifier les données des autres colonnes.
Je ne sais pas comment y remédier, alors si vous avez des idées... elles sont les bienvenues!
Merci d'avance!
PS: je travaille en C, pas en C++ ni avec les MFC!
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 13 janv. 2005 à 13:49
Je crois que je me suis mal exprimé!
Le problème que j'ai, n'est pas de modifier un item de la listeview quand je suis dans mon code! Si j'initialise mon listview avec des données contenues dans un fichier, et que au cours de l'execution du programme je modifie ce fichier, les items de ma listview se mettent bien à jour, et ce dans toutes les colonnes.
Ce qui ne marche pas, c'est lorsque j'execute mon programme et que je veux modifier un item d'une colonne en cliquant dessus. Ce qui si j'ai bien compris devrait être fait avec le style LVS_EDITLABELS. Avec ce style, je ne peux modifier que la première colonne lorsque je clique dessus. D'ailleurs je n'arrive à selectionner sur une ligne que la premiere colonne ou alors toute la ligne, mais pas colonne par colonne.
Si c'est pas assez clair, dites le moi, je mettrais le code, mais il est assez gros, alors jusque la j'evite!
Merci!
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
julienbj
Messages postés452Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention19 décembre 200815 21 avril 2005 à 18:48
En sous classant (il me semble que c'est comme ça que ça se dit), j'ai pu attraper les messages du listview avant qu'il ne soit traiter par la fonction par défaut, et la, tu peux faire ce que tu veux avec, et notamment lors d'un clic avec la souris sur une colonne, afficher un editbox dans lequel tu rentres la nouvelle valeur.
Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]