Je veux avoir CListCtrl.EditLabel() pour n'importe quelle colonne de la liste. Comment puis-je implémenter une telle fonctionnalité?Comment modifier les colonnes sur place avec CListCtrl?
Répondre
Cela est faisable, mais cela nécessite un peu de bourrage avec les clics de souris et les événements de mise au point. En un mot, vous interceptez le message du bouton gauche de la souris et convertissez-le en détails de frappe de cellule (c'est-à-dire un index de ligne et de colonne). Avec ces détails de cellule, vous ne pouvez pas déterminer la taille et l'emplacement de la cellule de vue de liste, ni la valeur de texte qu'elle contient.
Créez maintenant un contrôle CEdit directement sur cette cellule en utilisant les détails de taille et d'emplacement de l'étape précédente et donnez-lui la valeur textuelle de la cellule.
La dernière étape consiste à gérer les événements de saisie du focus et du clavier pour CEdit afin que les détails du texte de CEdit puissent être remis dans la cellule de vue liste.
Il faut une bonne quantité de codage, mais quand il est bien fait, il fonctionne bien comme une alternative à un contrôle de grille.
N'essayez pas avec CListCtrl. Utilisez le MFC Grid Control. Nous le déployons dans une application clé en main avec succès. Il offre l'édition sur place, checkbox, spin, etc pour toutes les cellules, ainsi que les en-têtes de colonne et de ligne, auto-taille, auto-expand, couleurs, glisser-déposer.
Mieux utiliser http://www.codeproject.com/KB/list/CGridListCtrlEx.aspx il n'est pas laid comme sur Vista/Win7 – Lothar