原创 MFC的消息反射及其应用技巧

2010-11-25 17:31 2727 13 14 分类: 软件与OS
在Windows中有一个改变控件颜色的消息WM_CTLCOLOR,该消息通常由父类窗口(一般是对话框,也可是框架窗口)接收并处理,其响应函数(通常加在CDialog派生类中)为:
afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);
由于参数nCtlColor只能识别控件的类别,如编辑控件CTLCOLOR_EDIT,列表框CTLCOLOR_LISTBOX等,也就是说,如果一个对话框中有几个编辑控件,那么其颜色改变是相同的。这显然不是用户所希望的结果,因为它不能改变具体某个控件的颜色。MFC(4.0以上)提出了一个解决办法:即采用“消息反射”,具体做法是Windows发出WM_CTLCOLOR消息,对话框类收到该消息后,再“反射”(Reflect)到其中每个控件子类中,并由子类处理反射函数:
afx_msg HBRUSH CtlColor(CDC *pDC,UINT nCtlColor);//注意与前面的函数名不同,而且少一个参数。
假设一个对话框中有2个编辑控件IDC_EDIT1和IDC_EDIT2,其类变量为m_edit1和m_edit2。现在需要改变IDC_EDIT2的颜色,先从CEdit类派生一个新类CMyEdit,在CMyEdit中加入消息WM_CTLCOLOR的发射消息:ON_WM_CTLCOLOR_REFLECT及响应函数:CtlColor(),在该函数中重新设置IDC_EDIT2控件的颜色(文本和背景),然后定义实例:CMyEdit m_edit2即可。
注意事项:
1、WIndows消息循环机制不提供消息反射功能,该功能只能在MFC4.0以上版本中通过用户程序实现,MFC4.0以下版本无此功能。
2、具有反射功能的Windows消息共有16条,常用的有:(其余的可参考MSDN)
ON_NOTIFY_REFLECT
ON_WM_CTLCOLOR_REFLECT
ON_WM_HSCROLL_REFLECT
ON_WM_VSCROLL_REFLECT
ON_WM_DRAWITEM_REFLECT
ON_WM_MEASUREITEM_REFLECT
ON_UPDATE_COMMAND_UI_REFLECT
3、在MFC4.0以下版本中,消息WM_DRAWITEM(自画控件)有一种类似消息反射的功能,即在控件类中重构虚拟函数:Virtual void DrawItem()(注意不是OnDrawItem),这一功能在MFC4.0以后也继承下来,由于此方法不用定义反射消息ON_WM_DRAWITEM_REFLECT,因此,大部分用户在其应用程序中仍使用此方法。

文章评论1条评论)

登录后参与讨论

用户377235 2013-11-5 15:41

df
相关推荐阅读
用户36690 2014-09-29 09:36
高速LVDS接口信号完整性处理实例
  一、系统介绍 EMCCD相机由图像传感器、驱动电路、FPGA(Spartan-3)、LVDS接口和电源等组成。LVDS输出接口使用2片DS92LV1021,每片实现10bit并行数据到...
用户36690 2014-08-20 13:58
关于Xilinx FPGA JTAG下载时菊花链路中的芯片数量
    当一个系统中含有多片(2片以上)Xilinx FPGA、CPLD或PROM(FLASH)时,可采用单一JTAG口以菊花链(Daisy Chain)形式将所有芯片串联起来实现下载编程...
用户36690 2014-08-12 07:41
NiosII程序编译时出现onchip_mem不够问题及解决方法
    开发Altera Nios II软件可使用Nios II IDE或 Nios II Software Build Tools for Eclipse(即:Nios II SBT f...
用户36690 2014-08-11 15:06
Altera QuartusII及Cyclone IV E使用经验
  1、仅C8L、IC8L、C9L使用1.0V核电压(VCCINT),其它速度的均使用1.2V核电压。 2、对于作为LVDS传输的Bank必须接2.5V的VCCIO,参考数据手册表1-20...
用户36690 2014-08-07 14:35
Nios II IDE 与 Nios II SBT for Eclipse的区别
  1、Nios II IDE即Nios II Integrated Development Environment(Nios II 集成开发环境),Altera网站是这样介绍的: (ht...
用户36690 2014-08-07 14:34
Quratus II中 Nios II 硬件设计工具SOPC Builder与Qsys的区别
  1、 SOPC(System On a Programmable Chip.)即可编程片上系统,SOPC Builder是Quartus II中传统的Nios II 硬件设计工具,可以灵活...
我要评论
1
13
关闭 站长推荐上一条 /2 下一条