一個基于對話框的MFC AppWizard應(yīng)用程序中,如何改變對話框的背景顏色呢?對于這個問題,其實(shí)可以 由幾種不同的方法來實(shí)現(xiàn),具體如下(粗斜體代碼為增添的):
---- 方法一:調(diào)用CWinApp類的成員函數(shù)SetDialogBkColor來實(shí)現(xiàn)。
---- 其中函數(shù)的第一個參數(shù)指定了背景顏色,第二個參數(shù)指定了文本顏色。下面的例子是將應(yīng)用程序?qū)υ?框設(shè)置為藍(lán)色背景和紅色文本,步驟如下:
---- ① 新建一個基于Dialog的MFC AppWizard應(yīng)用程序ExampleDlg。
---- ② 在CExampleDlgApp ::InitInstance()中添加如下代碼:
BOOL CExampleDlgApp: : InitInstance ( )
{
…
CExampleDlgDlg dlg;
m_pMainWnd = &dlg;
//先于DoModal()調(diào)用,將對話框設(shè)置為藍(lán)色背景、紅色文本
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
int nResponse = dlg.DoModal();
…
}
---- 編譯并運(yùn)行,此時對話框的背景色和文本色已發(fā)生了改變。值得注意的是:在調(diào)用DoModal()之前必須 先調(diào)用SetDialogBkColor,且此方法是將改變應(yīng)用程序中所有的對話框顏色,并不能針對某一個指定的對 話框。
---- 方法二:重載OnPaint(),即WM_PAINT消息。有關(guān)代碼如下(以上例工程為準(zhǔn)):
void CExampleDlgDlg::OnPaint()
{
if (IsIconic())
…
else
{
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(0,255,0)); //設(shè)置為綠色背景
CDialog::OnPaint();
}
---- 方法一:調(diào)用CWinApp類的成員函數(shù)SetDialogBkColor來實(shí)現(xiàn)。
---- 其中函數(shù)的第一個參數(shù)指定了背景顏色,第二個參數(shù)指定了文本顏色。下面的例子是將應(yīng)用程序?qū)υ?框設(shè)置為藍(lán)色背景和紅色文本,步驟如下:
---- ① 新建一個基于Dialog的MFC AppWizard應(yīng)用程序ExampleDlg。
---- ② 在CExampleDlgApp ::InitInstance()中添加如下代碼:
BOOL CExampleDlgApp: : InitInstance ( )
{
…
CExampleDlgDlg dlg;
m_pMainWnd = &dlg;
//先于DoModal()調(diào)用,將對話框設(shè)置為藍(lán)色背景、紅色文本
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));
int nResponse = dlg.DoModal();
…
}
---- 編譯并運(yùn)行,此時對話框的背景色和文本色已發(fā)生了改變。值得注意的是:在調(diào)用DoModal()之前必須 先調(diào)用SetDialogBkColor,且此方法是將改變應(yīng)用程序中所有的對話框顏色,并不能針對某一個指定的對 話框。
---- 方法二:重載OnPaint(),即WM_PAINT消息。有關(guān)代碼如下(以上例工程為準(zhǔn)):
void CExampleDlgDlg::OnPaint()
{
if (IsIconic())
…
else
{
CRect rect;
CPaintDC dc(this);
GetClientRect(rect);
dc.FillSolidRect(rect,RGB(0,255,0)); //設(shè)置為綠色背景
CDialog::OnPaint();
}