VisualFC使用 - 处理WTL窗口消息

来源:互联网 发布:索泰显卡 知乎 编辑:程序博客网 时间:2024/05/23 00:14

       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中的消息进行注释掉,实际的函数并没有真正删除。