なぜ、「TranslateMessage」と「DispatchMessage」を分けて呼び出すのですか

メッセージループで重要な 2 つの関数が TranslateMessage と DispatchMessage です。

TranslateMessage関数はキーボード入力メッセージを翻訳し、キーボードメッセージを文字メッセージに変換します。ユーザーがキーボード上のキーを押すと、オペレーティングシステムはキーボード入力メッセージを生成し、TranslateMessage関数はこれらのメッセージを、プログラムが処理しやすい文字メッセージに変換します。

DispatchMessage 関数は、メッセージをウィンドウプロシージャ関数に送って処理を委譲します。ウィンドウプロシージャ関数は、プログラムで定義される、ウィンドウメッセージの処理を行う関数で、DispatchMessage 関数を呼び出すことでメッセージをウィンドウプロシージャ関数に委譲して処理を行います。

TranslateMessageとDispatchMessageが別個に呼び出される理由は、メッセージループ中の位置が異なるためである。

メッセージループでは、まずGetMessageでメッセージを取得し、TranslateMessageでメッセージの変換を行い、DispatchMessageでウィンドウプロシージャにメッセージをディスパッチする。

TranslateMessageとDispatchMessageを分離して呼び出すことで、メッセージの処理をより詳細に制御することができます。TranslateMessageでは、キーボード入力メッセージを文字メッセージに変換し、DispatchMessageでは、メッセージをウインドウプロシージャに送信して処理させます。このような分離により、特定のメッセージのみを翻訳したり、特定のメッセージのみをウインドウプロシージャに送信したりするなど、より柔軟にメッセージを処理できます。

メッセージ処理の順番としては、TranslateMessageが先に呼ばれて、キーボード入力メッセージを文字メッセージに変換し、その後DispatchMessageが呼ばれて、メッセージをウィンドウプロシジャ関数に処理させます。この順番によって、メッセージの正しい処理が保証されます。

コメントを残す 0

Your email address will not be published. Required fields are marked *


广告
広告は10秒後に閉じます。
bannerAds