使用菜單條 翻譯:tellmenow
一旦建立了菜單條,可能還需要配置它。雖然菜單條看上去和命令條不同,但它同樣是建立在工具條基礎上的。所以儘管您不希望菜單條的行為總是和命令條一樣,但您可以一些命令條的函數和工具條的訊息。例如,公用控制項的一個很方便的特性是它們包含一系列位元影像,用於工具條上的按鈕。所以您不必自己建立位元影像,這樣可能會建立一個非標準圖象,您可以使用系統提供的映像,用於剪下、複製和粘貼。
在菜單條中使用公用控制項位元影像
要使用系統提供的位元影像,只要簡單的加它們到菜單條中即可,就如同加它們到公用控制列一樣。菜單條被建立的時候,在結構SHMENUBARINFO中指定的任何位元影像將被加到菜單條中。所以,如果有一個包含三個圖象的位元影像,並要加到標準圖象集中,那麼“剪下(cut)”位元影像圖象應該指定為STD_CUT+3。在下面的程式碼片段中,將建立一個菜單條,並且將標準圖象集加到其中。
if(!SHCreateMenuBar(&mbi))
return NULL;
CommandBar_AddBitmap(mbi.hwndMB, HINST_COMMCTRL, IDB_STD_SMALL_COLOR, STD_PRINT, 16,16);
在菜單條資源裡的功能表項目中指定正確的索引,是使用這些圖象的最簡單方法。菜單條項資源中的第一個域就是位元影像圖象索引。只要位按鈕位元影像設定位元影像索引即可。
使用菜單條菜單
有時應用程式需要操縱菜單條,比如設定/清楚檢查標誌(check mark)或者設定功能表項目的生效/失效等。標準函數集(例如CheckMenuItem)用在菜單條上來修改菜單。需要獲得菜單控制代碼,這樣就可以修改功能表項目了。菜單條提供三個訊息用於獲得/設定菜單控制代碼:SHCMBM_GETMENU、SHCMBM_GETSUBMENU和SHCMBM_SETSUBMENU。可以發送SHCMBM_GETMENU和SHCMBM_GETSUBMENU訊息到菜單條來查詢菜單控制代碼或指定的子功能表。下面示範了如何使用SHCMBM_GETMENU來查詢根菜單控制代碼。
hMenu = (HMENU) SendMessage (hwndMenuBar, SHCMBM_GETMENU, 0, 0);
可以使用這個菜單控制代碼來修改菜單條上顯示的任意功能表項目。要查詢繫結到菜單條指定項的子功能表,可以使用SHCMBM_GETSUBMENU,例如
hSubMenu = (HMENU)SendMessage (hwndMenuBar, SHCMBM_GETSUBMENU, 0, ID_VIEWMENU);
參數lParam被設定成菜單條上指定按鈕的ID,本例中,菜單控制代碼綁定到ID是ID_VIEWMENU的按鈕上。
要改變菜單條上特性按鈕的菜單,可以使用SHCMBM_SETMENU訊息,將參數wParam設定為按鈕ID,參數lParam設定成新的菜單控制代碼,例如
hOldMenu = (HMENU)SendMessage (hwndMenuBar, SHCMBM_SETMENU, ID_VIEWMENU, (LPARAM)hNewMenu);