2010-06-18 60 views
0

我有一個對話框,其中編輯框被禁用,但文本應該顯示爲紅色而不是默認的灰色。我試過以下內容:如何使用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(); 
} 

但它仍然只顯示灰色文本。但是如果我刪除基類呼叫CEdit::OnEnable(bEnable);,那麼新的文本顏色會生效。任何人都可以解釋代碼中的錯誤嗎?

謝謝你的時間。

歡呼聲......

編輯:移動我的評論到編輯)對不起,我忘了提到它在原來的職位。處理ON_WM_CTLCOLOR(),而不是處理ON_WM_CTLCOLOR_REFLECT()。我不明白的是,刪除對基類的調用,將文本的顏色更改爲指定的內容,但保持它僅將其更改爲默認的灰色。

回答

1

您需要處理OnCtlColor處理程序,並在消息映射把這個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:編輯控件是不是隻讀或禁用發送WM_CTLCOLOREDIT消息給它的父窗口時,控制即將被繪製。

推論是,除了子類化和自己做繪畫之外,沒有辦法改變禁用(或只讀)編輯框的背景或文本顏色。

+0

感謝您的回答。請參閱我添加到問題的評論。 – yasouser 2011-01-24 14:12:26

相關問題