自定义消息获取消息

上传人:kms****20 文档编号:41031795 上传时间:2018-05-28 格式:DOC 页数:8 大小:31.50KB
返回 下载 相关 举报
自定义消息获取消息_第1页
第1页 / 共8页
自定义消息获取消息_第2页
第2页 / 共8页
自定义消息获取消息_第3页
第3页 / 共8页
自定义消息获取消息_第4页
第4页 / 共8页
自定义消息获取消息_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《自定义消息获取消息》由会员分享,可在线阅读,更多相关《自定义消息获取消息(8页珍藏版)》请在金锄头文库上搜索。

1、自定义消息获取消息自定义消息获取消息自定义消息获取消息 1. 自定义消息(1) 手工定义消息,可以这么写 #define WM_MY_MESSAGE(WM_USER+100), MS 推荐的至少是 WM_USER+100;(2)写消息处理函数,用 WPARAM,LPARAM 返回 LRESULT.LRESULT CMainFrame:OnMyMessage(WPARAM wparam,LPARAM lParam)/加入你的处理函数(3) 在类的 AFX_MSG 处进行声明,也就是常说的“宏映射“/-2. 获取有关窗口正在处理的当前消息的信息调用 CWnd: : GetCurrentMessag

2、e 可以获取一个 MSG 指针。例如,可以使用 ClassWizard将几个菜单项处理程序映射到一个函数中,然后调用GetCurrentMessage 来确定所选中的菜单项。viod CMainFrame : : OnCommmonMenuHandler ( )/Display selected menu item in debug window .TRACE (“Menu item %u was selected . n“ ,GetCruuentMessage ( ) wParam );/-3.窗口最大化、最小化及关闭的消息是什么 最大化、最小化将发送 WM_SYSCOMMAND 消息。要处

3、理该消息,可以这么做: (1)、在 Form 的头文件中添加: void _fastcall RestrictMinimizeMaximize(TMessage BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, RestrictMinimizeMaximize) END_MESSAGE_MAP(TForm) (2)、在 Form 的单元文件中添加: void _fastcall TForm1:RestrictMinimizeMaximize(TMessage / or “else TForm:Dispatch(/AFX_MSG

4、DECLARE_MESSAGE_MAP()应用程序类的实现文件中包含了类似如下的代码:BEGIN_MESSAGE_MAP(CTApp, CWinApp)/AFX_MSG_MAP(CTttApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)/AFX_MSG_MAPEND_MESSAGE_MAP()头文件里是消息映射和消息处理函数的声明,实现文件里是消息映射的实现和消息处理函数的现。它表示让应用程序对象处理命令消息 ID_APP_ABOUT,消息处理函数是 OnAppAbout。 为什么这样做之后就完成了一个消息映射?这些声明和实现到底作了些什么呢?接着,将讨论这些问题

5、。在声明与实现的内部 DECLARE_MESSAGE_MAP 宏: 首先,看 DECLARE_MESSAGE_MAP 宏的内容:#ifdef _AFXDLL#define DECLARE_MESSAGE_MAP() private: static const AFX_MSGMAP_ENTRY _messageEntries; protected: static AFX_DATA const AFX_MSGMAP messageMap; static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); virtual const AFX_MSGMAP*

6、GetMessageMap() const; #else#define DECLARE_MESSAGE_MAP() private: static const AFX_MSGMAP_ENTRY _messageEntries; protected: static AFX_DATA const AFX_MSGMAP messageMap; virtual const AFX_MSGMAP* GetMessageMap() const; #endifDECLARE_MESSAGE_MAP 定义了两个版本,分别用于静态或者动态链接到 MFC DLL 的情形。 BEGIN_MESSAE_MAP 宏 然

7、后,看 BEGIN_MESSAE_MAP 宏的内容:#ifdef _AFXDLL#define BEGIN_MESSAGE_MAP(theClass, baseClass) const AFX_MSGMAP* PASCAL theClass:_GetBaseMessageMap() return const AFX_MSGMAP* theClass:GetMessageMap() const return AFX_DATADEF const AFX_MSGMAP theClass:messageMap = const AFX_MSGMAP_ENTRY theClass:_messageEntr

8、ies = #else#define BEGIN_MESSAGE_MAP(theClass, baseClass) const AFX_MSGMAP* theClass:GetMessageMap() const return AFX_DATADEF const AFX_MSGMAP theClass:messageMap = const AFX_MSGMAP_ENTRY theClass:_messageEntries = #endif#define END_MESSAGE_MAP() 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 ; 对应地, BEGIN_MESSAGE_MAP 定义了两个版本,分别用于静态或者动态链接到 MFC DLL 的情形。END_MESSAGE_MAP 相对简单,就只有一种定义。 ON_COMMAND 宏 最后,看 ON_COMMAND 宏的内容:#define ON_COMMAND(id, memberFxn) WM_COMMAND,CN_COMMAND,(WORD)id,(WORD)id,AfxSig_vv,(AFX_PMSG)memberFxn;消息映射声明的解释 在清楚了有关宏的定义之后,现在来分析它们的作用和功能。消息映射声明的实质是给所在类添加几个静态成员变量和静态或虚拟函数,当然它们是与消息映射相关的变量和函数。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号