プログラムでの 流れ – プログラミング – Home

通知
すべてクリア

[解決済] プログラムでの 流れ


namuko
 namuko
(@namuko)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

以下のプログラム流れを教えて頂きたいのですが
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{
/* 独自の処理 */

}
}


引用未解決
トピックタグ
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

>PeekMessage()の0 が返った時の処理はいつ行われるか

知らん。
Windowsの仕様(改良により動作が変わるかもしれない)や、
そのときの負荷によって変わるんじゃないの。

俺はMFCつかうからWM_TIMERをつかう。

>1 CreateWindow();が呼び出された時
> WM_CREATEがメッセージキューに入り
>3 DispatchMessage()でWM_CREATEをウインドウプロシージャへ送る

全てのメッセージがキューに入るわけではない。

ループの部分は説明するまでもないので略。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

> 2 GetMessage (&msg,NULL,0,0)で WM_CREATEを,MSG構造体に入れる

GetMessageが呼ばれる時には、WndProc()で、WM_CREATEの処理が終わっている。
(WM_CREATEより前の処理もある)

> PeekMessage()の0 が返った時の処理はいつ行われるか知りたいのですが
> 以下の流れで合ってるか教えてください。

いつ独自の処理が呼ばれるかということなら、
手が開いたときにいつでも、という理解で良いかと。
DirectX等のメッセージループがよくこういう形をしています。

ユーザーの入力やOSの都合などによるメッセージを優先的に処理して、
それらがない場合は、常に画面の更新を行う、とか。


返信引用
namuko
 namuko
(@namuko)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

お二方回答ありがとうございます!

WM_CREATEについて教えていただきありがとうございます。
解っているつもりでしたが,解ってないみたいですね。

どうもありがとうございました。


返信引用
namuko
 namuko
(@namuko)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

解決


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました