IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

CListCtrl et cases à cocher : en faire une classe autonome


Sujet :

MFC

  1. #1
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut CListCtrl et cases à cocher : en faire une classe autonome
    Salut,

    Je viens de trouver dans la FAQ le code pour rajouter des cases à cocher à un CListCtrl , c'est super

    Mais je voudrais bien en faire une classe autonome, et il y a un point qui me pose problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetExtendedStyle( GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES );
    Ou puis-je placer ce code à l'interieur de la ma classe ? Parceque
    - dans le constructeur le contrôle n'a pas encore été créé -> plante à l'execution
    - dans le OnCreate il n'y a plus d'erreur d'execution mais toujours pas de cases à cocher
    - je ne trouve pas de message Init quelconque dans la liste

    Une p'tite idée siouplai ?


    ps: ListView_GetCheckState marche parfaitement, mais ListView_SetCheckState n'est pas reconnu (alors qu'il est bien présent dans la MSDN), mais c'est pas grave Farscape nous a donné une solution alternative

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    essaye de surchager la fonction PreSubClassWindow().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void CMyListCtrl::PreSubclassWindow() 
    {
        CListCtrl::PreSubclassWindow();
    SetExtendedStyle( GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES );
    }

  3. #3
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Super !
    merci beaucoup, ça marche parfaitement (je ne connaissais pas cette méthode la).

    Euh, je vais p'tet abuser, mais est-ce qu'il y a une astuce au niveau conception pour gérer la notification de changement d'état d'une case à cocher ?

    cf. http://c.developpez.com/faq/vc/?page...StatusCheckbox

    Ca consite normalement à intercepter LVN_ITEMCHANGED pour le contrôle en question, mais j'aurais bien vu quelquechose de [b]plus simple et transparent[b], du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CCheckListCtrl m_liste;
    void callback( CCheckListCtrl* p , int index, bool check );
     
    m_liste.setCheckCallback(callback);
    Et le callback serait appelé dès qu'une case de la liste a été cliquée...
    Mais j'en demande peut-être beaucoup

    Merci !

  4. #4
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Alors en fait, c'est bon ca marche,
    en ajoutant une méthode sur LVN_ITEMCHANGED de la nouvelle classe, ça marche:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void CCheckListCtrl::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
    {
         // ... code de la FAQ
         // 
         //  note :  avec  pNMListView->iItem  on récupere l'élément en question
    }

    Mainteant je cherche juste comment desativer la sélection sur le contrôle, et j'ai la classe idéale Ca doit se gérer dans LVN_ITEMCHANGING, à force de jouer avec les parametre je vais finir par trouver !

  5. #5
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Hoplà, résolu

    Bah si ça intéresse quelqu'un, je peux poster la classe, elle a les caracteristiques suivantes:

    - se comporte comme un CListCtrl, càd que SetImageList, InsertColumn, InsertItem, etc fonctionnent
    - possède des cases à cocher
    - les lignes ne sont plus selectionnables (en option)
    - un callback peut être appelée quand une case est cochée

    Et comme d'hab, il suffit de remplacer CListCtrl par CCheckListCtrl dans le .h

    Voilà voilà

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeur case d’option ou case à cocher et faire une somme
    Par mjp06 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/09/2008, 16h39
  2. Réponses: 1
    Dernier message: 28/12/2007, 12h14
  3. Comment faire une classe avec deux form?
    Par Mickey.jet dans le forum Delphi
    Réponses: 10
    Dernier message: 04/07/2006, 18h23
  4. CListCtrl avec case à cocher
    Par bebel72 dans le forum MFC
    Réponses: 5
    Dernier message: 20/06/2006, 14h54
  5. [VBA-E2003] case à cocher qui verouille une case
    Par Slumpy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/04/2006, 00h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo