MFC窗口颜色的设置

MFC窗口颜色的设置
本文主要介绍对话框背景色以及控件颜色的设置(SetDialogBkColor()不再被支持)。
对话框背景色的设置
1、重载OnPaint()函数,即WM_PAINT消息,代码如下所示:
void  CtestDlg : :OnPaint()
{   if  (IsIconic())
    {
        CPaintDC dc( this);   // 用于绘制的设备上下文
        SendMessage(WM_ICONERASEBKGND,   reinterpret_cast <WPARAM >(dc.GetSafeHdc()),   0);   // 使图标在工作区矩形中居中   int  cxIcon   =  GetSystemMetrics(SM_CXICON);   int  cyIcon   =  GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect( &rect);   int  x   =  (rect.Width()   -  cxIcon   +   1)   /   2;   int  y   =  (rect.Height()   -  cyIcon   +   1)   /   2;   // 绘制图标
        dc.DrawIcon(x, y, m_hIcon);
    }   else
    {   //CDialogEx::OnPaint();   //设置为绿色背景
        CRect   rect;
        CPaintDC   dc( this);
        GetClientRect(rect);
        dc.FillSolidRect(rect,RGB( 0, 255, 0)); 
    }
}
2、重载OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息:
  a)在对话框的.h文件中添加CBrush类的成员m_brush
  b)在对话框的.cpp文件中的OnInitDialog()中添加以下代码(背景红色):
m_brush.CreateSolidBrush(RGB( 255, 0, 0));
  c)重载OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor),代码如下:
HBRUSH CtestDlg : :OnCtlColor(CDC *  pDC, CWnd *  pWnd, UINT nCtlColor)
{
    HBRUSH hbr   =  CDialogEx : :OnCtlColor(pDC, pWnd, nCtlColor);   // TODO:  在此更改 DC 的任何特性   if(nCtlColor   ==  CTLCOLOR_DLG)   return   m_brush;     //返加红色刷子    // TODO:  如果默认的不是所需画笔,则返回另一个画笔   return  hbr;
}
控件颜色的设置
重载OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor),即WM_CTLCOLOR消息:
HBRUSH CtestDlg : :OnCtlColor(CDC *  pDC, CWnd *  pWnd, UINT nCtlColor)
{
    HBRUSH hbr   =  CDialogEx : :OnCtlColor(pDC, pWnd, nCtlColor);   // TODO:  在此更改 DC 的任何特性   // 设置显示字体
    CFont   *  font = new  CFont;
    font - >CreateFont( 16, 0, 0, 0,FW_SEMIBOLD,FALSE,FALSE, 0,
        ANSI_CHARSET,OUT_DEFAULT_PRECIS,
        CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
        DEFAULT_PITCH &FF_SWISS,_T( "Arial"));   switch(nCtlColor)
    {   case  CTLCOLOR_STATIC :   //对所有静态文本框的设置
        {
            pDC - >SetBkMode(TRANSPARENT);   //设置背景为透明
            pDC - >SetTextColor(RGB( 255, 255, 0));   //设置字体颜色
            pWnd - >SetFont(font);   //设置字体
            HBRUSH B   =  CreateSolidBrush(RGB( 125, 125, 255));   //创建画刷   return  (HBRUSH) B;   //返回画刷句柄
        }   case  CTLCOLOR_EDIT :   //对所有编辑框的设置
        {   if(IDC_EDIT2   ==  pWnd - >GetDlgCtrlID())
            {
                pDC - >SetBkMode(TRANSPARENT);
                pDC - >SetTextColor(RGB( 255, 255, 0));
                pWnd - >SetFont(font);
                HBRUSH B   =  CreateSolidBrush(RGB( 125, 125, 125));   return  (HBRUSH) B;
            }   if(IDC_EDIT3   ==  pWnd - >GetDlgCtrlID())
            {
                pDC - >SetBkMode(TRANSPARENT);
                pDC - >SetTextColor(RGB( 255, 0,   0));
                pWnd - >SetFont(font);
                HBRUSH B   =  CreateSolidBrush(RGB( 125, 125, 0));   return  (HBRUSH) B;
            }
        }   default :   return  CDialog : :OnCtlColor(pDC,pWnd, nCtlColor);
    }   // TODO:  如果默认的不是所需画笔,则返回另一个画笔   return  hbr;
}
注:
nCtlColor的类别有以下几种:
CTLCOLOR_BTN  按钮控件
CTLCOLOR_DLG  对话框
CTLCOLOR_EDIT  编辑框
CTLCOLOR_LISTBOX  列表框
CTLCOLOR_MSGBOX   消息框
CTLCOLOR_SCROLLBAR  滚动条
CTLCOLOR_STATIC  静态文本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jsxyhelu2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值