3

メニューにアクセラレータを追加しようとしています。「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;
}

私自身、これがうまくいかない理由がわかりません。誰かが私が間違っていることを指摘したり、何か提案をしたりできますか?

4

1 に答える 1

2

Msg.hwndをMainWndのHWNDメンバーに置き換えてみてください。それが機能する場合、Msg.hwndは、メッセージを取得する適切なウィンドウではありません(Tanslate Acceleratorパラメーター内)。

于 2012-10-11T21:49:51.713 に答える