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 :

Le Tooltip n'apparaît pas sur plusieurs CListCtrl


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Le Tooltip n'apparaît pas sur plusieurs CListCtrl
    Bonjour

    J'ai implémenté l'apparition de Tooltip sur une CListCtrl et ça marche bien.
    La méthode employée est celle trouvée sur la plupart des sites :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
      ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
    ...
    int CEditableListCtrl::OnToolHitTest(CPoint point, TOOLINFO * pTI) const 
    ...
    BOOL CEditableListCtrl::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
    ...
    Le problème est lorsque j'ai 2 CListCtrl dans une même DialogBox, les Tooltips ne fonctionnent que pour la Première.

    Quelqu'un a-t'il déjà rencontré le problème ?

    Merci d'avance.
    Basteo

  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,
    tu as appelé EnableToolTips pour les deux listCtrl ?

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Malheuresement oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        m_list_1.EnableToolTips(TRUE);
        m_list_2.EnableToolTips(TRUE);
    Le pire c'est que pendant mes recherches sur les tooltips, j'ai trouvé un forum ou quelqu'un énonçait ce problème, mais impossible de remettre la main dessus.

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Personne ?
    Bon, j'ai cherche un peu de mon côté...et le problème est pour le moins surprenant.

    C'est le dernier qui parle dans la méthode DoDataExchange qui a raison...

    Dans ce cas, seul les tooltips de ma liste 2 s'affiche correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	DDX_Control(pDX, IDC_LIST_CTRL, m_list1);
    	DDX_Control(pDX, IDC_LIST_CTRL2, m_list2);
    Dans ce cas, seul les tooltips de ma liste 1 s'affiche correctement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	DDX_Control(pDX, IDC_LIST_CTRL, m_list2);
    	DDX_Control(pDX, IDC_LIST_CTRL2, m_list1);
    Ca ne résout pas mon problème mais ça peut peut-être donner des pistes...
    Je ne maîtrise pas les arcanes de DoDataExchange...j'espère qu'une âme charitable passera par là.

    Basteo

    PS : J'utilise VC++ 6.0, au cas où...

  5. #5
    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
    à tout hasard tu peux montrer le code des messages implémentés ?
    j'avoue que je n'ai pas eu le cas de 2 clistctrl avec des toolstips jusqu'à présent.

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Tout d'abord, une précision : l'ordre du DoDataExchange n'y est peut-être pour rien, celui qui marche, c'est le premier sur lequel je déclenche un ToolTip.

    Ensuite, une question : j'ai recopié les exemples, mais que fait exactement le modificateur "const" sur une fonction ?


    Voici le code de mes évènements. Je me suis créé un code "minimaliste" pour voir ce qui ne va pas, mais là, je bloque.

    m_nColToolTip est une variable de classe initialisée à -1.
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    	ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
    	ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
    ...
     
    int CToolTipListCtrl::OnToolHitTest(CPoint point, TOOLINFO * pTI) const 
    {
        int x = 0;
        int i;
        int cnt = ((CListCtrl*)this)->GetHeaderCtrl()->GetItemCount();
     
        for ( i = 0 ; i < cnt ; i ++ )
        {
            x += ((CListCtrl*)this)->GetColumnWidth(i);
            if ( point.x < x ) 
            {
                GetClientRect( &(pTI->rect) );
                pTI->hwnd = m_hWnd;
                pTI->uId = i;
                pTI->lpszText = LPSTR_TEXTCALLBACK;
                ((CToolTipListCtrl*)this)->m_nColToolTip = i;
                return i;   //By returning a unique value per listItem,
                            //See if the point falls onto a list item        
            }
        }
        ((CToolTipListCtrl*)this)->m_nColToolTip = -1;
        return -1;
    }
     
     
    BOOL CToolTipListCtrl::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
    {
    	//Handle both ANSI and UNICODE versions of the message
    	TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
    	TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
     
        *pResult = 0;
     
        CString strTipText;
        strTipText.Format("Colonne %i", m_nColToolTip);
     
        //Deal with UNICODE
        #ifndef _UNICODE
            if (pNMHDR->code == TTN_NEEDTEXTA)
                lstrcpyn(pTTTA->szText, strTipText, 80);
            else
                _mbstowcsz(pTTTW->szText, strTipText, 80);
        #else
            if (pNMHDR->code == TTN_NEEDTEXTA)
                _wcstombsz(pTTTA->szText, strTipText, 80);
            else
                lstrcpyn(pTTTW->szText, strTipText, 80);
        #endif
     
        return FALSE; 
    }

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par basteo Voir le message
    Ensuite, une question : j'ai recopié les exemples, mais que fait exactement le modificateur "const" sur une fonction ?
    Juste sur ce point : il dit au compilateur de vérifier que la méthode maintient l'objet dans le même état : donc tu ne peux modifier la valeur d'un membre; tu ne peux appeler une méthode qui ne serait pas elle aussi const; tu ne peux appeler une méthode d'un membre qui ne serait pas const. Ca sert : 1/A renforcer la sémantique de ta classe (le comportement de ta classe est mieux défini) 2/Il me semble que certains compilateur utilise cette propriété lors de l'optimisation. En fait, il est assez important en développement C++ de mettre des const là où c'est approprié. Ca évite souvent des bêtises...

    Quelques liens :
    * FAQ
    * Traduction Pensez en C++

Discussions similaires

  1. Bordure sur hover n’apparaît pas sur portable
    Par mario94 dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 26/08/2013, 13h13
  2. [RegEx] Capture et remplacement ne se font pas sur plusieurs lignes
    Par Compufan dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2013, 21h48
  3. Réponses: 4
    Dernier message: 12/09/2010, 15h13
  4. [DW 8 & antérieurs] Mon flv n'apparaît pas sur internet
    Par Daguerre dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 12/02/2010, 09h53
  5. Flash n'apparaît pas sur ma page
    Par th000m dans le forum Intégration
    Réponses: 1
    Dernier message: 05/12/2007, 15h02

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