2012-04-16 79 views
0

我必須創建一個頁面使用visual studio c + +不同的菜單有快捷鍵(關鍵加速器)。快捷方式應該像我們在Windows記事本中的方式例如。(alt + f for文件,alt + e編輯)等。我想知道如何實現我自己的頁面中的菜單項我自己的Alt鍵快捷鍵。請幫助。用戶定義的頁面菜單的Windows快捷方式

+0

任何鏈接,如果你們都可以提供? – user1335919 2012-04-16 10:22:12

回答

0

首先,您需要在資源文件(* .rc)中定義ACCELERATORS資源。 MSDN docs給出了加速器表的這個例子。

1 ACCELERATORS 
{ 
    "^C", IDDCLEAR   ; control C 
    "K", IDDCLEAR   ; shift K 
    "k", IDDELLIPSE, ALT ; alt k 
    98, IDDRECT, ASCII ; b 
    66, IDDSTAR, ASCII ; B (shift b) 
    "g", IDDRECT   ; g 
    "G", IDDSTAR   ; G (shift G) 
    VK_F1, IDDCLEAR, VIRTKEY    ; F1 
    VK_F1, IDDSTAR, CONTROL, VIRTKEY  ; control F1 
    VK_F1, IDDELLIPSE, SHIFT, VIRTKEY  ; shift F1 
    VK_F1, IDDRECT, ALT, VIRTKEY   ; alt F1 
    VK_F2, IDDCLEAR, ALT, SHIFT, VIRTKEY ; alt shift F2 
    VK_F2, IDDSTAR, CONTROL, SHIFT, VIRTKEY ; ctrl shift F2 
    VK_F2, IDDRECT, ALT, CONTROL, VIRTKEY ; alt control F2 
} 

你會編譯資源文件(RC,微軟的資源編譯器)和鏈接即可* .RES與您的應用程序文件。

接下來,在您的WinMain中,用您的資源表的標識符呼叫LoadAccelerators(請參閱MSDN的語法),以便應用程序有權訪問它。對於上面的表格中,你可以做

HACCEL hAccel = LoadAccelerators(hInstance, 1); 

其中hInstance是應用程序的HINSTANCE,和1是表的標識符。

最後,在消息循環中調用TranslateAccelerator(同樣請參閱MSDN的語法),以便在GetMessage之後能夠處理加速器消息。同樣,在這個例子中,你可以做

TranslateAccelerator(hwnd, hAccel, &msg); 

其中hwnd是你的主窗口的HWNDmsg是你的主窗口中定義的MSG結構。

如果你做這一切正確,你的應用程序收到通過每當加速器事件發生WM_COMMAND消息,該消息的wParam領域將包含被觸發(在IDD*常數的例子中的關鍵事件的標識符表)。