----
方法一:調用
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 m_brush; //
返加綠色刷子
}
----
方法四:還是重載
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 m_brush; //
返加綠色刷子
return hbr;
}