プラットフォーム SDK
TranslateAccelerator
メニューコマンドに対応するアクセラレータキー( ショートカットキー)を処理します。この関数は、 メッセージまたは メッセージを、 メッセージまたは メッセージへ変換し( 指定されたアクセラレータテーブル内に、キーに対応するエントリが存在する場合)、WM_COMMAND または WM_SYSCOMMAND メッセージを、適切なウィンドウプロシージャへ直接送信します。ウィンドウプロシージャがそのメッセージを処理し終わるまで、TranslateAccelerator は制御を返しません。
|
int TranslateAccelerator(
HWND hWnd, // 目的のウィンドウのハンドル
HACCEL hAccTable, // アクセラレータテーブルのハンドル
LPMSG lpMsg // メッセージ情報
); |
パラメータ
- hWnd
- [入力]変換後のメッセージを受け取るウィンドウのハンドルを指定します。
- hAccTable
- [入力]アクセラレータテーブルのハンドルを指定します。アクセラレータテーブルは、LoadAccelerators 関数を使ってロードするか、CreateAcceleratorTable 関数を使って作成しておかなければなりません。
- lpMsg
- [入力]GetMessage または PeekMessage 関数を使って呼び出し側のスレッドのメッセージキューから取得したメッセージ情報を保持する、 構造体へのポインタを指定します。
戻り値
関数が成功すると、0 以外の値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
解説
この関数が送信したメッセージを、メニューまたはコントロールが送信したメッセージとは区別するために、 または メッセージの wParam パラメータの上位ワードは値 1 を保持します。
ユーザーがアクセラレータキーを使って[ウィンドウ]メニュー内の項目を選択した場合、そのアクセラレータキーは WM_SYSCOMMAND メッセージへ変換されます。他のすべてのアクセラレータキーは、WM_COMMAND メッセージへ変換されます。
TranslateAccelerator 関数が 0 以外の値を返し、そのメッセージが変換された場合は、TranslateMessage 関数を使ってそのメッセージをもう一度処理するべきではありません。
すべてのメニュー項目に必ずしもアクセラレータを対応させる必要はありません。
あるメニュー項目にアクセラレータが対応している場合、ユーザーがメニューを表示したときと同様に、 メッセージと メッセージがアプリケーションへ送信されます。ただし、次のいずれかの場合にはこれらのメッセージを送信しません。
•ウィンドウが無効になっているとき
•ウィンドウが最小化されていて、アクセラレータキーが[ウィンドウ]メニューの項目に対応していないとき
•マウスのキャプチャが有効になっているとき。詳細については、SetCapture 関数を参照
指定されたウィンドウがアクティブウィンドウであり、どのウィンドウにもキーボードフォーカスが割り当てられていない場合( 一般的に、ウィンドウが最小化されている場合に該当します)、TranslateAccelerator は WM_KEYUP と WM_KEYDOWN の各メッセージではなく、WM_SYSKEYUP と WM_SYSKEYDOWN の各メッセージを変換します。
あるウィンドウが自らのメニューを最小化しているときは、メニュー項目に対応するアクセラレータキーストロークが発生しても、TranslateAccelerator 関数は WM_COMMAND メッセージを送信しません。しかし、そのウィンドウのメニュー項目にも[ウィンドウ]メニューの項目にも対応するものがないアクセラレータキーストロークが発生したときは、そのウィンドウが最小化されている場合でも、この関数は WM_COMMAND メッセージを送信します。
対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダーファイル:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装
参照
CreateAcceleratorTable, GetMessage, LoadAccelerators, , PeekMessage, SetCapture, TranslateMessage, , , , , ,