在绘制控件颜色时,控件会发送WM_CTLCOLOR消息给父窗口,父窗口收到消息后,映射到OnCtlColor()函数中处理。

该函数返回一个画刷用于设置子控件的背景颜色,子控件再执行自己的CtlColor函数。

这样的话我们就有两种方法设置控件的背景颜色。

一、在父窗口中设置子控件颜色

HBRUSH CTestCtrlColorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

if (m_label.m_hWnd == pWnd->m_hWnd)
   {
       pDC->SetTextColor(RGB(255, 100, 0));  
       pDC->SetBkColor(RGB(124,124,100));
       return (HBRUSH)BLACK_BRUSH;
   }

return hbr;
}

其中 pDC和pWnd都是指子控件。nCtlColor表示某一类控件,值以CTLCOLOR_xxx形式表示。

二、直接在子控件中设置颜色。

如果想要在子控件中设置颜色,我们就需要派生一个自己的控件类并重载CtrlColot函数,设置颜色,并且还需要在子控件的头文件中

加入ON_WM_CTLCOLOR_REFLECT宏,如果WM_CTLCOLOR没有被处理,那么该消息将会传递回控件自己这里来处理。

具体处理如下:

BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
ON_WM_CTLCOLOR_REFLECT()
END_MESSAGE_MAP()

HBRUSH CMyStatic::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetTextColor(RGB(255, 100, 0));
pDC->SetBkColor(RGB(124, 124, 100));
return (HBRUSH)BLACK_BRUSH;
}

三、总结

消息反射对于创建可重用控件类非常重要,它使派生控件具有了 可以独立于付窗口执行自身操作的能力。

派生类控件可以将发送给父窗口未得到处理的消息再作用到自己的成员函数中。

注意:只有父窗口不处理通知时,消息才反射回来,Windows希望父窗口优先接收消息处理。

转载于:https://www.cnblogs.com/merlinzjl/p/8526055.html

MFC控件的颜色设置相关推荐

  1. Android学习之Textview控件字体颜色设置及颜色色值

    在Textview中设置字体的颜色和大小共有两种方式: 1.在.xml中设置 android:text="这里是文字" android:textSize="字体大小&qu ...

  2. 控件的颜色设置(本景色,文本色,文本背景色)

    HBRUSH TxtrRaderDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {  HBRUSH hbr = CDialog::OnCtl ...

  3. android控件字体,android 设置控件的颜色字体的方法

    1.用代码设置控件的颜色: int b =  getResources().getColor(R.drawable.blue);//得到配置文件里的颜色 mButton.setTextColor(b) ...

  4. VB 设置控件边框颜色(如:List、Text、Picture)

    VB 设置控件边框颜色,比如:ListBox.TextBox.PictureBox.ComboBox等等-. 调用方法: 'setBorderColor (控件句柄,颜色值)  setBorderCo ...

  5. MFC Tab背景颜色及窗体内控件背景颜色更改

    整体效果图如下: 1.Tab标签页改变背景颜色 主要参照的是以下链接中的案例进行的修改,有需要的可以参考:http://download.csdn.net/detail/u014272404/9797 ...

  6. MFC控件使用说明书

    VC++控件工具箱: 2 按钮(Button):用来接收用户的命令,应用程序在接收到用户命令后,通常需要进行一些后台工作.按钮可以响应单击或双击动作,在按钮接收到鼠标动作后,向其父窗口发送相应的控件通 ...

  7. 面向过程中模拟出面向对象,用c语言模拟出MFC控件,消息循环,“设计用户界面”

    大家好,今天给大家分享"怎样用c模拟出MFC控件 简单模拟出消息循环,按钮控件",面向过程中模拟出面向对象. 编程思路 首先用绘图库EasyX绘制窗口,窗口中绘制按钮,把按钮对象化 ...

  8. MFC控件编程之复选框单选框分组框

    MFC控件编程之复选框单选框分组框 一丶分组框 分组框 英文叫做 GroubBox 添加了分组框主要就是分组.好看.不重点介绍 二丶单选框 英文: Raido Button 单选框需要注意的事项 1. ...

  9. java 选择 颜色的控件_JavaFX颜色选择器(ColorPicker)

    颜色选择器控件允许用户从可用的颜色范围中选择颜色,或通过指定RGB或HSB组合设置其他颜色.JavaFX ColorPicker控件具有颜色选择器,调色板和自定义颜色对话框窗口. 创建ColorPic ...

最新文章

  1. 比较v-bind和v-model
  2. 内容推荐 | 最新科研资讯与小技巧
  3. web性能优化——关键渲染路径(上)
  4. linux下openssl编程
  5. 天然气阶梯是按年还是按月_按年算账 多退少补 你的年度个税应该是怎么算?...
  6. Java设计模式----策略模式(Strategy)
  7. spring的延迟初始化bean (default-lazy-init 与 lazy-init )
  8. Linux Rsync服务详解(二)——Rsync服务实战
  9. 天线学习笔记——HFSS简单阵列天线
  10. DoIP(三)—— 通信流程
  11. 解决谷歌disabled状态下操作问题
  12. ACTS:首屈一指的软件测试策略是什么?
  13. MogDB秘籍 之 乾坤大挪移
  14. 二维数组malloc申请空间以及初始化方式
  15. Google浏览器怎么导入证书
  16. 微信小程序如何支持分享给朋友和分享到朋友圈?如何解决分享朋友圈灰色问题
  17. (29)Verilog实现倍频【方法二】
  18. python中的self到底是什么
  19. 出现身份验证错误。 要求的函数不受支持, 远程计算机 这可能是由于CredSSP加密数据库修正
  20. Android 获取夜深模拟器中的文件获取不到

热门文章

  1. Servlet第一个示例
  2. 用 Parser Combinator 解析 Cirru 的缩进语法
  3. 使用RMAN恢复数据库
  4. 绝对养眼 Tech·Ed 2008大会SHOW GIRL动感热舞
  5. 表单验证自定义二选一
  6. Facebook Docusaurus 中文文档 自定义页面
  7. 前期绑定 vs 后期绑定
  8. Linux 编程中的API函数和系统调用的关系【转】
  9. springMVC - 之拦截器
  10. IOS委托设计模式(摘自IOS开发指南)