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

Windows Discussion :

CDC : GetTextExtentPoint32


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Par défaut CDC : GetTextExtentPoint32
    Bonjour,

    J'ai un problème lors de l'utilisation de GetTextExtentPoint32.
    J'ai préalablement crée un DC de la manière suivante :

    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
    CDC cdc;
    ....
    hDCBis = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
    hDC = CreateCompatibleDC(hDCBis);
    if (hDC == 0)
    {
        m_eLastError = ERR_CREATEFAILED;
        return false;
    }
    cdc.Attach(hDC);
    ...
    ...
    str = new CString("X");
    size = cdc.GetTextExtent(*str);
    Dans le dernier appel, ça me fait un ASSERT sur l'API windows..
    Je pense que ça peut venir du fait que dans mon dc la police n'est pas précisé. Comment puis-je l'ajouter à mon DC.. est-ce le LOGFONT que je dois préciser? Comment l'ajouter??
    Merci d'avance pour vos eclaircissements.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Et si tu nous disais quelle était l'assertion qui foire ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Par défaut
    C'est au niveau du GetTextExtent du cdc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Program: ...
    File: f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxwin1.inl
    Line: 666
    ....
    J'arrive vraiment pas à comprendre d'où ça peut venir, mais je soupçonne le Font non initialisé sur le cdc (hdc)

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Hé ben on regarde...
    Il y a les sources de débogage de MFC, elles ne sont pas là pour rien...

    (généralement dans le dossier de Visual studio \include ou \src)
    Edit: Trouvé!
    Code C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\afxwin1.inl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    _AFXWIN_INLINE CSize CDC::GetTextExtent(const CString& str) const
    	{
    		ASSERT(m_hAttribDC != NULL);
    		SIZE size;
    		VERIFY(::GetTextExtentPoint32(m_hAttribDC, str, (int)str.GetLength(), &size));
    		return size;
    	}
    En fait, ça vérifie tout simplement que ::GetTextExtentPoint32() n'a pas foiré...
    Mon idée: Tu teste directement avec ::GetTextExtentPoint32(), puis tu fais un petit GetLastError()/FormatMessage()...

    PS: La prochaine fois, c'est toi qui cherches...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Par défaut
    Le problème est que j'ai déjà fait ce que tu me proposes.
    Le getLastError renvoi "réussi"
    mais le size est toujours foireux

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 121
    Par défaut
    il faut bien respécifier le Font.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CFont myFont;
    	LOGFONT lf = { 0 };
    	lf.lfHeight = 12;                      
    	strcpy((char *)lf.lfFaceName, "Arial");        
    	VERIFY(myFont.CreateFontIndirect(&lf)); 
    
    	cdc.SelectObject(&myFont);

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

Discussions similaires

  1. CDC Personal Profile
    Par invalide dans le forum Java ME
    Réponses: 4
    Dernier message: 19/12/2005, 09h36
  2. [MFC] CDC: Problème d'affichage
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 19/08/2005, 18h31
  3. [MFC] CDC::Rectangle(CRect rect)
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 07/08/2005, 15h01
  4. Utilisation de 2 CDC
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 05/08/2005, 12h10

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