BOOL PeekMessage(LPMSG lpMsg, HWND hWnd,
UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg);
(*)アイドル状態で何もしてないときには0を返す⇒ バッググラウンド処理ができます
BOOL GetMessage(LPMSG lpMsg, HWND hWnd,
UINT wMsgFilterMin, UINT wMsgFilterMax);
(*) 終了時のWM_QUIT(その他のよく使うメッセージ)を受け取ると0を返します⇒終了します。
- lpMsg:メッセージを受け取るためのMSG構造体のアドレス(Pointer)を指定
- hWnd:CreateWindow関数から返された値
- wMsgFilterMin: 処理するメッセージの最初の値(WM_で始まる)
- wMsgFilterMax: 処理するメッセージの最後の値(WM_で始まる)
- wRemoveMsg:
受け取ったメッセ−ジをどうするの?
- PM_NOREMOVE
メッセージが着たことを確認するのみ.
- PM_REMOVE
着いたメッセージ゙を消してしまいます
wMsgFilterMin=wMsgFilterMax=0の時はすべてのメッセージを処理する |
メッセージをウィンドウズへ送信するために、自分でそのメッセージ処理機能をつけないといけません。
通常の定型処理
while(GetMessage(&msg, NULL,
0, 0)){ |
|
TranslateMessage(&msg); |
|
DispatchMessage(&msg); |
} |
ModelessDialog(CreateDialogで作成します)のある場合
while(GetMessage(&msg, NULL,
0, 0)){ |
|
if(!IsDialogMessage(本体に行ったりダイアログに行ったりできるダイアログModeless
Dialogのウィンドウズハンドル, &msg ) |
|
|
TranslateMessage(&msg); |
|
|
DispatchMessage(&msg); |
|
} |
} |
バックグランド処理がある場合の例
while(1){ |
|
if(バックグランド処理){ |
|
|
if(!PeekMessage(&msg, NULL,
0, 0, PM_NOREMOVE)){ |
|
|
|
if(msg.message == WM_QUIT){ |
|
|
|
|
break; |
|
|
|
} |
|
|
} |
|
|
|
else{ |
|
|
|
バックグランド処理をします |
|
|
} |
|
} |
|
else{ |
|
|
if(GetMessage(&msg, _ZERO,
_ZERO, _ZERO)){ |
|
|
|
if(!IsDialogMessage(本体に行ったりダイアログに行ったりできるダイアログModeless
DialogのWindowHandle , &msg ) //Modeless Dialogの無い場合はこの部分はいらない |
|
|
|
|
TranslateMessage(&msg); |
|
|
|
|
DispatchMessage(&msg); |
|
|
|
} //Modeless Dialogの無い場合はこの部分はいらない |
|
|
} |
|
|
else{ |
|
|
|
break; |
|
|
} |
|
} |
} |
|