今天在工作中遇到一個問題,一個動態菜單,每個菜單的菜單項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 處理。”