ウインドプロシージャにcase WM_PAINT:
hdc = GetDC(hwnd);
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr));
ReleaseDC(hwnd , hdc);
return 0;
をかいただけで
プログラムを実行したら普通に文字列が描画されました
ボタンを押したときなどのイベントではなく勝手にWM_PAINTが発行されたのでなぜナノかなと思っています。
何故なんでしょうか?
Win32 APIのWM_PAINTが発行されるのはどんなとき??
Re: Win32 APIのWM_PAINTが発行されるのはどんなとき??
see) When to Draw in a Window (Windows)notebook さんが書きました:ボタンを押したときなどのイベントではなく勝手にWM_PAINTが発行されたのでなぜナノかなと思っています。
ボタンを押してもWM_PAINTは発生しませんが,初回のウィンドウ表示時などの時は必ずWM_PAINTが発生します。
なお,WM_PAINTの応答ハンドラでは,HDCを取得するために通常GetDCではなくBeginPaintを使います。
BeginPaintの場合,InvalidateRectやValidateRectによって,最終的に「無効化された」となっている領域だけを描画できます。
逆に,無効化されていない領域への描画は無視されます。
オフトピック
MSDNではBeginPaint使う,とは書いてあるものの,GetDC使うなと書いてはなかった
Re: Win32 APIのWM_PAINTが発行されるのはどんなとき??
YuOさんご親切にありがとうございます。
hdc = GetDC(hwnd);
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr));
ReleaseDC(hwnd , hdc);
return 0;
だと画面外に移動しても消えないってことは
GetDC(hwnd)もBeginPaintも再描画関数って事でいいですか?
でもGetDCを使った場合キューにメッセージが送られ続けることになるそうですが
これが原因でメモリリークとか生じたりするんでしょうか?
動いてしまうがゆえに何も知らないと内部で大変なことが生じてると思ったら怖いですね…
hdc = GetDC(hwnd);
TextOut(hdc , 10 , 10 , lptStr , lstrlen(lptStr));
ReleaseDC(hwnd , hdc);
return 0;
だと画面外に移動しても消えないってことは
GetDC(hwnd)もBeginPaintも再描画関数って事でいいですか?
でもGetDCを使った場合キューにメッセージが送られ続けることになるそうですが
これが原因でメモリリークとか生じたりするんでしょうか?
動いてしまうがゆえに何も知らないと内部で大変なことが生じてると思ったら怖いですね…