2022年消息映射机制 .pdf
《2022年消息映射机制 .pdf》由会员分享,可在线阅读,更多相关《2022年消息映射机制 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一,消息映射机制1,消息响应函数:(例:在CDrawView类响应鼠标左键按下消息)1)在头文件 (DrawView.h) 中声明消息响应函数原型。/AFX_MSG(CDrawView) / 注释宏afx_msg void OnLButtonDown(UINT nFlags, CPoint point); /AFX_MSG / 注释宏说明:在注释宏之间的声明在VC 中灰色显示。afx_msg 宏表示声明的是一个消息响应函数。2)在源文件( DrawView.cpp)中进行消息映射。BEGIN_MESSAGE_MAP(CDrawView, CView) /AFX_MSG_MAP(CDrawVie
2、w) ON_WM_LBUTTONDOWN() /AFX_MSG_MAP / Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview) END_MESSAGE_MAP() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精
3、心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 说明:在宏 BEGIN_MESSAGE_MAP() 与 END_MESSAGE_MAP() 之间进行消息映射。宏 ON_WM_LBUTTONDOWN()把消息 WM_LBUTTONDOWN与它的响应函数OnLButtonDown()相关联。这样一旦有消息的产生,就会自动调用相关联的消息响应函数去处理。宏 ON_WM_LBUTTONDOWN()定义如下:#define ON_WM_LBUTTONDOWN() WM_LBUTTONDOWN, 0, 0, 0, AfxSig_vwp, (AFX_PMSG)
4、(AFX_PMSGW)(void (AFX_MSG_CALL CWnd:*)(UINT, CPoint)&OnLButtonDown , 3)源文件中进行消息响应函数处理。(DrawView.cpp中自动生成 OnLButtonDown函数轮廓,如下)void CDrawView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default CView:OnLButtonDown(nFlags, point); 说明:可见当增加一个消息响应处理,在以
5、上三处进行了修改。可在消息响应函数里添加消息处理代码完成对消息的响应、处理。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 2,消息响应的方式:1)在基类中针对每种消息做一个虚函数,当子类对消息响应时候,只要在子类中重写这个虚函数即可。缺点: MFC 类派生层次很多,如果在基类对每个消息进行虚函数处理,那么从基类派生的每个子类都将背负一个庞大的虚表,这样浪费内存,故MFC 没有采取这中方式而采取消息映射方式。2)消息映射方式:
6、MFC 在后台维护了一个句柄和C+ 对象指针对照表,当收到一个消息后,通过消息结构里资源句柄(查对照表)就可找到与它对应的一个C+ 对象指针,然后把这个指针传给基类,基类利用这个指针调用WindowProc()函数对消息进行处理,WindowProc()函数中调用 OnWndMsg()函数,真正的消息路由及处理是由OnWndMsg()函数完成的。由于WindowProc()和 OnWndMsg()都是虚函数,而且是用派生类对象指针调用的,由多态性知最总终调用子类的。在OnWndMsg()函数处理的时候,根据消息种类去查找消息映射,判断所发的消息有没有响应函数,具体方式是到相关的头文件和源文件中
7、寻找消息响应函数声明(从注释宏/AFX_MSG(CDrawView)./AFX_MSG之间寻找),消息映射(从宏 BEGIN_MESSAGE_MAP(.).END_MESSAGE_MAP() 之间寻找),最终找到对应的消息处理函数。当然,如果子类中没有对消息进行处理,则消息交由基类处理。说明:virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3
8、 页,共 8 页 - - - - - - - - - virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult); 二,有关绘图1,使用 SDK 获取 DC 句柄:HDC hdc; hdc=:GetDc(m_hWnd);/获取 DC 句柄MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL); LineTo(hdc,point.x,point.y); :ReleaseDC(m_hWnd,hdc);/释放 DC 2,利用 CDC 类指针和 CWin 类成员
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年消息映射机制 2022 消息 映射 机制
限制150内