關於MenuHelp的使用

2021-04-12 15:43:26 字數 1292 閱讀 1153

很多程式都是有選單和狀態列,當用滑鼠點開選單移動選擇各選單項的時候,會在狀態列顯示關於該選單項的說明。這個功能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可以隨便定義乙個數值,不過必須保證該值加上選單命令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);就可以了。

關於this 的使用

如有不對的地方請大家指出,呵呵.this 的使用 1.this是指當前物件自己。當在乙個類中要明確指出使用物件自己的的變數或函式時就應該加上this引用。如下面這個例子中 public class a public static void main string args 執行結果 s hellow...

關於 errno的使用

errno 是乙個全域性的變數,在 errno.h 中有它的定義 if defined mt defined dll defined mac crtimp extern int cdecl errno void define errno errno else ndef mt ndef dll crt...

關於 irq 的使用

關於 irq使用,首先看arm公司的說明 arm 編譯器 armcc 支援的函式關鍵字和運算子。下表列出的關鍵字是 arm 對 c 和 c 標準的擴充套件。表中沒有介紹不具備 arm 編譯器特有的行為或限制的標準 c 和 c 關鍵字。arm 編譯器支援的關鍵字擴充套件表 關鍵字 align int6...