0

Visual Studio C++ を使用して、ショートカット (キー アクセラレータ) を持つさまざまなメニューを使用してページを作成する必要があります。ショートカットは、Windows のメモ帳と同じようにする必要があります。ページにあるメニュー項目に独自の alt+key ショートカットを実装する方法を知りたいです。助けてください。

4

1 に答える 1

0

まず、リソース ファイル (*.rc) で ACCELERATORS リソースを定義する必要があります。MSDN ドキュメントには、アクセラレータ テーブルのこの例が示されています。

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
}

リソース ファイルを (Microsoft リソース コンパイラである RC を使用して) コンパイルし、結果の *.res ファイルをアプリケーションにリンクします。

次に、アプリケーションがリソース テーブルにアクセスできるように、リソース テーブルの識別子を使用して をWinMain呼び出しますLoadAccelerators(構文についてはMSDNを参照してください)。上の表の場合、次のことができます

HACCEL hAccel = LoadAccelerators(hInstance, 1);

はアプリケーションの で、hInstanceはテーブルの識別子です。HINSTANCE1

最後に、アクセラレータ メッセージを処理できるようにするために、メッセージ ループ内で を呼び出します (構文については、 MSDNTranslateAcceleratorを参照してください)。繰り返しますが、この例では、次のことができます。GetMessage

TranslateAccelerator(hwnd, hAccel, &msg);

はメイン ウィンドウの であり、メイン ウィンドウhwndに対して定義された構造です。HWNDmsgMSG

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

于 2012-08-08T22:01:11.513 に答える