「メッセージループ」を理解しようとしています。これはそれがどのように見えるかです:
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
これまでのところ、コンセプトは明確です(少なくともそう願っています)。ユーザーがキーボードとマウスを使用してWindowsアプリケーションを操作すると、これらのイベントはそれぞれのデバイスドライバーによって適切なメッセージに変換され、システムメッセージキューに投稿されます。
OSは、メッセージを1つずつキューから削除し、各メッセージを調べて、宛先ウィンドウの作成を担当するそれぞれのアプリケーションのスレッドのキューにメッセージを送信します。
今私のアプリケーションで
MSG msg;
GetMessage(&msg, NULL, 0, 0);
スレッド固有のメッセージキューからメッセージを削除し、MSG構造を埋めます。
ただしTranslateMessage
、仮想キーストロークを文字に変換し、呼び出し元のスレッドのメッセージキューにポストバックすると言われています。
DispatchMessage
適切なターゲットウィンドウのWindowsプロシージャを呼び出すようにOSに指示します。
2つの疑問:
1)TranslateMessageの正確な機能は何ですか;仮想キーストロークを文字メッセージに変換するだけです(仮想キーストロークはアルファベットと数字以外のキーストロークであると想定しています)、文字メッセージがキューにポストバックされた場合、ループは壊れていません?
2)マウスイベントはどうですか?直接ディスパッチされますか?