以下のプログラム流れを教えて頂きたいのですが
PeekMessage()の0 が返った時の処理はいつ行われるか知りたいのですが
以下の流れで合ってるか教えてください。
よろしくお願いいたします。
1 CreateWindow();が呼び出された時
WM_CREATEがメッセージキューに入り
2 GetMessage (&msg,NULL,0,0)で WM_CREATEを,MSG構造体に入れる
3 DispatchMessage()でWM_CREATEをウインドウプロシージャへ送る
4 ウインドウプロシージャでWM_CREATEが実行 while()の先頭に返る
5 PeekMessage()でWM_PAINTをキャッチ,GetMessage(),Dispatchを行う。
5 ウインドウプロシージャでWM_PAINTが実行 while()の先頭に返る
6 何のメッセージもない時初めてPeekMessage()が呼ばれる。
LRESULT CALLBACK WndProc() {
switch (msg) {
case WM_CREATE:
case WM_PAINT:
}
return DefWindowProc(hWnd , msg , wp , lp);
}
int WINAPI WinMain(){
WNDCLASS設定
CreateWindow();
while (1) {
if (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)) {
if (!GetMessage (&msg,NULL,0,0))
return msg.wParam ;
TranslateMessage(&msg);
DispatchMessage(&msg);
} else{
/* 独自の処理 */
}
}
>PeekMessage()の0 が返った時の処理はいつ行われるか
知らん。
Windowsの仕様(改良により動作が変わるかもしれない)や、
そのときの負荷によって変わるんじゃないの。
俺はMFCつかうからWM_TIMERをつかう。
>1 CreateWindow();が呼び出された時
> WM_CREATEがメッセージキューに入り
>3 DispatchMessage()でWM_CREATEをウインドウプロシージャへ送る
全てのメッセージがキューに入るわけではない。
ループの部分は説明するまでもないので略。
> 2 GetMessage (&msg,NULL,0,0)で WM_CREATEを,MSG構造体に入れる
GetMessageが呼ばれる時には、WndProc()で、WM_CREATEの処理が終わっている。
(WM_CREATEより前の処理もある)
> PeekMessage()の0 が返った時の処理はいつ行われるか知りたいのですが
> 以下の流れで合ってるか教えてください。
いつ独自の処理が呼ばれるかということなら、
手が開いたときにいつでも、という理解で良いかと。
DirectX等のメッセージループがよくこういう形をしています。
ユーザーの入力やOSの都合などによるメッセージを優先的に処理して、
それらがない場合は、常に画面の更新を行う、とか。
お二方回答ありがとうございます!
WM_CREATEについて教えていただきありがとうございます。
解っているつもりでしたが,解ってないみたいですね。
どうもありがとうございました。
解決