WinAPI — не работают ускорители меню

Я пытаюсь добавить ускорители в мое меню, когда я нажимаю ‘Ctrl + R’, он должен отправить команду ID_VIEW_RESULTSНо это не так. Он отлично работает при нажатии на пункт меню, но не переводит ускоритель, вот что у меня есть:

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;
}

Я сам не вижу веской причины, почему это не сработает, кто-нибудь может указать, что я делаю неправильно, или дать мне какие-либо предложения?

3

Решение

Попробуйте заменить Msg.hwnd на HWND члена MainWnd. Если это работает, Msg.hwnd не является тем окном, которое получает сообщение (в параметрах Tanslate Accelerator).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]