• MFC改变控件颜色


    from http://www.cppblog.com/FandyM/archive/2010/07/21/120972.aspx

    MFC应用程序中,要改变控件的背景色可通过重载OnCtlColor()函数来实现。方法是在该函数中设置所需颜色后再返回一个画刷句柄便可 重绘控件背景色。OnCtlColor()函数对于控件背景色的处理是通过捕捉相应的控件消息来实现的。

    常用的此类消息有:   
    CTLCOLOR_DLG   对话框   
    CTLCOLOR_EDIT   编辑框 
    CTLCOLOR_LISTBOX   列表框   
    CTLCOLOR_MSGBOX   消息框 
    CTLCOLOR_SCROLLBAR   滑动条 
    CTLCOLOR_STATIC   静态文本框、矩形等。 

    主要有三步:
    1. 声明消息响应函数
    //{{AFX_MSG(CMyDialog) 
    afx_msg   HBRUSH   OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor); 
    ……
    //}}AFX_MSG 

    DECLARE_MESSAGE_MAP()   

    2. 实现消息响应函数
    以编辑框举例:

    HBRUSH   CMyDialog::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)  
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
       // CtlColor(pDC, pWnd, nCtlColor);
        if(nCtlColor == CTLCOLOR_EDIT && pWnd->GetDlgCtrlID() == IDC_EDIT1)
        {
            pDC->SetTextColor(RGB(0,0,255));
            pDC->SetBkColor(RGB(255,0,0));//设置文本背景色
            pDC->SetBkMode(TRANSPARENT);//设置背景透明
            hbr = ::CreateSolidBrush(RGB(255,0,0));
        }
        return hbr;
    }


    3. 添加消息映射
    BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
        ON_WM_CTLCOLOR() 
    END_MESSAGE_MAP()

    注意:此方法不适用于按纽控件。 

     

  • 相关阅读:
    Arcgis javascript api离线开发环境搭建
    hbase基础
    Dojo 之 面向对象(转)
    Linux
    并行计算多线程常见问题
    [转]捕捉DataGridView的单元格编辑时的键事件
    'router' => array( 'routes' => array( 'album' => array( 'type' => 'segment', 'options' => arra
    [疯狂xml讲义]chap4之Schema记录
    [WinForm]DataGridView如何绑定对象的复合属性
    [C#之Ftp]RFC959笔记01
  • 原文地址:https://www.cnblogs.com/kex1n/p/3998537.html
Copyright © 2020-2023  润新知