在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);//注意与前面的函数名不同,而且少一个参数。
文章评论(0条评论)
登录后参与讨论