1. 程式人生 > >MFC改變對話方塊背景顏色

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;
}

轉:https://www.cnblogs.com/huhu0013/p/4579994.html