標籤: 暫無標籤

  很多程序都是有菜單和狀態欄,當用滑鼠點開菜單移動選擇各菜單項的時候,會在狀態欄顯示關於該菜單項的說明。這個功能MFC是封裝好的,用嚮導生成即可,但用API編程就得自己編寫代碼了,查了一下MSDN,有個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);就可以了。

上一篇[MERP]    下一篇 [MemOK]

相關評論

同義詞:暫無同義詞