CWnd::OnSysKeyDown
CWnd オブジェクトが入力フォーカスを持っている場合に、ユーザーが Alt キーを押した状態でほかのキーを押すと、フレームワークから OnSysKeyDown メンバー関数が呼び出されます。
afx_msg void OnSysKeyDown(
UINT nChar,
UINT nRepCnt,
UINT nFlags
);
パラメーター
nChar
押されているキーの仮想キー コードを指定します。 標準の仮想キー コードの一覧については、Winuser.h を参照してください。nRepCnt
繰り返し回数を指定します。nFlags
次に示すスキャン コード、キー変換コード、直前のキー状態、およびコンテキスト コードを指定します。値
説明
0–7
スキャン コード (OEM 依存の値)。 上位ワードの下位バイト。
8
ファンクション キーなどの拡張キーまたはテンキー上のキーなど (拡張キーの場合は 1、それ以外の場合は 0)。
9–10
使用しません。
11–12
Windows 内部で使用します。
13
コンテキスト コード (Alt キーを押した状態でほかのキーを押した場合は 1、それ以外の場合は 0)
14
直前のキー状態 (メッセージが送られる前にキーを押した場合は 1、離した場合は 0)
15
変換状態 (キーが離されている場合は 1、押されている場合は 0)。
OnSysKeyDown 関数では、キー変換ビット (ビット 15) は 0 で呼び出されます。 コンテキスト コード ビット (ビット 13) は、Alt キーが押されている状態で他のキーが押された場合は 1、入力フォーカスを持つウィンドウがないためアクティブ ウィンドウにメッセージが送られた場合は 0 になります。
解説
現在入力フォーカスを持つウィンドウがない場合は、アクティブなウィンドウの OnSysKeyDown メンバー関数が呼び出されます。 このメッセージを受け取った CWnd オブジェクトは、nFlags のコンテキスト コードを調べることで、どちらのコンテキストかを区別できます。
コンテキスト コードが 0 の場合、OnSysKeyDown が受け取った WM_SYSKEYDOWN メッセージを TranslateAccelerator Windows 関数に渡すことができます。この関数は、システム キー メッセージを通常のキー メッセージのように処理します。 これによって、アクティブ ウィンドウが入力フォーカスを持っていない場合でも、アクティブ ウィンドウでアクセラレータ キーを使用できるようになります。
オートリピート機能により、WM_SYSKEYUP メッセージを受け取る前に、複数回の OnSysKeyDown 呼び出しが発生することがあります。 直前のキー状態を示すビット (ビット 14) を使って、OnSysKeyDown が最初に押されたことによるものか、連続して押されたことによるものかを調べることができます。
IBM の 101 キーまたは 102 キーの拡張キーボードで拡張されたキーは、キーボードのメイン セクションの右 Alt キーと右 Ctrl キー、テンキーの左にある Ins キー、Del キー、Home キー、End キー、PageUp キー、PageDown キー、方向キー、およびテンキーのスラッシュ (/) キーと Enter キーです。 ほかのキーボードでは、nFlags の拡張キー ビットで拡張キーをサポートすることがあります。
注意
このメンバー関数は、アプリケーションが Windows メッセージを処理できるようにするためにフレームワークによって呼び出されます。 この関数に渡されるパラメーターの値は、フレームワークがメッセージ受信時に受け取ったパラメーターの値に基づいています。 この関数の基本クラスの実装を呼び出した場合は、関数に渡したパラメーターではなく、メッセージと共に渡されたパラメーター自体が使用されます。
必要条件
**ヘッダー:**afxwin.h