Visual Studio C++ を使用して、ショートカット (キー アクセラレータ) を持つさまざまなメニューを使用してページを作成する必要があります。ショートカットは、Windows のメモ帳と同じようにする必要があります。ページにあるメニュー項目に独自の alt+key ショートカットを実装する方法を知りたいです。助けてください。
1 に答える
まず、リソース ファイル (*.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
はテーブルの識別子です。HINSTANCE
1
最後に、アクセラレータ メッセージを処理できるようにするために、メッセージ ループ内で を呼び出します (構文については、 MSDNTranslateAccelerator
を参照してください)。繰り返しますが、この例では、次のことができます。GetMessage
TranslateAccelerator(hwnd, hAccel, &msg);
はメイン ウィンドウの であり、メイン ウィンドウhwnd
に対して定義された構造です。HWND
msg
MSG
これらすべてを正しく行うと、アプリケーションはアクセラレータ イベントが発生するたびに WM_COMMAND を介してメッセージを受信し、メッセージのwParam
フィールドにはトリガーされたキー イベントの識別子 (IDD*
例の表の定数) が含まれます。