Win32 APIのWM_PAINTが発行されるのはどんなとき??

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
notebook

Win32 APIのWM_PAINTが発行されるのはどんなとき??

#1

投稿記事 by notebook » 9年前

ウインドプロシージャにcase WM_PAINT:
hdc = GetDC(hwnd);
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr));
ReleaseDC(hwnd , hdc);
return 0;
をかいただけで

プログラムを実行したら普通に文字列が描画されました

ボタンを押したときなどのイベントではなく勝手にWM_PAINTが発行されたのでなぜナノかなと思っています。
何故なんでしょうか?

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: Win32 APIのWM_PAINTが発行されるのはどんなとき??

#2

投稿記事 by YuO » 9年前

notebook さんが書きました:ボタンを押したときなどのイベントではなく勝手にWM_PAINTが発行されたのでなぜナノかなと思っています。
see) When to Draw in a Window (Windows)
ボタンを押してもWM_PAINTは発生しませんが,初回のウィンドウ表示時などの時は必ずWM_PAINTが発生します。

なお,WM_PAINTの応答ハンドラでは,HDCを取得するために通常GetDCではなくBeginPaintを使います。
BeginPaintの場合,InvalidateRectやValidateRectによって,最終的に「無効化された」となっている領域だけを描画できます。
逆に,無効化されていない領域への描画は無視されます。
オフトピック
MSDNではBeginPaint使う,とは書いてあるものの,GetDC使うなと書いてはなかった

notebook

Re: Win32 APIのWM_PAINTが発行されるのはどんなとき??

#3

投稿記事 by notebook » 9年前

YuOさんご親切にありがとうございます。

hdc = GetDC(hwnd);
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr));
ReleaseDC(hwnd , hdc);
return 0;

だと画面外に移動しても消えないってことは
GetDC(hwnd)もBeginPaintも再描画関数って事でいいですか?

でもGetDCを使った場合キューにメッセージが送られ続けることになるそうですが
これが原因でメモリリークとか生じたりするんでしょうか?

動いてしまうがゆえに何も知らないと内部で大変なことが生じてると思ったら怖いですね…

閉鎖

“C言語何でも質問掲示板” へ戻る