2010-06-18 7 views
0

J'ai un dialogue dans lequel la boîte d'édition est désactivée mais le texte doit être affiché en rouge au lieu du gris par défaut. J'ai essayé les éléments suivants:Comment modifier la couleur du texte dans une zone d'édition désactivée à l'aide de MFC?

void CMyEdit::OnEnable(BOOL bEnable) 
{ 
    CEdit::OnEnable(bEnable); 

    if (bEnable) 
    { 
    m_BackGroundColor = kRGBWhite; 
    } 
    else 
    { 
    m_BackGroundColor = kRGBDefaultGray; 
    } 

    m_TextColor = kRGBRed; 
    m_BackgroundBrush.DeleteObject(); 
    m_BackgroundBrush.CreateSolidBrush(m_BackGroundColor); 

    Invalidate(); 
} 

Mais son affichage encore le texte en gris seulement. Mais si je supprime l'appel de la classe de base CEdit::OnEnable(bEnable);, la nouvelle couleur du texte prend effet. Quelqu'un peut-il expliquer ce qui ne va pas dans le code?

Merci pour votre temps.

acclamations ...

EDIT: (Déplacer mon commentaire à modifier un) Désolé j'ai oublié de le mentionner dans mon message d'origine. Au lieu de gérer le ON_WM_CTLCOLOR(), ON_WM_CTLCOLOR_REFLECT() est géré. Ce que je ne comprends pas, c'est que la suppression de l'appel à la classe de base, change la couleur du texte à ce qui est spécifié, mais en gardant cela change le gris par défaut.

Répondre

1

Vous devez gérer gestionnaire OnCtlColor et dans votre carte de message mettre ce ON_WM_CTLCOLOR()

afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
//logic here, change pDC as needed, return brush to use 
} 
2

MSDN: Un contrôle d'édition qui est pas en lecture seule ou désactivé envoie le message WM_CTLCOLOREDIT à sa fenêtre parent lorsque le le contrôle est sur le point d'être établi. Le corollaire est qu'il n'y a aucun moyen de changer la couleur d'arrière-plan ou de texte d'une boîte d'édition désactivée (ou en lecture seule), en plus de la sous-classer et de faire la peinture vous-même.

+0

merci pour votre réponse. S'il vous plaît voir le commentaire que j'ai ajouté à la question. – yasouser

Questions connexes