3
我試圖將加速器添加到我的菜單中,當我按下'Ctrl + R'時它應該發送命令ID_VIEW_RESULTS
,但事實並非如此。它工作正常,點擊菜單項,但沒有轉化加速器,這是我有:WinAPI - 菜單加速器無法正常工作
MyApp.h
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#define ID_MAINMENU 101
#define ID_MENUACC 102
#define ID_VIEW_RESULTS 2001
MyApp.rc
#include "MyApp.h"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
ID_MAINMENU MENU
BEGIN
POPUP "&View"
BEGIN
MENUITEM "Calculated &Results...\aCtrl+R", ID_VIEW_RESULTS
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
ID_MENUACC ACCELERATORS
BEGIN
"^R", ID_VIEW_RESULTS, ASCII, NOINVERT
END
MyApp.cpp中
#include "MyApp.h"
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInst);
UNREFERENCED_PARAMETER(lpCmdLine);
// Create and show main window, CMainWnd definition is dialog
// resource template, works fine, irrelevant to problem.
MainWnd = new CMainWnd();
MainWnd->Show();
MSG Msg;
HACCEL hAcc;
hAcc = LoadAccelerators(hInst, MAKEINTRESOURCE(ID_MENUACC));
while (GetMessage(&Msg, 0, 0, 0)) {
if (!TranslateAccelerator(Msg.hwnd, hAcc, &Msg)) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
return (int)Msg.wParam;
}
我自己看不到一個很好的理由,爲什麼這不起作用,任何人都可以指出我是什麼錯誤或給我任何建議?
嘗試用MainWnd的HWND成員替換Msg.hwnd。如果這項工作比Msg.hwnd不是獲取消息的正確窗口(在Tanslate Accelerator參數中)。 –
@Edwin完美的工作,謝謝。我知道這一定很簡單。無論如何,你應該張貼作爲答案,所以我可以接受它:) –
完成!很高興它以這種方式發揮作用。 –