- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:APIのメッセージループの流れとTranslateMessage)
APIのメッセージループの流れとTranslateMessage
このQ&Aのポイント
- APIのメッセージループでは、GetMessage関数を利用してメッセージを受信し、TranslateMessage関数でメッセージを変換し、DispatchMessage関数でメッセージを送信します。
- しかし、実際にはWM_KEYDOWNメッセージが先に送信されることがあります。これは、TranslateMessage関数がメッセージを変換する際に、WM_KEYDOWNメッセージをWM_CHARメッセージに変換するためです。
- したがって、WM_KEYDOWNメッセージが先に送信されることがあるのは、TranslateMessage関数の処理によるものであり、思い違いではありません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>TranslateMessageでWM_CHARに変換され TranslateMessageは変換ではなく、新たにWM_CHAR, WM_SYSCHARを作り出してポストします。元のメッセージはそのままです。 そのため、続くDispatchMessageはWM_KEYDOWNで実行されます。 その次のGetMessageでは、キーボードメッセージよりもポストされたメッセージの方が優先順位が高いため、WM_CHARが取り出されることになります。
お礼
なるほど、変換したものをポストするだけだったんですか。 MSDNより >仮想キーメッセージを文字メッセージへ変換します。文字メッセージは、呼び出し側スレッドのメッセージキューにポストされ..... 「変換します」って部分ではまってしまったようです。 ありがとうございました。