MFC改變對話方塊背景顏色
原文連結: http://blog.sina.com.cn/s/blog_59955afc0100spjz.html
方法一:呼叫CWinApp類的成員函式SetDialogBkColor來實現。
---- 其中函式的第一個引數指定了背景顏色,第二個引數指定了文字顏色。
下面的例子是將應用程式對話方塊設定為藍色背景和紅色文字,步驟如下:
---- ① 新建一個基於Dialog的MFC AppWizard應用程式ExampleDlg。
---- ② 在CExampleDlgApp ::InitInstance()中新增如下程式碼:
BOOL CExampleDlgApp: : InitInstance ( )
{
…
CExampleDlgDlg dlg;
m_pMainWnd = &dlg;
//先於DoModal()呼叫,將對話方塊設定為藍色背景、紅色文字
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
int nResponse = dlg.DoModal();
…
}
---- 編譯並執行,此時對話方塊的背景色和文字色已發生了改變。值得注意的
是:在呼叫DoModal()之前必須先呼叫SetDialogBkColor,且此方法是將改變
應用程式中所有的對話方塊顏色,並不能針對某一個指定的對話方塊。
方法二:過載OnPaint(),即WM_PAINT訊息。有關程式碼如下(以上例工程為準):
void CExampleDlgDlg::OnPaint()
{
if (IsIconic())
…
else
{
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(0,255,0)); //設定為綠色背景
CDialog::OnPaint();
}
方法三:過載OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),
即WM_CTLCOLOR訊息。具體步驟如下(以上例工程為準):
---- ①在CExampleDlgDlg的標頭檔案中,新增一CBrush的成員變數:
class CExampleDlgDlg : public CDialog
{
...
protected:
CBrush m_brush;
...
};
---- ②在OnInitDialog()函式中新增如下程式碼:
BOOL CExampleDlgDlg::OnInitDialog()
{
...
// TODO: Add extra initialization here
m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一綠色刷子
...
}
---- ③利用ClassWizard過載OnCtlColor(…),即WM_CTLCOLOR訊息:
HBRUSH CExampleDlgDlg::OnCtlColor
(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
/*
** 這裡不必編寫任何程式碼!
**下行程式碼要註釋掉
** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
*/
return (HBRUSH)m_brush.GetSafeHandle(); //返加綠色刷子
}
方法四:還是過載OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor),
即WM_CTLCOLOR訊息。具體步驟如下(以上例工程為準):
---- 步驟①、②同上方法三中的步驟①、②。
---- 步驟③利用ClassWizard過載OnCtlColor(…)(即WM_CTLCOLOR訊息)時則有
些不同:
HBRUSH CExampleDlgDlg::OnCtlColor
(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
//在這加一條是否為對話方塊的判斷語句
if(nCtlColor ==CTLCOLOR_DLG)
return (HBRUSH)m_brush.GetSafeHandle(); //返加綠色刷子
return hbr;
}