MSDN ライブラリ>Windows 開発>C++ による Windows プログラミングの学習>モジュール 1. 初めての Windows プログラム>ウィンドウメッセージ
https://msdn.microsoft.com/ja-jp/library/ff381405(v=vs.85).aspx
GetMessage()
https://msdn.microsoft.com/ja-jp/library/cc364699.aspx
TranslateMessage()
https://msdn.microsoft.com/ja-jp/library/cc364841.aspx
DispatchMessage()
https://msdn.microsoft.com/ja-jp/library/cc410766.aspx
// メッセージ ループを実行する MSG msg = {}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
GUI アプリケーションはユーザーとオペレーティング システムによるさまざまなイベントに応答しなければなりません。
- ユーザーによるイベント:
- オペレーティング システムによるイベント:
マウス クリック、キー操作、タッチスクリーン ジェスチャ,etc…
プログラムの “外部” から行われ、プログラムの動作に影響を与えるすべてのイベント。
ハードウェアデバイスの接続、スリープ、休止状態、etc…
Windows ではオペレーティング システムは、メッセージを用いてアプリケーションとの対話を行います。
ウィンドウを作成するスレッドごとに,メッセージ用のキューが作成されます。
このキューが、そのスレッドで作成されるすべてのウィンドウに向けられるメッセージを保持します。
GetMessage()メソッドで呼び出したスレッドのキューからメッセージを取り出し
DispathMessage()メソッドは、そのメッセージを処理するため、
適切なウィンドウのウィンドウプロシージャを呼び出します。
TransMessage()メソッドはキーボード入力に関連付けられており、これがキー操作 (キーを押す、キーを離す) を文字に変換します。DispatchMessage の直前に呼び出すということだけ覚えておけば、この関数の実際の処理を理解する必要はありません。
GetMessage()はキューにメッセージがなかった場合、メッセージが追加されるまで待機してから
そのメッセージを取り出します、
またメッセージが WM_QUIT の時0を返しwhileループを抜けます
それメッセージの値がそれ以外の時0以外の値を返し、ループが続きます。