• 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 处理。”

  • 相关阅读:
    位置控制
    Scaleform结合C++编程
    使用定点缓存进行绘制
    纹理
    动态规划:背包问题
    希尔排序
    折半插入排序
    快速排序
    上楼梯算法
    归并排序
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/3155810.html
Copyright © 2020-2023  润新知