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 :

HDN_ITEMCLICK dans une classe dérivée


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut HDN_ITEMCLICK dans une classe dérivée
    Bonjour!
    Voilà plusieurs semaines (plusieurs mois) que je bosse sur un projet monumental
    La partie qui est en train de me rendre dingue est la suivante.

    Pour pouvoir modifier l'apparence de ma CListCtrl, j'ai utilisé le code de farscape se trouvant ici:
    http://cpp.developpez.com/faq/vc/?pa...tCtrlOwnerDraw

    Avec du travail et pas mal de recherches j'ai réussi à insérer des checkbox, champs éditables et des champs passwords (eux aussi éditables).
    Néamoins, le bonheur est de courte durée car je travail sur la possibilité de passer (ou non) toutes les checkbox d'une colonne en cochée/non cochée par simple click sur le header de la colonne contenant mes checkbox.

    Malheureusement, je n'arrive pas à récupérer l'événement HDN_ITEMCLICK dans mon objet CListCtrlEx.
    J'ai essayé avec un événement LVN_COLUMNCLICK, mais je n'arrive pas à exploiter cet événement dans mon objet CLsitCtrl, mais uniquement dans l'objet CDialog qui le contient.

    Je suis totalement perdu.
    Quelqu'un a t il déjà réussi à gérer le click sur header dans une classe dérivée de CListCtrl?

    Merci d'avance

  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
    Par défaut
    salut,
    tu peux faire une classe dérivée pour gérer le header...
    dans le post qui suit j'avais personnalisé complètement le header control
    http://cpp.developpez.com/faq/vc/?pa...rlCustomHeader
    après il suffira de le subclasser dans la CListCtrl.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    subclasser ???

    C'est a dire?

  4. #4
    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
    Par défaut
    Citation Envoyé par fantomchris Voir le message
    subclasser ???

    C'est a dire?
    lit le post de la faq le dernier paragraphe ...
    Citation Envoyé par faq
    Il faut maintenant indiquer à la CListView ou au CListCtrl de travailler avec ce nouveau composant en subclassant le précédent.
    .....

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Par défaut
    D'accord... je crois que j'ai compris
    Le subclass permet de définir dynamiquement un objet héritant
    En gros, on se débrouille pour que la création d'une CHeaderCtrl, engendre automatiquement la création d'une surcouche CHeaderCtrlEx.
    J'espère que c'est ça...

    Mais le problème reste malheureusement existant:
    Je ne peux pas récupérer l'index de la colonne cliquée.
    Je clique sur le header, l'événement se déclenche correctement, mais je n'arrive pas à connaitre le numéro de la colonne cliquée.

    Ce truc va me rendre fou

  6. #6
    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
    Par défaut
    Citation Envoyé par fantomchris Voir le message
    D'accord... je crois que j'ai compris
    Le subclass permet de définir dynamiquement un objet héritant
    En gros, on se débrouille pour que la création d'une CHeaderCtrl, engendre automatiquement la création d'une surcouche CHeaderCtrlEx.
    J'espère que c'est ça...

    Mais le problème reste malheureusement existant:
    Je ne peux pas récupérer l'index de la colonne cliquée.
    Je clique sur le header, l'événement se déclenche correctement, mais je n'arrive pas à connaitre le numéro de la colonne cliquée.

    Ce truc va me rendre fou
    bien sur que si....,
    si tu regardes le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    //--------------------------------------------------------------
    UINT CHeaderCtrlEx::OnNcHitTest(CPoint point) 
    {
        // TODO: Add your message handler code here and/or call default
        HDHITTESTINFO hdhtiHotItem;
     
        hdhtiHotItem.pt = point;
        ScreenToClient(&hdhtiHotItem.pt);
     
        m_iHotIndex = SendMessage(HDM_HITTEST, 0, (LPARAM)(&hdhtiHotItem));
        if(m_iHotIndex >= 0)
        {
            HDITEM hditem;
            hditem.mask = HDI_ORDER;
            VERIFY(GetItem(m_iHotIndex, &hditem));
        }
     
        return CHeaderCtrl::OnNcHitTest(point);
    }
    quand la souris arrive sur le header ,cette fonction est appelée.
    le SendMessage permet de récupérer le numéro de colonne qui devient alors disponible dans les autres fonctions: OnLButtonDown, OnLButtonUp ...

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2011, 16h19
  2. préciser le type des objets dans une classe dérivée d'arraylist
    Par JCD21 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 28/06/2008, 18h04
  3. Réponses: 8
    Dernier message: 17/04/2007, 11h35
  4. Réponses: 4
    Dernier message: 17/03/2007, 01h06
  5. problème d'accès dans une classe dérivée!
    Par chrono23 dans le forum C++
    Réponses: 47
    Dernier message: 10/10/2006, 11h22

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