• VC OnCtlColor函数来修改控件背景颜色


    CWnd::OnCtlColor   afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );   返回值:OnCtlColor必须返回一个刷子句柄,该刷子将被用于画出控件的背景。   参数:

    pDC 包含了子窗口的显示设备环境的指针。可能是临时的。 PWnd 包含了要求颜色的控件的指针。可能是临时的。 NCtlColor 包含了下列值,指定了控件的类型: · CTLCOLOR_BTN 按钮控件 · CTLCOLOR_DLG 对话框 · CTLCOLOR_EDIT 编辑控件 · CTLCOLOR_LISTBOX 列表框控件 · CTLCOLOR_MSGBOX 消息框 · CTLCOLOR_SCROLLBAR 滚动条控件 · CTLCOLOR_STATIC 静态控件

     说明:   当要画出一个子控件时,框架就调用这个成员函数。多数控件将这个消息发送到它们的父窗口(通常是一个对话框),为使用正确的颜色画出控件而准备pDC。   要改变文本的颜色,使用要求的红、绿、蓝色值(RGB)调用SetTextColor成员函数。   要改变单行编辑控件的背景颜色,在CTLCOLOR_EDIT和CTLCOLOR_MSGBOX消息代码中设置刷子句柄,并在响应CTLCOLOR_EDIT的代码中调用CDC::SetBkColor函数。   不会为下拉组合框中的列表框调用OnCtlColor函数,因为下拉列表框实际上是组合框的子窗口,而不是窗口的子窗口。要改变下拉列表框的颜色,创建一个CcomboBox,在重载的OnCtlColor中的nCtlColor参数中检查CTLCOLOR_LISTBOX。在这个处理函数中,为设置文本的背景必须使用SetBkColor成员函数。   注意:   框架调用这个成员函数以允许你的应用程序处理一个Windows消息。传递给你的成员函数的参数反映了接收到消息时框架接收到的参数。如果你调用了这个函数的基类实现,则该实现将使用最初传递给消息的参数(而不是你提供给这个函数的参数)。

    afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);
               参数nCtlColor用于指定控件的类型,可以是:
               .CTLCOLOR_BTN                按钮控件   //(注意check box 属于button控件)
               .CTLCOLOR_DLG                对话框
               .CTLCOLOR_EDIT               编辑框
               .CTLCOLOR_LISTBOX            列表控件
               .CTLCOLOR_MSGBOX             消息控件
               .CTLCOLOR_SCROLLBAR 滚动条控件
               .CTLCOLOR_STATIC             静态控件
    [程序实现]
               假设你已有了名为My的对话框工程.你有了一个STATIC的控件,ID为IDC_STATIC1.
      
    HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
               {
            HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
      
            // TODO: Change any attributes of the DC here
               if (nCtlColor==CTLCOLOR_STATIC)

                  {
                        pDC->SetTextColor(RGB(255,0,0));
      
    //字体颜色
                        pDC->SetBkColor(RGB(0, 0, 255));   //字体背景色  

                    }
           
    // TODO: Return a different brush if the default is not desired
            return hbr;
               }


    如果要指定某个特定控件可以这样写:ID为IDC_STATIC1

    if (pWnd->GetDlgCtrlID()==IDC_STATIC1)
    {
           pDC->SetTextColor(
    RGB(255,0,0));  //设置字体颜色
           pDC->SetBkMode(TRANSPARENT); //设置字体背景为透明
    // TODO: Return a different brush if the default is not desired
      return (HBRUSH)::GetStockObject(BLACK_BRUSH);  // 设置背景色
    }
    else
    return hbr;

    3.改变背景颜色和文本颜色和字体:在OnCtlColor()添加代码:

    if(pWnd->GetDlgCtrlID()==IDC_LINE_STYLE)

    {

    pDC->SetTextColor(RGB(255,0,0));

    pDC->SetBkMode(TRANSPARENT);//设置文本背景色为透明

    pDC->SelectObject(&m_font);//设置字体

    return m_brush;//设置控件背景颜色

    }

    //对于按钮来说上面的方法无效

    3. 设置控件ID为IDC_SYSFONTSAMPLE的背景颜色与其背景图片一致方法如下:

       if(pWnd->GetDlgCtrlID()==IDC_SYSFONTSAMPLE)
    {

       // 设置控件背景色与背景图片颜色一致
         COLORREF bkColor = RGB(239,239,239); //背景图片的颜色值

        pDC->SetBkColor(bkColor);
        return (HBRUSH)::GetStockObject(NULL_BRUSH); 

    }

  • 相关阅读:
    springBoot 2.1.5 pom 文件 unknown 错误
    @HystrixCommand 不能被导包
    SQL数据库连接语句
    ADO.NET中COMMAND对象的ExecuteNonQuery、ExcuteReader和ExecuteScalar方法
    重载和重写的区别
    抽象类和接口的相同点和不同点
    结构详解
    简单工厂和抽象工厂的区别
    DataRead和DataSet的异同
    什么是Web Server
  • 原文地址:https://www.cnblogs.com/zhaoxinshanwei/p/4055200.html
Copyright © 2020-2023  润新知