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 :

EVC++4.0 - changer police d'un controle


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Teo
    Teo est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Par défaut EVC++4.0 - changer police d'un controle
    Bonjour
    Je developpe une appli sous embedded Vusual C++ 4, pour un terminal, depuis peu.
    Je souhaite ecrire une fonction qui puisse changer la police d'un controle.
    J'ai adapté un bout de code trouvé sur dvlpez, mais ca marche pas bien.
    Si j'appelle la fonction en lui donnant chaque fois le meme CStatic,
    ca marche, il me le met en gras.
    Mais quand je ferme l'appli, j'ai un msgbox "assertion Failed" winhand.cpp, line 240
    Si j'appelle la fonction avec des Static differents, le 2eme appelle fait un plantage aussi.
    Voici mon 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
    void CWnd_Police_Changer_Mettre_En_X_Cplx(CWnd * Ctrl,int FW_X)
    {//Adaptation de Developpez.com : ScarFace : Faq VC
    CWnd *pWnd = Ctrl;
    CFont* pFont = pWnd->GetFont();
    if(pFont!=NULL)
    {
    LOGFONT lf;
    pFont->GetLogFont(&lf);
    lf.lfWeight=FW_X;//mettre l'attribut en gras(FW_BOLD) par exemple.
     
    pFont->DeleteObject(); // destruction GDI de l'ancien objet eventuellement
    pFont->CreateFontIndirect(&lf); // creation de la fonte d'apres la LOGFONT
    pWnd->SetFont(pFont); // affectation de la nouvelle fonte
    }
    }
    Pour l'appeller voici mon code, au sein de l'applie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ...
    CWnd_Changer_Mettre_En_X_Cplx(GetDlgItem(IDC_Static_Nom),FW_BOLD);
    Merci pour vos lumieres

  2. #2
    Teo
    Teo est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Par défaut
    En cette periode d'election, j'ai compris votre silence.
    Oui mais tous les silences sont pas aussi parlant.

    J'ai donc relu d'autre qstions similaires, et j'ai re adapté mon code.
    En fait dans mon code j'avais mis ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //CFont m_font;  // objet local à la classe parent fenetre CDialog,CFormView 
      //Theo : je comprends pas trop cette ligne, pourquoi elle est en remarque !
    J'ai donc declarer dans mon CDialog autant de
    CFont que j'avais de CStatic.
    L'entete de ma fonction devient donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void CWnd_Police_Changer_Mettre_En_X_Cplx(CWnd * Ctrl,int FW_X,CFont* p_font);
    Je n'ai plus besoin de detruire mon CFont, car l'aplie s'en charge.
    Pour de vrai je croiyais que l'on pouvai obtenir l'adresse du LOGFONT
    d'un controle, et modifier directement le lfWeight afin que cela soit repercuté automatiquement sur le Composant, dont on souhaite modifier la police.
    pFont->GetLogFont(&lf); je comprends que ca copie le contenue du "vrai" LOGFONT dans le "lf".
    Mais il n'existe pas de SetLogFont(&lf), qui ecraserai le "vrai" LOGFONT du controle par une copie des données contenue dans lf.

    C'est bizard qu'il faille creer une structure pour ensuite y faire pointer le conrole, d'ou le besoin de la detruire.
    Ne peut on pas acceder directement a la valeur que l'on souhaite changer pour modifier la police ?

    Le fait que je ne connaisse pas les structures sousjacentes explique peut etre mon etonnement, d'autant que je comprare systematiquement avec Delphi que je connait un peu mieu.
    C'est peut etre pour cela qu'EVC est gratuit ?
    Avec Visual Studio 2005, je serait affranchit de ce genre de situations ?

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

Discussions similaires

  1. changer police et couleur d'un bouton
    Par ranell dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/05/2007, 22h31
  2. [VB.NET] Changer le style des controles en enabled = false
    Par Ark13 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/05/2007, 18h45
  3. Réponses: 1
    Dernier message: 09/11/2006, 13h34
  4. [VB.NET]Changer police d'un label
    Par flogreg dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/06/2006, 15h49
  5. [c#] Changer police des onglets d'un tabControl
    Par nesquik dans le forum Windows Forms
    Réponses: 1
    Dernier message: 20/06/2006, 15h20

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