VC/MFC如何设置对话框背景颜色

2023-10-29

方法一:调用CWinApp类的成员函数SetDialogBkColor来实现。  (这个函数已经废弃)

1
void  SetDialogBkColor( COLORREF  clrCtlBk = RGB(192, 192, 192), COLORREF  clrCtlText = RGB(0, 0, 0));

其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色。

在InitInstance()中添加如下代码:  

1
SetDialogBkColor(RGB(0,0,255),RGB(255,0,0));

值得注意的是:在调用DoModal()之前必须先调用SetDialogBkColor。

这种方法经过笔者验证,并不能改变对话框背景

方法二:重载OnPaint(),即WM_PAINT消息

1
2
3
4
CRect   rect; 
  CPaintDC   dc( this ); 
  GetClientRect(rect); 
  dc.FillSolidRect(rect,RGB(0,255,0));   //设置为绿色背景

方法三:重载OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor),即WM_CTLCOLOR消息

.h头文件添加 CBrush  m_brush;

.cpp源文件添加 m_brush.CreateSolidBrush(RGB(255,0,0));

1
2
3
4
5
6
7
OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT    nCtlColor)   
/*  下行代码要注释掉 
      HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor); 
*/ 
return    m_brush;   //返加红色刷子 
}

方法四:还是重载OnCtlColor   (CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor), 即WM_CTLCOLOR消息

.h头文件添加 CBrush m_brush;

.cpp源文件添加 m_brush.CreateSolidBrush(RGB(255,0,0));

1
2
3
4
5
6
7
8
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT  nCtlColor)
  
   HBRUSH    hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor); 
   //在这加一条是否为对话框的判断语句 
      if (nCtlColor   ==CTLCOLOR_DLG) 
         return    m_brush;   //返加红色刷子 
   return    hbr; 
   }

可以根据不同的控件类型返回不同的画刷,来实现不同控件颜色的设置  

1
2
3
4
5
6
7
CTLCOLOR_BTN                按钮控件
  CTLCOLOR_DLG                对话框
  CTLCOLOR_EDIT               编辑框
  CTLCOLOR_LISTBOX            列表控件
  CTLCOLOR_MSGBOX             消息控件
  CTLCOLOR_SCROLLBAR          滚动条控件
  CTLCOLOR_STATIC             静态控件
1
这里大家要注意,OnCtlColor能改变Static等子控件的颜色,对于Button必须设置其属性Owner Draw为True,才能改变Button按钮背景色(CButton 文本的字体颜色并不能通过SetBkColor来改变,需要自己重绘CButton,在DrawItem中进行实现。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
HBRUSH  CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT  nCtlColor)
{
  HBRUSH  hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  // TODO:  在此更改 DC 的任何属性
  if (nCtlColor==CTLCOLOR_BTN)          //更改按钮颜色
  {
   //pDC->SetBkMode(TRANSPARENT);
   pDC->SetTextColor(RGB(0,0,0));
   pDC->SetBkColor(RGB(121,121,255));  
   HBRUSH  b=CreateSolidBrush(RGB(121,121,255));
   return  b;
  }
  else  if (nCtlColor==CTLCOLOR_SCROLLBAR)  //
  {
   //pDC->SetBkMode(TRANSPARENT);
   pDC->SetTextColor(RGB(0,0,0));
   pDC->SetBkColor(RGB(233,233,220));
   HBRUSH  b=CreateSolidBrush(RGB(233,233,220));
   return  b;
  }
  else  if (nCtlColor==CTLCOLOR_EDIT)   //更改编辑框
  {
   //pDC->SetBkMode(TRANSPARENT);
   pDC->SetTextColor(RGB(0,0,0));
   pDC->SetBkColor(RGB(165,254,236));
   HBRUSH  b=CreateSolidBrush(RGB(165,254,236));
   return  b;
  }
  else  if (nCtlColor==CTLCOLOR_STATIC)  //更改静态文本
  {
   pDC->SetTextColor(RGB(0,0,0));
   pDC->SetBkColor(RGB(166,254,1));
   HBRUSH  b=CreateSolidBrush(RGB(166,254,1));
   return  b;
  }
  else  if (nCtlColor==CTLCOLOR_DLG)   //更改对话框背景色
  {
   pDC->SetTextColor(RGB(0,0,0));
   pDC->SetBkColor(RGB(166,254,1));
   HBRUSH  b=CreateSolidBrush(RGB(166,254,1));
   return  b;
  }
  // TODO:  如果默认的不是所需画笔,则返回另一个画笔
  return  hbr;
}
PS:  也可以到 OnEraseBkgnd(CDC* pDC)添加如下代码:
BOOL CXXXDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值


