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 :

Comment mettre un texte static en gras et en couleur ?


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Ok c'est bon pour la fonte, merci beaucoup,

    Mais il me reste toujours mon problème pour la couleur, à savoir que pour l'instant j'ai réussi a modifier la couleur de tous mes textes, mais ce qui m'intéresse c'est de modifier uniquement la couleur de mes static,

    Est-ce qu'il ya une possibilité de choisir la couleur que pour un controle, comme cela est fait avec la fonte, avec ceci par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CWnd* pWnd = GetDlgItem(IDC_STATIC);

  2. #2
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Citation Envoyé par stof
    Hello, je me permet d'intervenir ici car ça m'intéresse aussi.

    Si pour la fonte en gras je n'ai eu aucun problème en appliquant la FAQ du lien ci-dessus, ça n'est pas le cas pour la couleur.
    J'ai pas l'impression qu'on puisse reprendre exactement la même structure.

    Moi j'ai fait ça dans InitDialog(), pourquoi ça ne fait rien?
    CWnd * pWnd = GetDlgItem(IDC_STATICRED);
    CDC* pDC = pWnd->GetDC();
    pDC->SetTextColor(RGB(255,0,0));

    Hokagge, apparemment t'as réussi, tu peux dire comment?
    Merci
    Je croi que ce que j'ai fai ne va pas t'intéresser,

    Dans mon appli, maintenant tous mes textes sont en verts , et ce n'est pas forcément très zoli, c'est pourquoi j'essaye de trouver un moyen d'appliquer cette couleur uniquement a mes static

  3. #3
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Sinon Stof,

    Ou as-tu mis le bout de code permettant de modifier la fonte qui est dans la FAQ?

    Dans OnIniDialog ?

  4. #4
    Membre expérimenté Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Par défaut
    Dans le handler OnCtlColor() tu disposes d'un pointeur sur le CWnd du contrôle concerné par le message.
    Avec le code suivant tu détermines sur quels contrôles opérer un changement de couleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    switch (pWnd->GetDlgCtrlID())
    {
    case IDC_LE_STATIC_DE_MES_REVES :
    ...
    break;
    }

  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
    Par défaut
    recuperez l'exemple du tuto :
    http://farscape.developpez.com/Samples/samplesdi.zip

    dans la view le premier static est customisé .
    la technique mise en place est bien celle du message "reflect" =WM_CTLCOLOR decrite dans la faq.
    seulement ici je suis allé plus loin en proposant une classe template unique permettant de faire le travaille une seule fois .

    dans l'exemple un edit est customisé et un static.

    mieux que ça je ne peux pas .

  6. #6
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Je dois avouer que le code de ton tuto est bien trop évoluer pour moi,
    Je suis plus penché C, alors que je n'ai que de très petites bases de C++, imagine la galère ,

    Sinon ca y est enfin ca marche pour la couleur !!!

    J'ai l'impression d'avoir fait quelquechose d'un peu différent de ce qu'y était expliqué dans la FAQ (cf http://c.developpez.com/faq/vc/?page...#CEditCtlColor)

    C'est à dire qu'au lieu d'intercepter le message "reflect" =WM_CTLCOLOR dans une classe CEdit, j'ai tout simplement intercepté le message WM_CTCOLOR dans la fonction sans passer par cette CEdit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HBRUSH CAlturionDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    Puis avec le code fourni par BertrandA j'ai fais le traitement de la couleur QUE pour mes statics.

    Voila ca y est enfin, je pensais bien que je n'allais pas en voir le bout !!!

    Juste une petite chose encore , je voudrais savoir ou mettre ce code http://c.developpez.com/faq/vc/?page=Fontes#SetCustomFontCtrl, pour pouvoir modifier la fonte, je le mets dans mon OnIniDialog ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Citation Envoyé par Hokagge
    je voudrais savoir ou mettre ce code http://c.developpez.com/faq/vc/?page...ustomFontCtrl, pour pouvoir modifier la fonte, je le mets dans mon OnIniDialog ?
    Oui, je l'avais mis là; dommage que j'ai réussi si facilement la partir qui ne m'intéressait pas.
    Comme je reviens de manger, j'ai pas avancé sur les couleurs, mais avec l'exemple de Farscape ou la solution que tu proposes, je vais bien y arriver à mon tour!


    EDIT : j'ai essayé l'exemple de Farscape...ça marche mais c'est de l'artillerie lourde pour changer juste la couleur d'un malheureux edit; moyennant l'inclusion donc du nécessaire "TplCtrl.h", ça y est...

  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
    Par défaut
    Citation Envoyé par Hokagge
    Je dois avouer que le code de ton tuto est bien trop évoluer pour moi,
    Je suis plus penché C, alors que je n'ai que de très petites bases de C++, imagine la galère ,

    Sinon ca y est enfin ca marche pour la couleur !!!

    J'ai l'impression d'avoir fait quelquechose d'un peu différent de ce qu'y était expliqué dans la FAQ (cf http://c.developpez.com/faq/vc/?page...#CEditCtlColor)

    C'est à dire qu'au lieu d'intercepter le message "reflect" =WM_CTLCOLOR dans une classe CEdit, j'ai tout simplement intercepté le message WM_CTCOLOR dans la fonction sans passer par cette CEdit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HBRUSH CAlturionDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    Puis avec le code fourni par BertrandA j'ai fais le traitement de la couleur QUE pour mes statics.

    Voila ca y est enfin, je pensais bien que je n'allais pas en voir le bout !!!

    Juste une petite chose encore , je voudrais savoir ou mettre ce code http://c.developpez.com/faq/vc/?page=Fontes#SetCustomFontCtrl, pour pouvoir modifier la fonte, je le mets dans mon OnIniDialog ?
    Parce que tu melanges tout :

    il deux techniques pour customiser les couleurs des controles:
    1) prendre la main sur la fonction onCtlColor au niveau de la dialogue.
    ce qui permet un traitement globale pour tous les controles
    mais oblige a mettre sa logique de couleur sur la fenetre contenant les controles ,ce qui n'est pas forcemment pratique.

    2) faire gerer la couleur par le controle lui meme par le message reflect.
    et quand on va plus loin ,il est agreable d'avoir une classe finalisée qui
    fait le boulot une fois pour toute .

    les deux techniques sont expliquées dans la faq et dans le tuto qui les mets en oeuvre dans la view et dans la dialogue.

  9. #9
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    En effet j'ai un peu tout mélangé,

    Merci pour ces explications, maintenant j'ai compris le truc

  10. #10
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Me voici a nouveau face à un problème, concernant la fonte en gras:

    En applicant à la lettre le code de la FAQ, (exepté l' IDC du Static), je m'apercoi que rien ne se passe

    Alors voila, vu que je développe sur PDA, est-ce possible de modifier cette fonte sur ce type de support ?
    Si oui, y a t'il besoin de certains paramètres à cocher dans les propriété de mes statics ?
    Ou alors ya t-il un problème de mettre le code de la FAQ dans mon OnInitDialog() ( ce qui métonnerai vu qu'apperement c'est ce que d'autres ont fait ex:Stof et ca à l'air de marcher).

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Citation Envoyé par Hokagge
    En applicant à la lettre le code de la FAQ, (exepté l' IDC du Static), je m'apercoi que rien ne se passe
    T'as vraiment pas de chance alors, je sais pas sur PDA mais dans le OnInitDialog si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CWnd *pWnd = GetDlgItem(IDC_MONTEXTSTATIC);
    	CFont* pFont = pWnd->GetFont();
    	CFont m_font; 
    	if(pFont!=NULL)
    	{
    		LOGFONT lf;
    		pFont->GetLogFont(&lf);
    		lf.lfWeight=FW_BOLD; //mettre  en gras 
    		m_font.DeleteObject();  // destruction GDI de l'ancien objet eventuellement
    		m_font.CreateFontIndirect(&lf); // creation de la fonte d'apres la LOGFONT
    	}
    	pWnd->SetFont(&m_font);  // affectation de la nouvelle fonte.
    ça marche.


    En revanche, j'ai moi aussi 2 autres problèmes :

    ***le texte en gras apparaît comme dédoublé et il n'apparaît correctement que si la fenêtre est redessinée (après une occlusion par exemple).*
    Comment faire redessiner cette fenêtre dès le départ (sachant que OnPaint ne fait rien ne plus).

    ***Pire, j'ai voulu faire la même chose avec des SliderCtrl; là, j'ai abusé car les variables de contrôle normalement sont pas faites pour être statiques, mais ça marche bien si je rétrécit la fenêtre et que je la ré-ouvre (ici, même le redessin après une occlusion ne suffit pas).

  12. #12
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Bon eh bien même avec ton code, le résultat est le même,

    Sinon je suis désolé, mais les problèmes que tu rencontres sont trop compliqués pour moi,

    Sorry

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Ah, là là, on est bien malheureux

    Super FARSCAPE à la rescousse?

  14. #14
    Membre expérimenté Avatar de BertrandA
    Inscrit en
    Août 2003
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 170
    Par défaut
    J'ai déjà rencontré des problèmes sur PDA moi aussi.
    Je crois que je ne parvenais pas effectivement à modifier la fonte des static texts. Je n'avais pas cherché plus loin et remplacé les static par des CEdit read only.
    Pas ce qu'il faut sous la main et pas le temps de chercher désolé.
    Regarder éventuellement dans la KB Microsoft.

  15. #15
    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
    Citation Envoyé par stof
    Citation Envoyé par Hokagge
    En applicant à la lettre le code de la FAQ, (exepté l' IDC du Static), je m'apercoi que rien ne se passe
    T'as vraiment pas de chance alors, je sais pas sur PDA mais dans le OnInitDialog si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CWnd *pWnd = GetDlgItem(IDC_MONTEXTSTATIC);
    	CFont* pFont = pWnd->GetFont();
    	CFont m_font; 
    	if(pFont!=NULL)
    	{
    		LOGFONT lf;
    		pFont->GetLogFont(&lf);
    		lf.lfWeight=FW_BOLD; //mettre  en gras 
    		m_font.DeleteObject();  // destruction GDI de l'ancien objet eventuellement
    		m_font.CreateFontIndirect(&lf); // creation de la fonte d'apres la LOGFONT
    	}
    	pWnd->SetFont(&m_font);  // affectation de la nouvelle fonte.
    ça marche.


    En revanche, j'ai moi aussi 2 autres problèmes :

    ***le texte en gras apparaît comme dédoublé et il n'apparaît correctement que si la fenêtre est redessinée (après une occlusion par exemple).*
    Comment faire redessiner cette fenêtre dès le départ (sachant que OnPaint ne fait rien ne plus).

    ***Pire, j'ai voulu faire la même chose avec des SliderCtrl; là, j'ai abusé car les variables de contrôle normalement sont pas faites pour être statiques, mais ça marche bien si je rétrécit la fenêtre et que je la ré-ouvre (ici, même le redessin après une occlusion ne suffit pas).
    pour ton pb on est d'accord que ta variable m_font est declarée dans ta classe et non dans ta fonction ?
    sinon quand la variable sort de sa portée la fonte est detruite et l'objet gdi avec, et donc le controle a un probleme ...
    par contre pour ton 2 pb j'ai rien compris

  16. #16
    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
    j'ai fais un essai rapide avec embedded Vc++ .
    rien que dans l'emulateur win CE la fonte ne change pas ...

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Citation Envoyé par farscape
    pour ton pb on est d'accord que ta variable m_font est declarée dans ta classe et non dans ta fonction ?
    sinon quand la variable sort de sa portée la fonte est detruite et l'objet gdi avec, et donc le controle a un probleme ...
    par contre pour ton 2 pb j'ai rien compris

    OK pour le problème de la fonte en gras
    (effectivement, ma variable était locale à la fonction).

    Pour le deuxième problème, je ré-explique :

    j'ai attaché à une scrollbar une variable de classe CNewStatic exactement comme pour les textes de ma boîte de dialogue.
    Je procède pareil que les textes dans OnInitDialog pour attribuer la couleur (un seul paramètre, le deuxième ne sert à rien dans ce cas, les valeurs par défaut suffisent) :
    m_staticSlider.SetBkColor(RGB(255,255,180));
    où RGB(255,255,180) correspond à la couleur jaune de fond de ma boîte de dialogue.

    Bien, alors le souci, c'est que quand j'ouvre ma boîte, la scrollbar est entourée de blanc au lieu d'être entourée de jaune, et que pour que ça soit bien entouré de jaune, je dois sois faire passer une autre page en avant-plan avant de revenir à mon logiciel, soit cacher la boîte par le signe "-" et la réouvrir .

    Quand elle se redessine comme ça, je retrouve l'apparence souhaitée, (mais pas quand la partie en cause disparaît de l'écran quand on déplace la boîte hors de l'écran, et réapparaît quand on redéplace la boîte dans la zone visible de l'écran, ce qui est curieux puisque cette opération redessine aussi la boîte).

    Et donc, puisque c'est une histoire de dessin, je pensait à OnPaint, mais non!

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    :

  19. #19
    Membre confirmé Avatar de Hokagge
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 149
    Par défaut
    Citation Envoyé par farscape
    j'ai fais un essai rapide avec embedded Vc++ .
    rien que dans l'emulateur win CE la fonte ne change pas ...
    Quand je fais un clic droit sur ma boite de dialogue, propriété, il y a un bouton font, et je m'apercoi que même la dedans j'arrive pas à mettre di gras pour tte ma boite de dialogue. (dailleur il n'est même pas proposé )

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Par défaut
    Citation Envoyé par stof
    Pour le deuxième problème, je ré-explique :
    j'ai attaché à une scrollbar une variable de classe CNewStatic exactement comme pour les textes de ma boîte de dialogue.
    Je procède pareil que les textes dans OnInitDialog pour attribuer la couleur (un seul paramètre, le deuxième ne sert à rien dans ce cas, les valeurs par défaut suffisent) :
    m_staticSlider.SetBkColor(RGB(255,255,180));
    où RGB(255,255,180) correspond à la couleur jaune de fond de ma boîte de dialogue.

    Bien, alors le souci, c'est que quand j'ouvre ma boîte, la scrollbar est entourée de blanc au lieu d'être entourée de jaune, et que pour que ça soit bien entouré de jaune, je dois sois faire passer une autre page en avant-plan avant de revenir à mon logiciel, soit cacher la boîte par le signe "-" et la réouvrir .

    Quand elle se redessine comme ça, je retrouve l'apparence souhaitée, (mais pas quand la partie en cause disparaît de l'écran quand on déplace la boîte hors de l'écran, et réapparaît quand on redéplace la boîte dans la zone visible de l'écran, ce qui est curieux puisque cette opération redessine aussi la boîte).

    Et donc, puisque c'est une histoire de dessin, je pensait à OnPaint, mais non!

    Toujours pas?

Discussions similaires

  1. Comment mettre du texte en gras sur la console ?
    Par minooo dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/05/2011, 00h13
  2. Réponses: 2
    Dernier message: 16/04/2007, 14h17
  3. [VB.Net] Comment mettre un texte dans un NotifyIcon ?
    Par Aspic dans le forum Windows Forms
    Réponses: 19
    Dernier message: 25/07/2006, 21h29
  4. [JTextPane] Mettre le texte sélectionné en gras
    Par serwol dans le forum Composants
    Réponses: 4
    Dernier message: 18/10/2005, 14h46
  5. comment mettre du texte formaté dans une frame?
    Par afrikha dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 09/10/2005, 14h55

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