2012-04-16 5 views
0

ショートカット(キーアクセラレータ)を持つさまざまなメニューを使ってビジュアルスタジオのC++を使用してページを作成する必要があります。ショートカットはWindowsのメモ帳などのようにする必要があります(alt + fファイル、alt + eを編集するなど)。私は自分のページにあるメニュー項目のために自分のalt +キーのショートカットを実装する方法を知りたい。助けてください。ユーザー定義のWindowsのショートカットをページに表示

+0

もしあなたがすべてのリンクを提供できれば、どんなリンク? – user1335919

答えて

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で、あなたのリソーステーブルの識別子(構文についてはMSDNを参照)LoadAcceleratorsを呼び出します。 hInstanceは、アプリケーションのHINSTANCEで、1は、テーブルの識別子です上記の表について、あなたは

HACCEL hAccel = LoadAccelerators(hInstance, 1); 

を行うことができます。

最後に、GetMessageの後にメッセージループのTranslateAccelerator(構文についてはMSDNを参照)を呼び出して、アクセラレータメッセージを処理できるようにします。繰り返しますが、この例では、あなたはhwndがあなたのメインウィンドウのHWNDあるとmsgがあなたのメインウィンドウのために定義されMSG構造である

TranslateAccelerator(hwnd, hAccel, &msg); 

を行うことができます。

あなたがすべて正しくこれを行う場合は、アクセルイベントが発生するたびに、アプリケーションがWM_COMMAND経由でメッセージを受信すると、メッセージのwParamフィールドは例のトリガされたキーイベント(IDD*定数の識別子が含まれています表)。

関連する問題