VS MFC: 改变Dialog背景颜色

2018-08-16  本文已影响186人  louyang

编程工具Microsoft Visual Studio 2017.
File/New/Project...


image.png

点OK按钮,

image.png

在Application type下拉框中,选中Dialog based。其余打钩的选项都取消掉。

image.png image.png image.png image.png

点击Finish按钮,然后按F5尝试运行程序,应该可以看到这样一个对话框。

image.png

打开XXXDlg.h文件,添加成员变量m_brush:

class CXXXDlg : public CDialogEx
{
    ...
    protected:
        CBrush m_brush; 
    ...
};

打开XXXDlg.cpp文件,在OnInitDialog()函数中将m_brush初始化为黄色。

BOOL CXXXDlg::OnInitDialog() 
{
    ...
    // TODO: Add extra initialization here
    m_brush.CreateSolidBrush(RGB(255, 255, 102));
    ...
} 

分支一, 使用Class Wizard
选择Resource View - XXX, 双击XXX/XXX.rc/Dialog/IDD_XXX_DIALOG。右键点击对话框中的任意位置,在弹出菜单中选择Class Wizard。
选择Messages Tab, 找到并双击WM_CTLCOLOR, 右边出现OnCtlColor函数,选中并点击Edit Code按钮。

image.png

删除OnCtlColor中已有的内容,改为如下。

HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    return m_brush;
}

存盘,F5运行:

image.png

分支二, 不使用Class Wizard
在XXXDlg.h中加入:

class CXXXDlg : public CDialogEx
{
...
protected:
    HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
...
}

在XXXDlg.cpp中加入:

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

F5运行,和上面的结果一样。

参考文献

https:F5//www.codeguru.com/cpp/w-d/dislog/background/article.php/c1895/Changing-the-background-color-of-a-dialog.htm

上一篇下一篇

猜你喜欢

热点阅读