CRect   m_rt;   
GetClientRect(&m_rt);   
CBrush   brush;   
brush.CreateSolidBrush(RGB(0,255,0));   
pDC->FillRect(&m_rt,&brush);   






return TRUE;//CDialogEx::OnEraseBkgnd(pDC);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VC/MFC如何设置对话框背景颜色 的相关文章

  • 【移动端表格组件】uniapp简单实现H5,小程序,APP多端兼容表格功能,复制即用,简单易懂【详细注释版本】

    前言 由于最近需要做移动端的项目 有个pc端的后台系统里面需要移一部分页面过来 而里面就有很多的表格 我就开始惯例网上先找前人栽的树 我好乘凉 然后找了一圈发现 不管是主流的移动端ui库或者网上自己写的帖子 或者uniapp的插件网站 都没
  • 微信小程序新版canvas2d海报绘制(教你轻松搞定)

    效果 说明 canvas官方很早已经发声不再维护了 所以很多方法都已经不再适用 目前官方推荐适用canvas2d来绘制生成海报 canvas2d来绘制海报 canvas2d的优点 例如 不需要先预下载网络图片再绘制 前端只需要调用网络图片即
  • 物理层&数据链路层

    根据TCP IP体系 计算机网络分成4层体系结构 学习时作5层 物理层 比特流 数据链路层 帧 网络层 IP数据报 分组 运输层 报文 应用层 PDU 其中关系 对等层 gt 协议 上下层 gt 服务 物理层 物理层的数据传输单元为位 比特
  • 【mcuclub】继电器

    1 实物图 型号 SRD 05VDC SL C 2 原理图 3 内部构造 铁芯 线圈 衔铁 触点 弹簧 4 工作原理 只要在线圈两端加上一定的电压 线圈中就会流过一定的电流 从而产生电磁效应 衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸
  • 基于Spring事务的可靠异步调用实践

    SpringTxAsync组件是仓储平台组 WMS6 自主研发的一个专门用于解决可靠异步调用问题的组件 通过使用SpringTxAsync组件 我们成功地解决了在仓储平台 WMS6 中的异步调用需求 经过近二年多的实践并经历了两次618活动

