首页 > 编程语言 > 详细

MFC里ON_COMMAND_RANGE消息映射的ID问题

时间:2015-09-30 12:51:34      阅读:401      评论:0      收藏:0      [点我收藏+]

今天在工作中遇到一个问题,一个动态菜单,每个菜单的菜单项ID是我自己定义的,定义如下:

技术分享
#define IDM_SEARCHRECORD0   222240
#define IDM_SEARCHRECORD1   222241
#define IDM_SEARCHRECORD2   222242
#define IDM_SEARCHRECORD3   222243
#define IDM_SEARCHRECORD4   222244
#define IDM_SEARCHRECORD5   222245
#define IDM_SEARCHRECORD6   222246
#define IDM_SEARCHRECORD7   222247
#define IDM_SEARCHRECORD8   222248
#define IDM_SEARCHRECORD9   222249
技术分享

然后定义了一个ON_COMMAND_RANGE宏来对着十个菜单项进行消息响应:

ON_COMMAND_RANGE(IDM_SEARCHRECORD0,IDM_SEARCHRECORD9,OnRecentSearchClicked)

下面是消息响应函数OnRecentSearchClicked:

技术分享
void OnRecentSearchClicked(UINT nID)
{
    if(nID < IDM_SEARCHRECORD0 || nID > IDM_SEARCHRECORD9)
    {
        return;
    }
     else
    {
         ......
    }
}
技术分享

可是奇怪的是,程序怎么都进不到else里面,控件的ID怎么都传不对。

后面上网找了很久才知道nID不能大于65535,不然会溢出,当然不对了。

引用原文描述:

 “这个uID是在 id1,id2之间的,但是MFC提供的这个 id1,id2是有个范围的,最大为65535个,所以用户在创建动态菜单,BUTTON时,在资源文件中定义这些宏时请最好不要超过这些范围,如果硬是要超过65535,那麽在memberFxn(UINT uID)函数判断的时候 需要取余 uID%65535 处理。”

MFC里ON_COMMAND_RANGE消息映射的ID问题

原文:http://www.cnblogs.com/qq76211822/p/4848658.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!