我正在尝试将加速器添加到菜单中,当我按“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;
}
我本人看不出为什么这行不通的充分理由,有人能指出我做错了什么还是给我任何建议吗?
最佳答案
尝试用MainWnd的HWND成员替换Msg.hwnd。如果那比Msg.hwnd有效,则不是获取消息的正确窗口(在Tanslate Accelerator参数中)。
关于c++ - WinAPI-菜单加速器不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12848500/