zoukankan      html  css  js  c++  java
  • 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 处理。”

  • 相关阅读:
    sublime配置攻略
    Objective-C代码块语法(block)使用
    [C/C++]_[VS2010来源与UTF8中国字符串转码ANSI问题]
    Android资源管理框架(Asset Manager)简介和学习计划
    ExtJs自学教程(1):从一切API开始
    ORACLE触发特定的解释
    同TextView在不同的显示内容
    :gAudit
    IIS日志分析 MapReduce
    图片存储心得
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/3155810.html
Copyright © 2011-2022 走看看