MFC里ON_COMMAND_RANGE消息映射的ID问题

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

posted @   唐小喵  阅读(3805)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示