zoukankan      html  css  js  c++  java
  • MFC控件的颜色设置

    在绘制控件颜色时,控件会发送WM_CTLCOLOR消息给父窗口,父窗口收到消息后,映射到OnCtlColor()函数中处理。

    该函数返回一个画刷用于设置子控件的背景颜色,子控件再执行自己的CtlColor函数。

    这样的话我们就有两种方法设置控件的背景颜色。

    一、在父窗口中设置子控件颜色

    HBRUSH CTestCtrlColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

       if (m_label.m_hWnd == pWnd->m_hWnd)
       {
           pDC->SetTextColor(RGB(255, 100, 0));  
           pDC->SetBkColor(RGB(124,124,100));
           return (HBRUSH)BLACK_BRUSH;
       }

    return hbr;
    }

    其中 pDC和pWnd都是指子控件。nCtlColor表示某一类控件,值以CTLCOLOR_xxx形式表示。

    二、直接在子控件中设置颜色。

    如果想要在子控件中设置颜色,我们就需要派生一个自己的控件类并重载CtrlColot函数,设置颜色,并且还需要在子控件的头文件中

    加入ON_WM_CTLCOLOR_REFLECT宏,如果WM_CTLCOLOR没有被处理,那么该消息将会传递回控件自己这里来处理。

    具体处理如下:

    BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
    ON_WM_CTLCOLOR_REFLECT()
    END_MESSAGE_MAP()

    HBRUSH CMyStatic::CtlColor(CDC* pDC, UINT nCtlColor)
    {
    pDC->SetTextColor(RGB(255, 100, 0));
    pDC->SetBkColor(RGB(124, 124, 100));
    return (HBRUSH)BLACK_BRUSH;
    }

    三、总结

    消息反射对于创建可重用控件类非常重要,它使派生控件具有了 可以独立于付窗口执行自身操作的能力。

    派生类控件可以将发送给父窗口未得到处理的消息再作用到自己的成员函数中。

    注意:只有父窗口不处理通知时,消息才反射回来,Windows希望父窗口优先接收消息处理。

  • 相关阅读:
    爬虫基本库request使用—爬取猫眼电影信息
    Linux系统下Mysql安装与配置
    Centos7安装配置Nginx
    VUE中使用geetest滑动验证码
    python中使用redis发布订阅者模型
    Django中使用极验Geetest滑动验证码
    Redis的常见用法
    微信服务号消息推送
    Python支付宝在线支付API
    Django Rest Framework(二)
  • 原文地址:https://www.cnblogs.com/merlinzjl/p/8526055.html
Copyright © 2011-2022 走看看