Changer la couleur d'une phrase

Signaler
Messages postés
2
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
18 mai 2009
-
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
-
Bonjour,

Ma question est surement redondante par rapport à ce qui a déjà été expliqué, mais je n'ai pas réussi à trouver mon bonheur, et je me place dans la section débutant afin d'obtenir des réponses précises claires...
Je programme sous Visual Studio 2005, en C++ et j'ai une fonction (sur un soft programmé par un ancien collègue de la boite) qui permet d'afficher un message dans un zone définie.
Cette fonction :

void CMesureCarterDlg::Message_Erreur_1(CString erreur_1)
{
    m_erreur_1.SetWindowText(erreur_1);
}

Ce message, auparavant destiné à afficher des erreurs s'afficher en rouge grace à la fonction  (La fonction mise en commentaire)  :

    #define    defineOnCtlColor(classe, couleur_texte)                                                                    \
        HBRUSH classe::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)                                             \
        {                                                                                                            \
        HBRUSH hbr    = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);                                                    \
            LOGBRUSH    logBrush;                                                                                    \
                                                                                                                    \
            m_bkBrush.GetLogBrush(&logBrush);                                                                        \
                                                                                                                    \
            switch ( nCtlColor )                                                                                    \
            {                                                                                                        \
                                                                                                                    \
                  case CTLCOLOR_EDIT:                                                                                \
                  case CTLCOLOR_MSGBOX:                                                                                \
                  case CTLCOLOR_STATIC:                                                                                \
                                                                                                                      \
                        /*if (    (pWnd->GetDlgCtrlID() == m_erreur_1.GetDlgCtrlID())                                    \
                            ||    (pWnd->GetDlgCtrlID() == m_erreur_2.GetDlgCtrlID())                                    \
                            ||    (pWnd->GetDlgCtrlID() == m_erreur_3.GetDlgCtrlID()))                                \
                            pDC->SetTextColor(ERROR_COLOR);                                                            \
                        else*/                                                                                        \
                            pDC->SetTextColor(couleur_texte);                                                        \
                        pDC->SetBkColor(logBrush.lbColor);                                                            \
                                                                                                                    \
                      return (HBRUSH)(m_bkBrush.GetSafeHandle()); 

A ce jour, je souhaiterai afficher différentes choses dans cette zone de texte, et avec des couleurs différentes.
Mon but étant de faire évoluer la fonction Message_Erreur en ajoutant une variable (de couleur), de cette manière :

void CMesureCarterDlg::Message_Erreur_2(CString erreur_2, CFont* color_2)
{
    m_erreur_2.SetWindowText(erreur_2);
    m_erreur_2.SetFont(color_2);
}
avec mes couleurs :
    #define    BLACK_COLOR                            RGB(0,0,0)
    #define    BLUE_COLOR                            RGB(0,128,192)
    #define    RED_COLOR                            RGB(255,0,0)
    #define    PINK_COLOR                            RGB(255, 190, 190)
    #define    GREEN_COLOR                            RGB(190, 255, 190)
    #define    GRAY_COLOR                            RGB(192, 192, 192)
    #define    YELLOW_COLOR                        RGB(255,255,0)

et une utilisation type :
        Message_Erreur_2("AZ",GREEN_COLOR);

Or je n'y arrive pas :(
Pourriez vous m'orienter... Tout le monde parle de HDC, de CTLCOLORSTATIC, de SetTextColor, mais je n'y comprend pas grand chose...

Mes data_exchange, si cela peut vous aider :

    DDX_Control(pDX, IDC_ERREUR_3, m_erreur_3);
    DDX_Control(pDX, IDC_ERREUR_2, m_erreur_2);
    DDX_Control(pDX, IDC_ERREUR_1, m_erreur_1);

D'avance merci...
Désolé si je m'étale ou vous en dit trop, mais je n'ai jamais trop programmé en C++ et la gestion des couleurs semble quand même assez Hard... (comparé à CVI ;) )

3 réponses

Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
inspire toi de ca.
et n'oublie pas de redessiner : fonction Invalidate
Messages postés
2
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
18 mai 2009

Merci de ta réponse Fregolo, cependant, comment crée le CDC auquel j'affecte le changement de couleur ?
j'ai mon objet static, mais je ne sais pas comment avancer plus pour y arriver...

Merci
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
je ne suis pas un pro du dév ihm.
mais pourquoi tu ne ferais pas comme l'exemple, c a d créer une classe qui dérive du type de m_erreur_2 pour gérer la couleur.