WM_PAINT

WM_PAINTは、画面の描画を要求された時に発生するウィンドウメッセージ・・・。

WM_PAINT message (Windows)

これまでは、WM_LBUTTONDOWNなどのイベントが発生したときに、そこで直接デバイスコンテキストを取得し、テキストやドット(点)などを描画してきた・・・。しかし、本来は、画面の再描画に対応するため、グラフィック処理はWM_PAINTでやるのが原則・・・。

WM_PAINTが発生したとき、画面を描画した回数を表示する・・・。

iCountは、ボタンが押された~、ではなく、画面が描画された回数・・・。つまり、WM_PAINTが発生した回数・・・。

WM_CREATEとWM_DESTROYからは、デバイスコンテキストの処理は消して、

WM_PAINTのとき、デバイスコンテキストを取得して、iCountを増やして、iCountをTextOutで描画、最後に解放・・・。

ではWM_PAINTが発生するときとはどういうときだろう・・・。
WM_PAINTは、ウィンドウのクライアント領域の一部が無効領域になった時(描画情報が消えたり、変更された時)に発生する・・・。
たとえば、

  1. そのウィンドウが画面外に出たり
  2. 他のウィンドウで隠れたり
  3. サイズが変更されたり

こんなときに発生する・・・。
(ただし、Windows7などDesktop Window Manager(DWM)を使うOSの場合は、他のウィンドウで隠されてもWM_PAINTが発生しない・・・。)

実行してみると、

f:id:BG1:20150325131434p:plain

"~ times painted!"の数値が1になっている・・・。
表示時に1回呼ばれる分・・・。

ウィンドウを画面外に追いやってから、戻してみると、

f:id:BG1:20150325131656p:plain

戻ってくるときに1~数ドット動くたびに再描画されるので、その回数だけ増える・・・。
かなり増えてる・・・。

最大化などをしても増えると思うので試してみるといい・・・。

[C#] Update Refresh Invalidate の画面更新について (Windows7)
Desktop Window Manager - Wikipedia

Sample/WM_PAINT.cpp at master · bg1bgst333/Sample · GitHub