之前一值無法使用ALT鍵,因查找唔到其VK_ALT對應的『VIRTUAL CODE』,近日把WinXP切底拋棄改用Win10,發現很多程式均使用ALT鍵展示或隱藏MENU. 細想VK_ALT即等於VK_MENU,下面是使用ALT鍵展示與隱藏MENU源代碼
1.在resource.h加入
#define IDALT 1000
2.在resource.rc加入加速表,一定要加入ALT否則MENU會獲得焦點要按量下ALT鍵,另不要用VK_LMENU和VK_RMENU
ACCEL ACCELERATORS
BEGIN
VK_MENU, IDALT, VIRTKEY, ALT, NOINVERT
END
3.在main()修改消息循環
MSG msg;//消息 msg是WINDOWS放置下一個消息的存儲器,
HACCEL hAccel; // 加速鍵表的句柄
hAccel =::LoadAccelerators(main_instance,”ACCEL”); // 加速鍵表的句柄
while(GetMessage(&msg,NULL,0,0)) //從事件對列中獲得消息
{ //由 PostQuitMessage(0) 發送的WM_QUIT消息,被PeekMessage()檢測到
if(msg.message == WM_QUIT)
break;// 跳出主循環
if(!::TranslateAccelerator(main_window,hAccel,&msg))// 處理加速鍵表
{
TranslateMessage(&msg);//處理和轉換加速鍵.
DispatchMessage(&msg);//調用WinProc對消息進行處理,從MSG結構取的參數並傳遞.
}
}
4.在WinProc加入
if(msg == WM_COMMAND)
{ // 處理菜單命令
if (LOWORD(wParam) == IDALT)
{ main_menu = ::LoadMenuA(NULL,”MAIN_MENU”);// 主菜單
if (::GetMenu(main_window) == NULL)
::SetMenu(main_window, main_menu);// 設定菜單
else
::SetMenu(main_window, NULL);// 設定菜單
}
}