系統環境:Windows 7
方法一:重載OnPaint(),即WM_PAINT消息。有關代碼如下(以上例工程為準):
[cpp] view plain copyvoid 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的成員變量:
[cpp] view plain copyclass CExampleDlgDlg : public CDialog {... PRotected: CBrush m_brush; ... };
②在OnInitDialog()函數中添加如下代碼: [cpp] view plain copyBOOL CExampleDlgDlg::OnInitDialog() { ... // TODO: Add extra initialization here m_brush.CreateSolidBrush(RGB(0, 255, 0)); // 生成一綠色刷子 ... } ③利用ClassWizard重載OnCtlColor(…),即WM_CTLCOLOR消息: [cpp] view plain copyHBRUSH 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消息)時則有些不同:
[cpp] view plain copyHBRUSH CExampleDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); //在這加一條是否為對話框的判斷語句 if(nCtlColor ==CTLCOLOR_DLG) return m_brush; //返加綠色刷子 return hbr; }控件顏色:
對于分布在對話框上的控件,我們可以修改其顏色、其背景顏色,比如對靜態文本、文本編輯框、列表框等等。
步驟①、②同上方法三中的步驟①、②。步驟③:利用ClassWizard重載OnCtlColor(…)(即WM_CTLCOLOR消息)時則有些不同:
[cpp] view plain copyHBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if(nCtlColor ==CTLCOLOR_DLG) //對話框顏色 return m_brush; //返加綠色刷子 if(nCtlColor==CTLCOLOR_STATIC && pWnd->GetDlgCtrlID()==IDC_STATIC) //靜態文本顏色,并且指定控件ID號 { pDC->SetTextColor(RGB(255,0,0)); pDC->SetBkColor(RGB(191,219,255)); //靜態控件的背景顏色設置,這里設置于背景顏色一致,則可以免設置透明 //pDC->SetBkMode(TRANSPARENT); //模式設置透明的話,則忽略靜態控件的背景顏色設置,與對話框顏色融合 hbr=(HBRUSH)m_brush; } if(nCtlColor==CTLCOLOR_EDIT) //文本編輯框顏色 { pDC->SetTextColor(RGB(0,0,255)); //pDC->SetBkColor(RGB(191,219,255)); //靜態控件的背景顏色設置 pDC->SetBkMode(TRANSPARENT); hbr=(HBRUSH)m_brush; } return hbr; }對于其中nCtlColor類型,即它的取值:
CTLCOLOR_DLG 對話框 CTLCOLOR_EDIT 編輯框 CTLCOLOR_LISTBOX 列表框 CTLCOLOR_MSGBOX 消息框 CTLCOLOR_SCROLLBAR 滑動條 CTLCOLOR_STATIC 靜態文本框、矩形等
新聞熱點
疑難解答