WM_CHAR メッセージ
WM_KEYDOWN メッセージが TranslateMessage 関数によって翻訳されると、キーボード フォーカスでウィンドウにポストされます。 WM_CHAR メッセージには、押されたキーの文字コードが含まれています。
#define WM_CHAR 0x0102
パラメーター
-
wParam
-
キーの文字コード。
-
lParam
-
次の表に示すように、繰り返し回数、スキャン コード、拡張キー フラグ、コンテキスト コード、前のキー状態フラグ、および遷移状態フラグ。
Bits 説明 0-15 現在のメッセージの繰り返し数。 この値は、ユーザーがキーを押した結果としてキーストロークが自動反復される回数です。 キーストロークが十分に長く保持されている場合は、複数のメッセージが送信されます。 ただし、繰り返し数は累積されません。 16-23 スキャン コード。 値は OEM によって異なります。 24 拡張 101 キーまたは 102 キー キーボードに表示される右側の Alt キーや Ctrl キーなど、キーが拡張キーかどうかを示します。 拡張キーの場合、値は 1 です。それ以外の場合は 0 です。 25-28 予約済み。使用しないでください。 29 コンテキスト コード。 Alt キーを押しながら押すと、値は 1 になります。それ以外の場合、値は 0 です。 30 前のキーの状態。 メッセージが送信される前にキーがダウンしている場合は値 1、キーが稼働している場合は 0 です。 31 遷移状態。 キーが解放されている場合は値 1、キーが押されている場合は 0 です。 詳細については、「 キーストローク メッセージ フラグ」を参照してください。
戻り値
このメッセージを処理する場合、アプリケーションは 0 を返す必要があります。
例
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
// ...
case WM_CHAR:
OnKeyPress(wParam);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
GitHub の Windows クラシック サンプル の例。
注釈
ウィンドウ クラスの登録に Unicode バージョンの RegisterClass 関数を使用した場合、WM_CHAR メッセージは wParam で UTF-16 (16 ビット Unicode 変換形式) コード単位を使用します。 それ以外の場合、システムは現在のプロセス コード ページに文字を提供します。これは、Windows バージョン 1903 (2019 年 5 月の更新プログラム) 以降で UTF-8 に設定できます。 詳細については、「Windows アプリ でのウィンドウ クラスの登録 」および 「UTF-8 コード ページの使用」を参照してください。
Windows Vista 以降では、 WM_CHAR メッセージは UTF-16 サロゲート ペアを Unicode ウィンドウに送信できます。 IS_HIGH_SURROGATE、IS_LOW_SURROGATE、IS_SURROGATE_PAIRのマクロを使用して、必要に応じてこのようなケースを検出します。
押されたキーと生成される文字メッセージの間には必ずしも一対一の対応があるわけではないため、 lParam パラメーターの上位ワードの情報は、一般にアプリケーションには役立ちません。 上位の単語の情報は、 WM_CHAR メッセージの投稿の前にある最新の WM_KEYDOWN メッセージにのみ適用されます。
拡張された 101 キーキーボードと 102 キーキーボードの場合、拡張キーはキーボードのメインセクションで右 Alt キーと右 Ctrl キーです。テンキーの左側にあるクラスター内の INS、DEL、HOME、END、PAGE UP、PAGE DOWN、Arrow キー。テンキーの除算 (/) キーと ENTER キーを使用します。 他の一部のキーボードでは、 lParam パラメーターで拡張キー ビットがサポートされている場合があります。
WM_UNICHAR メッセージは、UTF-32 を使用する点を除き、WM_CHARと同じです。 UNICODE 文字を ANSI ウィンドウに送信またはポストするように設計されており、Unicode 補助プレーン文字を処理できます。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows 2000 Server [デスクトップ アプリのみ] |
ヘッダー |
|