2012-10-11 14 views
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; 
} 

我自己看不到一個很好的理由,爲什麼這不起作用,任何人都可以指出我是什麼錯誤或給我任何建議?

+1

嘗試用MainWnd的HWND成員替換Msg.hwnd。如果這項工作比Msg.hwnd不是獲取消息的正確窗口(在Tanslate Accelerator參數中)。 –

+0

@Edwin完美的工作,謝謝。我知道這一定很簡單。無論如何,你應該張貼作爲答案,所以我可以接受它:) –

+0

完成!很高興它以這種方式發揮作用。 –

回答

1

嘗試用MainWnd的HWND成員替換Msg.hwnd。如果這項工作比Msg.hwnd不是獲取消息的正確窗口(在Tanslate Accelerator參數中)。