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 處理。”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM