WinAPI - 菜单加速器不起作用

WinAPI - Menu accelerators not working

本文关键字:不起作用 加速器 菜单 WinAPI      更新时间:2023-10-16

我正在尝试将加速器添加到我的菜单中,当我按"Ctrl + R"时,它应该ID_VIEW_RESULTS发送命令,但它没有。单击菜单项可以正常工作,但它没有转换加速器,这就是我所拥有的:

我的应用.h

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#define ID_MAINMENU 101
#define ID_MENUACC  102
#define ID_VIEW_RESULTS 2001

我的应用网

#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

我的应用.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;
}

自己看不出这行不通的充分理由,任何人都可以指出我做错了什么或给我任何建议吗?

尝试将 Msg.hwnd 替换为 MainWnd 的 HWND 成员。如果这有效,那么 Msg.hwnd 不是获取消息的正确窗口(在 Tanslate 加速器参数中)。