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 :

[MFC] CToolTipCtrl - plantage si longueur text trop grande


Sujet :

MFC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 93
    Par défaut [MFC] CToolTipCtrl - plantage si longueur text trop grande
    J'ai un problème de longueur de chaine pour un tooltip
    Si la longueur du texte est inférieur à 80 , c'est tout bon
    sinon j'ai un plantage lorque j'appelle la fonction GetText du tooltip.

    Ai-je un pb ailleurs ou est-ce la limite pour le texte d'un toolTip
    car je trouve cette limite très basse !

    Merci

  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 montrer ton code.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 93
    Par défaut
    Merci bcp pour ton aide.

    Voici mon code:

    Ma boite de dialogue contient un objet CMonToolTip nommé m_ToolTip
    Elle intercepte le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTipNotify)

    // Traitement du message de bulle d'aide
    //________________________________
    //
    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
     
     
    BOOL CMaBoiteDeDialog::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
    {
    	//When you handle the TTN_NEEDTEXT notification message,
    	//specify the string to be displayed in one of the following ways:
     
    	//Copy the text to the buffer specified by the szText member.
    	//Copy the address of the buffer that contains the text to the lpszText member.
    	//Copy the identifier of a string resource to the lpszText member, and copy the handle of the instance that contains the resource to the hinst member.
     
    	BOOL Result = m_ToolTip.OnToolTipNotify(id,pNMHDR,pResult);
     
    	return (Result);
    }

    Ma classe CToolTip contient un objet MFC CToolTipCtrl nommé m_ToolTip
    et un buffer BuffText[256]

    // __________ Gestion des bulles d'aide associees aux boutons du menu __________
    //
    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
     
     
    BOOL CMonToolTip::OnToolTipNotify( UINT /*id*/, NMHDR * pNMHDR, LRESULT * /*pResult*/ )
    {
     
    	TOOLTIPTEXT	*pTTT = (TOOLTIPTEXT *)pNMHDR;
    	UINT		nID = pNMHDR->idFrom;
    	CString		Texte;
    	BOOL		Result = FALSE;
     
     
    	if (pTTT->uFlags & TTF_IDISHWND)
    	{
    		// idFrom is actually the HWND of the tool
    		nID = ::GetDlgCtrlID((HWND)nID);
     
    		CString str;
    		m_ToolTip.GetText(str,m_Wnd,nID);
     
    		// sécurité 
    		int l= str.GetLength();
    		if (l > (sizeof(BuffText)-1))
    			l = sizeof(BuffText)-1;
     
    		strncpy(BuffText,str.GetBuffer(),l);
    		BuffText[l] = 0;
    		pTTT->lpszText = BuffText;
    		Result = TRUE;		
    	}
    	return (Result);
    }

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu devrais allouer ton bufftext dynamiquement à partir de la taille du CString
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char * bufftext = new char[str.GetLength()+1];

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 93
    Par défaut
    Ok , mais je le détruit a quel moment ?

    Est-ce que mon pb viendrait de là ?

    Merci

  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
    ton buffer BuffText est declaré ou ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 93
    Par défaut
    mon buffer est Dans l'objet CMonToolTip

    mais ça plante à l'instruction d'avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ( m_ToolTip.GetText(str,m_Wnd,nID);
    Je viens de voir dans la structure
    (TOOLTIPTEXT *) utilisée par CToolTipCtrl qu'il y a un buffer text dimensionné à 80.

    Je pense donc qu'on est limité à 80.

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    on dirait bien, alors dans ce cas, on dirait qu'il faut plutot utiliser lpszText dans la structure

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/04/2011, 13h34
  2. Réponses: 2
    Dernier message: 16/09/2009, 23h32
  3. QLabel avec taille du texte trop grande
    Par elraton dans le forum Débuter
    Réponses: 8
    Dernier message: 03/09/2009, 16h17
  4. Réponses: 2
    Dernier message: 09/10/2006, 17h36
  5. texte trop grand dans les boutons
    Par de_bu_gg_er dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 05/07/2006, 12h28

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