更改对话框mfc的背景颜色

Dav*_*vid 1 c++ user-interface mfc colors

我正在尝试更改对话框的背景颜色(win 7,vs2010,c ++).我试图捕捉WM_CTLCOLOR,WM_ERASEBKGND并改变颜色.我用这种方式改变背景颜色,但是当窗口完成上传时,颜色恢复到默认状态,但我注意到框架颜色正确.我认为我正在改变窗口,而不是对话框或类似的东西.我用WTL(不是AFX)这样做.

我该怎么办?

Jab*_*cky 6

试试这个:

/////////////////////////////////////////////////////////////////////////////
// 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);
}
Run Code Online (Sandbox Code Playgroud)

看看这里 ......最重要的是:在这里

  • 您对使用Google的评论现在无关紧要,因为此问题是搜索如何更改mfc对话框颜色时的首要链接 (7认同)
  • @aquirdturtle这些注释是由旧版本的VS生成的,所以wizzard知道在哪里插入代码. (2认同)

0x0*_*00f 5

更好的方法是覆盖 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);
}
Run Code Online (Sandbox Code Playgroud)