C++對話框背景色的設(shè)置方法

字號:

一個基于對話框的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();
    }