MFC消息ON_WM_CONTEXTMENU和ON_COMMAND_RANGE

来源:互联网 发布:linux touch -t 编辑:程序博客网 时间:2024/06/06 12:45

ON_WM_CONTEXTMENU消息说明:用户右键窗口时调用

此消息在右键单击窗口时调用,此消息的宏


#define ON_WM_CONTEXTMENU() \{ WM_CONTEXTMENU, 0, 0, 0, AfxSig_vWp, \(AFX_PMSG)(AFX_PMSGW) \(static_cast< void (AFX_MSG_CALL CWnd::*)(CWnd*, CPoint) > ( &ThisClass :: OnContextMenu)) },

从结构中可以看出,此消息实际的对应的函数名为OnContextMenu参数CWnd*, CPoint一个为一个窗体的句柄,一个为坐标。


从网上资料得知,窗体可以为任意一个windows窗体,实际测试得到的结果是:接收消息所对应的当前窗体中的窗体(或控件),CPoint即接收到此消息时的鼠标坐标。

此时可以做很多事,比如,右键单击到一个控件时,弹出一个菜单。


ON_COMMAND_RANGE消息用于响应菜单或工具栏的事件


#define ON_COMMAND_RANGE(id, idLast, memberFxn) \{ WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)idLast, AfxSigCmd_RANGE, \(AFX_PMSG) \(static_cast< void (AFX_MSG_CALL CCmdTarget::*)(UINT) > \(memberFxn)) },

查看构造原型,可知此宏的参数为(UINT),查阅相关文档后得知,此参数为消息ID.

id  和 idLast 分别为起始ID,

此消息的具体功能为将一连串的消息在此一个函数中处理,而不必为每个事件写一个函数,事件之间的区分,只需要通过ID来区分即可。

id需要定义为连续id。

在函数中区分ID进行处理即可。


原创粉丝点击