zoukankan      html  css  js  c++  java
  • WTL之修改对话框背景和文字颜色的类

    /*
    * 编写: GUO 
    * QQ:349384061
    * 用法
    * 1.让对话框类公有继承本类
    * 2.在对话框类的消息映射宏后面添加消映射链 CHAIN_MSG_MAP(CPaintColor)
    * 3.本类只是简单的演示,可在此基础上扩展
    */
    template <class T>    //T 为派生的对话框类
    class CPaintColor : public CMessageMap
    {
    public:
        CBrush        m_brushBkgnd;    //背景色,
        COLORREF    m_clrText;        //文字颜色
    public:
        CPaintColor(COLORREF clrText = RGB(0,0,255))
        {
            //默认颜色
            m_brushBkgnd.CreateSolidBrush(::GetSysColor(COLOR_BTNFACE));
            m_clrText = clrText;
        }
        ~CPaintColor()
        {
            if (m_brushBkgnd.m_hBrush != NULL)
                m_brushBkgnd.DeleteObject();
        }
    
        BEGIN_MSG_MAP(CPaintColor)
            MESSAGE_HANDLER(WM_ERASEBKGND,OnEraseBkgnd)
            MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtlColorDlg)
            MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtlColorDlg)
            MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorDlg)
            MESSAGE_HANDLER(WM_CTLCOLORBTN, OnCtlColorDlg)
            MESSAGE_HANDLER(WM_CTLCOLORMSGBOX, OnCtlColorDlg)
            MESSAGE_HANDLER(WM_CTLCOLORLISTBOX, OnCtlColorDlg)
        END_MSG_MAP()
    
        //创建背景颜色画刷,也可以另外扩展以位图的方式
        HBRUSH CreateSolidBrush(COLORREF crColor)
        {
            if (m_brushBkgnd.m_hBrush != NULL)
                m_brushBkgnd.DeleteObject();
            m_brushBkgnd.CreateSolidBrush(crColor);
            return m_brushBkgnd.m_hBrush;
        }
        //设置文字颜色,并返回旧的颜色
        COLORREF SetTextColor(COLORREF clrText)
        {
            COLORREF clrTextOld = m_clrText;
            m_clrText = clrText;
            return clrTextOld;
        }
    
    protected:
        LRESULT OnEraseBkgnd(UINT uMsg,WPARAM wParam,LPARAM lParam,BOOL &bHandled)
        {
            T* pThis = static_cast<T*>(this);
            HDC hDc = (HDC)wParam;
            RECT rcRect;
            pThis->GetClientRect(&rcRect);
            FillRect(hDc,&rcRect,m_brushBkgnd);
            return 1;
        }
    
        LRESULT OnCtlColorDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
        {
            // TODO: 在此添加消息处理程序代码和/或调用默认值
            HDC hDc = (HDC)wParam;
            switch (uMsg)
            {
            case WM_CTLCOLORSTATIC:
            case WM_CTLCOLORBTN:
            case WM_CTLCOLORMSGBOX:
            case WM_CTLCOLORLISTBOX:
                {
                    ::SetBkMode(hDc,TRANSPARENT);
                    ::SetTextColor(hDc,m_clrText);
                    bHandled = TRUE;
                    return (LRESULT)m_brushBkgnd.m_hBrush;
                }
                break;
            case WM_CTLCOLORDLG:
            case WM_CTLCOLOREDIT:
            default:
                break;
            }
            return 0;
        }
    };

    好容易弄明白,留着以后使用

  • 相关阅读:
    1081. Rational Sum (20) -最大公约数
    在Debug模式下中断, 在Release模式下跳出当前函数的断言
    net-snmp配置文件详解
    net-snmp5.7.3移植到arm-linux平台
    NET-SNMP开发——日志输出
    SNMP常用数据操作
    40 网络相关函数(八)——live555源码阅读(四)网络
    39 网络相关函数(七)——live555源码阅读(四)网络
    38 网络相关函数(六)——live555源码阅读(四)网络
    37 网络相关函数(五)——live555源码阅读(四)网络
  • 原文地址:https://www.cnblogs.com/guobbs/p/4301339.html
Copyright © 2011-2022 走看看