GetMessage()関数


BOOL GetMessage(
 LPMSG lpMsg,
 HWND hWnd,
 UINT wMsgFilterMin,
 UINT wMsgFilterMax
);

メッセージキューからメッセージを取得する

lpMsglpMsgに指定したMSG構造体にhWndのメッセージを抽出する
hWndウインドウを特定せず、すべてのメッセージを受け取る場合はNULLを指定
wMsgFilterMin
wMsgFilterMax
取得するメッセージを特定の範囲に限定したい場合に利用するフィルタ
通常は、すべてのメッセージを処理する必要があるので0を指定する

一般的な使用例

while ( GetMessage( &msg, NULL, 0, 0 ) ) {
 TranslateMessage( &msg );
 DispatchMessage( &msg );
}


・GetMessage()関数は処理するメッセージが発生するまで制御を返しません。
・TranslateMessageは、一部のメッセージをプログラムで扱いやすいように変換するAPIです。
・DispatchMessageは、MSG構造体のhwndメンバーを参照して、そのウィンドウ・プロシージャを呼び出すようにWindowsに依頼します。
Windows > メッセージループ | comments (0) | trackbacks (0)

MSG構造体


typedef struct tagMSG {
 HWND hwnd;
 UINT message;
 WPARAM wParam;
 LPARAM lParam;
 DWORD time;
 POINT pt;
} MSG;

MSG構造体は、スレッドのメッセージキューからのメッセージ情報を保持します。

hwndメッセージを受け取るウィンドウプロシージャを持つウィンドウを識別します。
messageメッセージ番号を指定します。
wParamメッセージの付加情報を示します。意味はmessageメンバの値によって特定されます。
lParamメッセージの付加情報を示します。意味はmessageメンバの値によって特定されます。
timeメッセージがポストされた時間を示します。
ptメッセージがポストされたときのカーソル位置を画面座標で示します。


一般的なメッセージはwinuser.hの中で、「WM_」で始まるシンボルとして数百個が定義されています。
メッセージはmessageメンバに格納され、そのパラメータがwParamとlParamメンバに格納されます。
WPARAMとLPARAMは単純な整数型ですが、情報が多い場合は構造体へのポインタをパラメータとすることもあります。
Windows > ウィンドウプロシージャ | comments (0) | trackbacks (0)