MFC里ON_COMMAND_RANGE消息映射的ID问题

本文介绍了一个关于MFC动态菜单项ID定义及消息响应的问题。由于ID定义超过了65535的限制导致消息响应函数无法正常工作。文章详细解释了问题原因,并给出了合理的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在工作中遇到一个问题,一个动态菜单,每个菜单的菜单项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 处理。”

转载于:https://www.cnblogs.com/tangzhengyue/p/3155810.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值