扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:hustli 来源:论坛 2007年10月22日
关键字:
BOOL CWnd::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { if (ReflectLastMsg(hWndCtrl, pResult)) file://hWndCtrl,为发送窗口 return TRUE; file://如果子窗口已处理了此消息,返回 AFX_NOTIFY notify; notify.pResult = pResult; notify.pNMHDR = pNMHDR; return OnCmdMsg(nID, MAKELONG(nCode, WM_NOTIFY)? notify:NULL); } |
(2)ReflectLastMsg声明如下:
static BOOL PASCAL ReflectLastMsg(HWND hWndChild, LRESULT* pResult = NULL); |
它的主要任务就是调用发送窗口的SendChildNotifyLastMsg。
(3)SendChildNotifyLastMsg声明如下:
BOOL SendChildNotifyLastMsg(LRESULT* pResult = NULL); |
调用发送窗口的虚函数OnChildNotify函数,进行处理。 如果发送窗口没有进行重载处理,则调用ReflectChildNotify(...)函数进行标准的反射消息的消息映射处理。
使用的一个例子
这里面我们举一个简单的例子,希望大家能够更清晰的掌握消息反射机制。
(1)创建一个基于对话框的工程。
(2)利用向导创建一个新的类:CMyEdit,基类是CEdit。
(3)在CMyEdit头文件中加入3个成员变量:
COLORREF m_clrText ; COLORREF m_clrBkgnd ; CBrush m_brBkgnd; |
(4)利用向导在其中加入WM_CTLCOLOR(看到了么,前面是不是有一个=?),并且将它的函数体改为:
HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT nCtlColor) { pDC->SetTextColor( m_clrText ); // text pDC->SetBkColor( m_clrBkgnd ); // text bkgnd return m_brBkgnd; // ctl bkgnd } |
同时我们在.cpp文件中会看到ON_WM_CTLCOLOR_REFLECT(),这就是我们所说的经过处理的宏,是不是很符合规则?
(5)在对话框中加入一个Edit,增加一个关联的变量,选择Control属性,类别为CMyEdit。
(6)在对话框.cpp文件中加入#include "MyEdit.h",运行,看到了什么?
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者