簡體   English   中英

更改對話框的背景顏色 mfc

[英]change the background color of a dialog box mfc

我正在嘗試更改對話框的背景顏色(win 7、vs2010、c++)。 我試圖捕捉 WM_CTLCOLOR ,WM_ERASEBKGND 並改變顏色。 我設法以這種方式更改背景顏色,但是當窗口完成上傳時,顏色恢復為默認值,但我注意到框架的顏色正確。 我認為我正在更改窗口而不是對話框或類似的東西。 我是用 WTL(不是 AFX)做的。

我該怎么辦?

嘗試這個:

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
    CAboutDlg();

// Dialog Data
    //{{AFX_DATA(CAboutDlg)
    enum { IDD = IDD_ABOUTBOX };
    //}}AFX_DATA

    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CAboutDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:
    //{{AFX_MSG(CAboutDlg)
    //}}AFX_MSG
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
    //{{AFX_DATA_INIT(CAboutDlg)
    //}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAboutDlg)
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    //{{AFX_MSG_MAP(CAboutDlg)
    ON_WM_ERASEBKGND()
    //}}AFX_MSG_MAP

END_MESSAGE_MAP()




BOOL CAboutDlg::OnEraseBkgnd(CDC* pDC)
{
    CRect rect;
    GetClientRect(&rect);
    CBrush myBrush(RGB(255, 255, 255));    // dialog background color
    CBrush *pOld = pDC->SelectObject(&myBrush);
    BOOL bRes  = pDC->PatBlt(0, 0, rect.Width(), rect.Height(), PATCOPY);
    pDC->SelectObject(pOld);    // restore old brush
    return bRes;                       // CDialog::OnEraseBkgnd(pDC);
}

看看這里

更好的方法是覆蓋 WM_CTLCOLOR,STATIC 等控件的背景也將填充您的顏色。

BEGIN_MESSAGE_MAP(YourDlg, CDialogEx)
    ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
...
HBRUSH YourDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    return (HBRUSH)GetStockObject(WHITE_BRUSH);
}

僅當對話框內沒有選項卡時,上述答案才有效,它將為選項卡部分以外的對話框背景着色。 對於選項卡部分,您必須使用基類 CTabCtrl 創建一個新的派生類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM