VisualFC使用 - 处理WTL窗口消息
2007-11-16 10:39
633 查看
WTL窗口消息一般使用ATL形式的消息,也可以使用WTL atlcrack.h中定义的WTL新型消息,VisualFC对这两种消息都支持。
新建或打开一个WTL项目,运行VFC的WTL类向导,更改Class Name中的类为CMainDlg,选择WTL Event页面,可以看到分为两个列表,上面列表为消息列表,即WTL目前支持的消息,下面列表为函数列表,即当前类中处理的消息及函数,其中标记为<ATL>为使用ATL原始消息处理的函数,标记为<WTL>为使用了WTL新型消息的函数。假设我们添加处理右键菜单消息,选择消息列表中的WM_CONTEXTMENU消息,单击"Add Event"按钮,将显示WTL消息编辑对话框,其中最下面的Use WTL message选择按钮控制是ATL消息类型还是WTL消息类型。如果选ATL消息,按确定后将在WTL类中自动加入消息,如下所示:
BEGIN_MSG_MAP(CMainDlg)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
。。。。。。
END_MSG_MAP()
。。。。。。
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return 0;
}
如果选择WTL消息,按确定后将在WTL类中自动加入消息,如下图所示
BEGIN_MSG_MAP(CMainDlg)
MSG_WM_CONTEXTMENU(OnContextMenu)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
。。。。。。
END_MSG_MAP()
。。。。
void OnContextMenu(CWindow wnd, CPoint point)
{
}
我们需要将BEGIN_MSG_MAP改为BEGIN_MSG_MAP_EX,然后在CMainDlg类的头文件中添加所需头文件即可,如下所示。
#include <atlmsic.h>
#include <atlcrack.h>
。。。
BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_CONTEXTMENU(OnContextMenu)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
。。。。。。
END_MSG_MAP()
如果不需要处理某个消息,也可以使用WTL类向导在"WTL Event"页面中选中不需要消息函数,单击Del Event按钮将对其进行删除,将会提示这实际上只是将BEGIN_MSG_MAP中的消息进行注释掉,实际的函数并没有真正删除。
新建或打开一个WTL项目,运行VFC的WTL类向导,更改Class Name中的类为CMainDlg,选择WTL Event页面,可以看到分为两个列表,上面列表为消息列表,即WTL目前支持的消息,下面列表为函数列表,即当前类中处理的消息及函数,其中标记为<ATL>为使用ATL原始消息处理的函数,标记为<WTL>为使用了WTL新型消息的函数。假设我们添加处理右键菜单消息,选择消息列表中的WM_CONTEXTMENU消息,单击"Add Event"按钮,将显示WTL消息编辑对话框,其中最下面的Use WTL message选择按钮控制是ATL消息类型还是WTL消息类型。如果选ATL消息,按确定后将在WTL类中自动加入消息,如下所示:
BEGIN_MSG_MAP(CMainDlg)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
。。。。。。
END_MSG_MAP()
。。。。。。
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
return 0;
}
如果选择WTL消息,按确定后将在WTL类中自动加入消息,如下图所示
BEGIN_MSG_MAP(CMainDlg)
MSG_WM_CONTEXTMENU(OnContextMenu)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
。。。。。。
END_MSG_MAP()
。。。。
void OnContextMenu(CWindow wnd, CPoint point)
{
}
我们需要将BEGIN_MSG_MAP改为BEGIN_MSG_MAP_EX,然后在CMainDlg类的头文件中添加所需头文件即可,如下所示。
#include <atlmsic.h>
#include <atlcrack.h>
。。。
BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_CONTEXTMENU(OnContextMenu)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
。。。。。。
END_MSG_MAP()
如果不需要处理某个消息,也可以使用WTL类向导在"WTL Event"页面中选中不需要消息函数,单击Del Event按钮将对其进行删除,将会提示这实际上只是将BEGIN_MSG_MAP中的消息进行注释掉,实际的函数并没有真正删除。
相关文章推荐
- 网络编程(53)—— Windows下使用WSAAsyncSelect实现窗口处理socket消息
- 使用WTL+OGRE编写3D程序(2) - 窗口消息函数
- [ATL/WTL]_[初级]_[Win32窗口自定义消息处理过程]
- 关于在窗口消息处理函数中使用MessageBox造成消息重入的问题的研究及解决
- [ATL/WTL]_[初级]_[Win32窗口自定义消息处理过程]
- 复合窗口的ActiveX控件全屏及键盘消息处理问题
- WTL8.0,atlcrack.h中定义的消息处理函数声明
- 如何使用Visual Studio Tools for Office创建事件处理程序
- 使用Spring JMS简化异步消息处理
- 使用Spring JMS简化异步消息处理
- 不要在消息处理中使用线程锁定,会死锁的
- 鸡啄米vc++2010系列46(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
- [转]使用 Java API 处理 WebSphere MQ 大消息
- 注册 创建 显示 刷新窗口(注建显新),事件,消息循环,消息处理,钩子,dll钩子. (注重理解其中的逻辑关系)
- 如何使用Holmos处理模态窗口(ModalDialog)
- 处理鼠标离开窗口的消息 (WM_MOUSELEAVE)
- VisualFC - WTL/WinxGUI可视化开发环境
- Android消息处理机制之AsyncTask使用总结
- 使用 Microsoft Visual Studio International Pack 1.0 Beta1 处理汉字、拼音、笔画转换
- 基于netty的项目中使用protobuf,巧妙定义proto完成不同消息的编码和解码处理