关于在ATL中自定义消息
来源:互联网 发布:苹果手机作图软件 编辑:程序博客网 时间:2024/05/03 02:46
在ATL中自定义消息的机制与MFC类似,使用消息映射。
消息映射
为了确保我们能够在CWindowImpl-derived class中处理Windows消息,ATL从抽象基类CMessageMap中继承。CMessageMap声明一个纯虚函数—— ProcessWindowMessage,整个类如下:
class ATL_NO_VTABLE CMessageMap
{
public:
virtual BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg,
WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID) = 0;
};
你的CWindowImpl-derived class中必须实现ProcessWindowMessage函数,该函数在CWindowImpl基类CWindowImplBaseT中被WindowProc调用。如果ProcessWindowMessage返回TRUE,消息已经被你的基类处理了,WindowProc将不会进行缺省消息处理,如果返回FALSE,WindowProc就会进行缺省消息处理。
BEGIN_MSG_MAP(CMainFrame)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
END_MSG_MAP()
消息处理者将处理消息或者失败,导致缺省处理。在处理函数被调用之前,句柄参数被缺省置为TRUE。处理函数返回且ProcessWindowMessage退出后,你能够手动将它设置为FALSE( as OnDestroy does)来允许缺省处理。
针对标准Windows消息、WM_NOTIFY消息和WM_COMMAND消息,ATL有很多消息处理宏供选择,基本宏类型有MESSAGE_HANDLER、NOTIFY_HANDLER和COMMAND_HANDLER。消息队列用相应的宏来处理,比如:MESSAGE_RANGE_HANDLER、NOTIFY_RANGE_HANDLER和COMMAND_RANGE_HANDLER。最简单的增加消息映射处理的方法是在类上面单击右键,从弹出菜单上选择添加Windows消息处理,VC则会插入正确的消息宏。你不能使用类向导添加ATL消息映射处理。下面是有用的消息处理宏的概要:
MESSAGE_HANDLER映射一个标准Windows消息到一个处理函数。
MESSAGE_RANGE_HANDLER映射一批标准Windows消息到一个处理函数。
COMMAND_HANDLER映射一个WM_COMMAND消息到一个处理函数,比如通知消息、菜单消息、控件消息或者加速键消息。
COMMAND_ID_HANDLER映射一批WM_COMMAND消息到一个处理函数,比如通知消息、菜单消息、控件消息或者加速键消息。
COMMAND_CODE_HANDLER映射一个WM_COMMAND通知消息到一个处理函数。
COMMAND_RANGE_HANDLER映射一批WM_COMMAND通知消息到一个处理函数,比如通知消息、菜单消息、控件消息或者加速键消息。
NOTIFY_HANDLER映射一个WM_NOTIFY消息到一个处理函数,比如:通知消息、控件标识。 NOTIFY_ID_HANDLER映射一批WM_NOTIFY消息到一个处理函数,比如:通知消息、控件标识。
NOTIFY_CODE_HANDLER 映射一个WM_NOTIFY消息到一个处理函数,比如:通知消息。
NOTIFY_RANGE_HANDLER映射一批WM_NOTIFY消息到一个处理函数,比如:控件消息。
更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn
- 关于在ATL中自定义消息
- 在ATL接口中添加自定义函数
- 在ATL无窗口ACTIVEX控件中响应timer消息
- 在VC++中自定义消息
- 在C#中使用自定义消息
- 在程序中如何使用自定义消息
- 在C#中使用自定义消息
- 在C#中使用自定义消息
- 在C#中使用自定义消息
- 如何在MFC中自定义消息
- 在MFC中添加用户自定义消息
- 在MFC中添加自定义消息响应
- 在VC中 添加响应自定义消息
- 在VC中 添加响应自定义消息
- 在MFC中添加用户自定义消息
- 在OCX中使用自定义消息
- 在自定义NSTextField中响应键盘消息
- 在MFC中添加用户自定义消息
- 职场出人头地的十个谈话技巧
- c# 关闭子窗口刷新父窗口
- 设置默认浏览器L设置默认浏览器L
- Hibernate HQL(转)
- linux下挂载硬盘光驱和U盘
- 关于在ATL中自定义消息
- 轻松玩转MSN 8.5手写功能
- 在SQL Server 2005中运行CLR
- 打印DataGrid的指定的列和行
- 在php中输出html代码
- 在你的游戏中应用LUA(ZT)(转载)
- famous course
- php的post数据获取说明
- 如何成为一个合格的中层领导?