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] Comment personnaliser sa police de caractères ?


Sujet :

MFC

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut [MFC] Comment personnaliser sa police de caractères ?
    Dans mon prog type Dialog Based, j'aimerais bien pourvoir personnaliser la police, mettre en gras et plus gros certains mots, certaines phrases, mais j'ai pas trouver grand chose...
    J'ai juste trouver comment on créait sa propre police, mais bon ca m'intéresse pas trop !
    Par exemple je voudrais mettre en gras des Static Text en intervenant directement dessus, mais en vain pareil.
    Si vous savez comment faire dites le moi please !

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Bonjour,
    il faut à mon avis
    déclarer une variable de type CFont
    obtenir un pointeur sur la zone de texte :

    CStatic *pStatic1 =(CStatic *) GetDlgItem(IDC_STATIC1);
    puis spécifier la police avec CWnd::SetFont

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cwnd.3a3a.setfont.asp

  3. #3
    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,
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       CWnd *pWnd = GetDlgItem(IDC_STATIC1); 
       CFont* pFont = pWnd->GetFont();
       if(pFont)
       {
    	LOGFONT lf;
    	pFont->GetLogFont(&lf);
            lf.lfWeight=FW_BOLD;//gras
    // CFont m_font;
     
    	m_font.DeleteObject();
    	m_font.CreateFontIndirect(&lf);
        }
        pWnd->SetFont(&m_font);
    attention à la persistance de m_font et de bien le liberer à la fin par un DeleteObject.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Bon alors ton code fonctionne Farscape, mais le souci c'est que d'une part j'ai pas entierement compris (la condition if, et les 2 dernieres lignes du if), et d'autres part je voudrais que le gras soit moins gros (oui je sais le chieur), mais ca ne marche pas (FW_THIN par exemple)
    Et en faisant c code, ca donne le même résultat que le tien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CWnd *pWnd = GetDlgItem(IDC_STATIC1); 
    CFont* pFont = pWnd->GetFont(); 
    CFont m_font; 
    pWnd->SetFont(&m_font);
    Donc c pour ca que je comprnds pas trop ce qui se passe

  5. #5
    mat.M
    Invité(e)
    Par défaut
    Le if qu'a déclaré Farscape , c'est pour tester si on a réellement créer une police et si un pointeur est valide .
    Il serait souhaitable d'écrire if(pFont!=NULL) .

    et d'autres part je voudrais que le gras soit moins gros (oui je sais le chieur), mais ca ne marche pas (FW_THIN par exemple)
    Cela ne marche pas parce qu'on ne peut pas réduire la police en dessous d'une certaine taille.
    Essayer de charger la police avec un traitement de texte

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    re,
    la fonte de base de ta dialogue c'est quoi ?
    de base les statics vont se retrouvés avec celle de la dialogue initialiser avec la fonte MS sans serif qui n'est pas TRUETYPE .
    donc le rendu par forcement terrible.
    dans le post it de la faq il y a un post sur la recuperation d'une fonte systeme par son nom .
    une fonte de type arial par exemple serait plus agréable.


  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Désolé d'avoir déserter mon sujet comme ca, mais j'avais d'autres propriétés, mais maintenant j'ai plus de temps.
    Donc j'ai enfin réussi à manipuler les logfont et CFont, enfin presque justement ! Voila ce que dit la MSDN pour un paramètre de LOGFONT:

    lfFaceName
    A null-terminated string that specifies the typeface name of the font. The length of this string must not exceed 32 characters, including the null terminator. The EnumFontFamilies function can be used to enumerate the typeface names of all currently available fonts. If lfFaceName is an empty string, GDI uses the first font that matches the other specified attributes.
    Et la fonction d'Enum je n'arrive pas du tout à m'en servir, et l'aide de la msdn ne correspond pas à la fonction pour mfc j'ai l'impression...
    J'aimerai pouvoir avoir le choix de choisir une police prédéfinit.

  8. #8
    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 ,pour la fonction enum voir le post it de la faq ,le sujet y est traite .

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Ouais ca yest ca j'ai réussi enfin !!
    Je vais pouvoir te laisser tranquille avec ce post farscape déjà...
    En fait j'ai simplement pris ta classe FontEx, et fait comme t'as bien dit, et ca marche nickel ! Merci beaucoup

    PS : juste une petit remarque, rien de méchant, mais la FAQ n'est quand même pas très pratique pour faire des recherches , en plus tu dois en avoir marre de rabattre toujours la même chose aux gens... ou aloir c'est que à moi...

  10. #10
    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
    re,
    la post it sert de devidoire pour la faq qui est presque finalisée et qui sera bientot publiée ....

  11. #11
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par farscape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       CWnd *pWnd = GetDlgItem(IDC_STATIC1); 
       CFont* pFont = pWnd->GetFont();
       if(pFont)
       {
    	LOGFONT lf;
    	pFont->GetLogFont(&lf);
            lf.lfWeight=FW_BOLD;//gras
    // CFont m_font;
     
    	m_font.DeleteObject();
    	m_font.CreateFontIndirect(&lf);
        }
        pWnd->SetFont(&m_font);
    attention à la persistance de m_font et de bien le liberer à la fin par un DeleteObject.
    Salut,
    bon ce post est marqué "resolu" mais j'espere que qqun l'ouvrira quand même,
    apparament ca marche, mais j'aime bien comprendre les choses, et là ben j'y comprends pas grand chose justement...

    // CFont m_font;
    m_font.DeleteObject();

    pourquoi l'objet m_font; est'il commenté ?

    pourquoi faire un .DeleteObject() avant (et non apres?)

    quand farescape dit "bien le liberer à la fin", c'est à la fin de quoi ? du programme ? à la fin tout de suite apres le SetFont ? je n'arrive pas a comprendre car il me semble que le code ne reflete pas les propos....
    merci de votre aide.
    salut!

  12. #12
    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,
    m_font est commenté pour indiqué justement que c'est pas une variable locale mais une donnée membre de la classe fenetre parent (m_ :member)

    cette variable doit exister tant que son controle associé existe .
    donc tant que la fenetre parent existe .
    l'endroit pour liberer m_font sera donc le destructeur de la classe fenetre parent du controle .
    le deleteobject avant sert si l'objet m_font a déjà été utilisé lors de changement de font successif par exemple.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/04/2014, 14h38
  2. [JavaMail] Comment spécifier la police de caractère ?
    Par verbose dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 10/07/2009, 19h35
  3. [ MFC ] Changer police de caractère
    Par Denn's dans le forum MFC
    Réponses: 2
    Dernier message: 31/05/2007, 15h55
  4. [Police de caractère]Comment ca marche ?
    Par loverdose dans le forum Windows
    Réponses: 1
    Dernier message: 10/08/2006, 14h44
  5. Comment changer la police de caractère d'un menu
    Par RémiONERA dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/11/2005, 21h05

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