在開發時經常要創建菜單,并且動態顯示和隱藏菜單或者是某個子菜單。以下就是實現的方法:
1.創建并顯示菜單
SHMENUBARINFO mbi;
ZeroMemory(&mbi, sizeof(SHMENUBARINFO));
mbi.cbSize=sizeof(SHMENUBARINFO);
mbi.hwndParent=m_hWnd;
mbi.hInstRes=::AfxGetInstanceHandle();
mbi.dwFlags=SHCMBF_HMENU|SHCMBF_HIDESIPBUTTON;//隱藏SIP
mbi.nToolBarId=IDR_MYMENU;
SHCreateMenuBar(&mbi);
2.隱藏菜單
HWND hwnd=::SHFindMenuBar(m_hWnd);
if(hwnd!=NULL)
::ShowWindow(hwnd,SW_HIDE);
3.隱藏某個子菜單項
TBBUTTONINFO tbbi = {0};
tbbi.cbSize = sizeof(TBBUTTONINFO);
tbbi.dwMask = TBIF_LPARAM | TBIF_BYINDEX;
::SendMessageW(mbi.hwndMB, TB_GETBUTTONINFO,0, (LPARAM)&tbbi); //0為SK1,1為SK2(即左右軟鍵)
g_hMenu = (HMENU)tbbi.lParam;//g_hMenu為全局變量,這樣就可以在任何地方隱藏子菜單了
EnableMenuItem(g_Menu,ID_TEST,MF_GRAYED);//隱藏子菜單
//顯示子菜單
EnableMenuItem(g_Menu,ID_TEST,MF_ENABLED);
在使用語言Module時,要注意庫中的ID與應用程序中定義的ID是否一致。
4.使某個SK(Soft Key)不可用
::SHEnableSoftkey(mbi.hwndMB,0,TRUE,FALSE);