首页 > 其他分享 >MFC窗口颜色的设置

MFC窗口颜色的设置

时间:2022-12-10 16:46:15浏览次数:50  
标签:MFC 颜色 OnCtlColor pWnd CTLCOLOR 窗口 pDC HBRUSH nCtlColor

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,00));
                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  静态文本

标签:MFC,颜色,OnCtlColor,pWnd,CTLCOLOR,窗口,pDC,HBRUSH,nCtlColor
From: https://www.cnblogs.com/jsxyhelu/p/16971824.html

相关文章

  • MFC--CRect
     https://learn.microsoft.com/zh-cn/cpp/atl-mfc-shared/reference/crect-class?view=msvc-170#crecthttps://baike.baidu.com/item/CRect/4700448?fr=aladdin ......
  • MFC--BITMAP HBITMAP CBitmap
     区分概念:BITMAP是C++中定义的位图结构体。HBITMAP是Windows中使用的位图句柄。CBitmap是MFC封装的位图类 定义与使用HBITMAP指针从文件中录入指针,得到文件句柄CBITMAP......
  • MFC-颜色对照表
                ......
  • MFC--窗口样式
    获取窗口信息 CWnd*pWnd=GetDlgItem(IDC_STATIC1);HWNDhWnd=pWnd->GetSafeHwnd();//CWnd*转化为HWNDLONGn=::GetWindowLong(hWnd,GWL_STYLE);//获取指......
  • MFC--StaticText静态文本框控件
    CStatic类提供了一个Windows静态控件的性能。一个静态控件用来显示一个文本字符串、框、矩形、图标、光标、位图或增强的图元文件。它可以被用来作为标签,框,或用来分隔其它的......
  • 实验0:MFC对话框试水(自己对于MFC的总结,慢慢更新(老师的ppt挺枯燥难懂的,我自己整理一份知
    工具是vistualstudio2022MFC对话框制作首先当然要生成一个MFC对话框第一步:第二步:第三步:成果:(稍微放点控件上去)点击某个控件就能进入其对应的代码段,还挺方便......
  • Windows,C++编程创建窗口的过程详解
    MFC创建窗口一般要经历以下四个操作步骤:(1)   定义窗口类主要指定窗口类的一些基本且必须指定的特征,窗口类的特征主要是由WNDCLASS结构体来定义的,WNDCLASS的定义如下:type......
  • 300018 颜色码对照表
    <?phpheader('Content-Type:text/html;charset=utf-8');define('ROOT',$_SERVER['DOCUMENT_ROOT']);includeROOT.'/assets/php/head.php';$tit='颜色码对照表';......
  • Unity 包管理器窗口 无法执行 upm 操作: connect ETIMEDOUT 172.81.232.209:443 的解
    [包管理器窗口]无法执行upm操作:connectETIMEDOUT172.81.232.209:443问题描述:无法刷新包管理器无法安装Unity注册表中的包Cannotperformupmoperation:con......
  • MFC,VC++中,CView类意外消失
    (1)在我们写MFC程序的时候,可能CView类可能会意外的消失,现在我用的是Win7操作系统,VC6.0和WindowsXP是完全兼容的,可能是系统兼容的问题,所以在Win7系统下编写程序总会出现一些莫......