MenuHelp

MenuHelp

很多程式都是有選單和狀態欄,當用滑鼠點開選單移動選擇各選單項的時候,會在狀態欄顯示關於該選單項的說明。這個功能MFC是封裝好的,用嚮導生成即可,但用API編程就得自己編寫代碼了,查了一下MSDN,有個MenuHelp函式可以做到。

基本介紹

  • 中文名:MenuHelp
  • 函式原型:void MenuHelp
函式原型,基本信息,

函式原型

void MenuHelp(
UINT uMsg,
WPARAM wParam,
LPARAM lParam,
HMENU hMainMenu,
HINSTANCE hInst,
HWND hwndStatus,
LPUINT lpwIDs
);

基本信息

前面的參數好理解,關鍵是最後一個參數lpwIDs,MSDN說明是一個UINT數組指針,數組元素必須是成對的,第一個是字元串資源ID,第二個是選單句柄,想想好象比較麻煩,得在程式載入選單後得到每個選單項的句柄然後填寫這個數組?不厭其煩寫了代碼一試,卻滿不是那么回事,根本不起作用。於是看了看MFC的原始碼,暈,居然沒用這個函式,是自己處理的。再找其他SDK寫的例程,發現這個數組只有4個元素,兩對,第二對是0,0,標誌數組結束,第一對中的字元串資源ID在資源中根本沒有,第二個選單句柄值為0x1100,代碼中也沒有再對這個數組進行操作了,但卻能正常工作,這下更暈了。仔細研究了這個“神奇”的程式,終於知道了MenuHelp的用法:
UINT wIDs[] = {MH_BASE,0x1100,0,0}
這個MH_BASE可以隨便定義一個數值,不過必須保證該值加上選單命令ID的數值後不能超過0xFFFF。
然後在資源中加入幫助字元串,該字元串的資源ID必須是MH_BASE加上相應的選單命令ID。而子選單的字元串的資源ID必須是0x1100加上相應的序號,這個子選單的幫助字元串是指:比如選單上一般都會有“檔案”這個選單項,點開“檔案”會彈出下拉選單,顯示“打開”,“關閉”等,滑鼠移到這兩個選項上在狀態欄分別顯示“打開檔案”和“關閉”,而移出這兩個選項並且下拉選單未關閉,則會顯示這個子選單的幫助字元串“檔案操作”。第二個子選單比如“編輯”的幫助字元串資源ID就是0x1100+1。
比如選單中“打開”和“關閉”的命令ID分別為CM_OPEN和CM_CLOSE,就需要在資源中如下定義字元串:
STRINGTABLE DISCARDABLE
BEGIN
MH_BASE + CM_OPEN "打開檔案"
MH_BASE + CM_CLOSE "關閉"
0x1100 + 0 "檔案操作"
END
程式中回響WM_MENUSELECT訊息,在其中調用MenuHelp(WM_MENUSELECT,wParam,lParam,GetMenu(hWnd),hInstance,hStatusWnd,wIDs);就可以了。

相關詞條

熱門詞條

聯絡我們