随机推荐

  • caffe源码阅读《二》layer

    首先layer这个类是一个基类 所以他是没有cpp实现的 可以看一下它的cpp代码 include caffe layer hpp namespace caffe INSTANTIATE CLASS Layer namespace caff
  • Vulnhub靶机实战-Me-and-My-Girlfriend

    声明 好好学习 天天向上 搭建 使用virtualbox打开 网络和我的PRESIDENTIAL一样 是要vmware和virtualbox互连 渗透 存活扫描 发现目标 arp scan l 端口扫描 nmap T4 A 192 168
  • 类模板的偏特化

    Class templates 可以被偏特化 partial specialized 或称部份特化 局部特化 这使你得以在特定情形下使用特殊实作码 但仍然留给你 使用者 选择 template parameters 的能力 例如对于下面的
  • 蓝桥杯17届第九题——分巧克力(二分查找)

    前言 二分查找一般用于暴力枚举下的优化 在有序的条件下 能极大提升查找效率 分巧克力 儿童节那天有K位小朋友到小明家做客 小明拿出了珍藏的巧克力招待小朋友们 小明一共有N块巧克力 其中第i块是Hi x Wi的方格组成的长方形 为了公平起见
  • 静态链表及其操作

    静态链表就是利用数组来实现链表 目的是为了整合顺序表和链表的优势 比如顺序表适合定位元素 链表适合删除和插入元素等等 本例子用Java来实现的 代码方面可能还有些不足 但是运行的结果是准确的 对于理解没有障碍 Demo类 package c
  • 【react+ts】拖拽功能简单小demo实现

    tsx import Component from react import drog sass interface Props interface state X number Y number class Drog extends Co
  • TCP —— 流量控制

    一 流量控制 二 示例 传输层和数据链路层的流量控制的区别 传输层定义端到端用户之间的流量控制 数据链路层定义两个中间的相邻结点的流量控制 另外 数据链路层的滑动窗口协议的窗口大小不能动态变化 传输层的则可以动态变化
  • vsto excel 判断某列都是空值或者是常量

    if worksheet Range A1 A38 SpecialCells Excel XlCellType xlCellTypeConstants null return false public enum XlCellType 摘要
  • Unity3d C#开发WebGL平台转微信小游戏保姆级教程(喜大普奔)

    广告 通过一段时间的基于minigame unity webgl transform插件的开发 算是稍微完整的一小个游戏已经制作完成 具体大家可以扫码体验一下 感谢支持 前言 之前馋与wx小游戏的大流量的广告分成 用cocos creato
  • 找不到xinput1_3.dll怎么办?xinput1_3.dll丢失的四个修复方法

    在我们打开游戏的或者软件的时候 电脑提示 找不到xinput1 3 dll 无法继续执行此代码 怎么办 相信困扰着不少小伙伴 我再在打开吃鸡的时候 然后花了一上午的时候时间研究 现在终于知道xinput1 3 dll文件是什么 也总结了四个
  • [转]多人游戏位置同步—网络游戏的位置同步

    有关位置同步的方案实际上已经比较成熟 网上也有比较多的资料可供参考 在 带宽限制下的视觉实体属性传播 一文中 作者也简单提到了位置同步方案 的构造过程 但涉及到细节的地方没有深入 这里专门针对这一主题做些回顾 最直接的同步方案就是客户端在每
  • Qt Creator中增加新的ui文件时报错

    原因分析 moc 开头的文件编译过程中没有又一次生成导致 解决的方法 删除编译产生的build目录 又一次编译就可以 错误类型截图例如以下 这个问题的解决 使得能够在不论什么时候都能够在project中加入新的ui文件 而不必在開始就加入全
  • linux修改文件名的三种方法

    文章目录 前言 一 用mv命令修改文件名 二 使用cp命令修改 三 使用rename命令修改 总结 前言 我们在使用linux系统过程中为了便于记忆或整理维护 经常需要对文件名进行修改 下面文章介绍了linux系统的三种修改文件名称的方式
  • logback时区设置东八区,生产环境配置

    写在springboot启动类main里面 设置时区东八区 TimeZone timeZone TimeZone getTimeZone GMT 08 TimeZone setDefault timeZone System out prin
  • 【webpack】webpack打包后, 静态图片资源不显示的若干个问题

    背景 最近在搭建公司的前端组件库 vue写的 webpack打包后 在项目中引用组件库 其中有个组件引用了静态图片资源 然而打包后在项目中引用该组件的图片就不显示了 遇到了以下问题 小小记录一下 1 打包时报错 问题 webpack打包时报
  • QT:头部菜单栏和右击菜单事件

    实现思路 1 gt 每一个小的选项都是一个action 项 一个menu 菜单 可以盛放很多action 一个菜单栏 QMenuBar 可以盛放很多menu 2 gt 把以上的嵌套起来就组合成了头部菜单栏 一般只能设置一个 3 gt men
  • Android的第一天

    早就想学下Android开发了 目前为止flash开发Android还不给力 所以还是老老实实的研究用java 开发 apk吧 下载好了 Android开发视频 看了两个视频 现在开始配置环境 ADK https dl ssl google
  • 在kali中进行bp字典爆破——攻防世界weak_auth结尾附带常用bp字典

    第一步 在kali中启动burpsuite 第二步 进入Proxy代理模块 代理模块是Burp的核心模块也是我们平时使用最多的模块 它主要用来拦截并修改浏览器 手机APP等客户端的HTTP HTTPS数据包 第三步 打开代理的浏览器进入题目
  • matlab函数 在线说明,matlab函数说明

    如果你刚接触matlab 可以看这篇Matlab自定义函数详解 MATLAB自定义函数形式function a b c funname x1 x2 x3 输入变量 对于输入变量 MATLAB可以识别输入变量的个数 通过nargin来记录当前
  • VC/MFC如何设置对话框背景颜色

    方法一 调用CWinApp类的成员函数SetDialogBkColor来实现 这个函数已经废弃 1 void SetDialogBkColor COLORREF clrCtlBk RGB 192 192 192 COLORREF clrCt