美文网首页
VS MFC: 改变Dialog背景颜色

VS MFC: 改变Dialog背景颜色

作者: louyang | 来源:发表于2018-08-16 10:50 被阅读186次

    编程工具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

    相关文章

      网友评论

          本文标题:VS MFC: 改变Dialog背景颜色

          本文链接:https://www.haomeiwen.com/subject/lipmbftx.html