9

GetDC / ReleaseDCを使用して、ウィンドウのクライアント領域に描画できます。ただし、WM_PAINTメッセージに応答して、BeginPaint/EndPaintを使用する必要があります。これについて何か特別なことはありますか?

4

3 に答える 3

9

ウィンドウの一部を更新する必要がある場合は、WM_PAINTメッセージが発行されます。BeginPaint / EndPaint()を指定することにより、実際にその仕事をしていることをgdiに伝えます。指定されたリージョンに対してBeginPaint()を呼び出さない場合、誰かが実際に更新するまで、WM_PAINTメッセージが生成されます。この機能は、便利だからといってDCを提供します。内部的にBeginPaint()/ EndPaint()はおそらくGetDC()/ ReleaseDC()を呼び出します。

GetDCおよびReleaseDCとは対照的に、gdiが要求することなく、DCに何かをペイントしようとしていることをGDIに伝えています

于 2011-08-13T18:29:20.673 に答える
6

はい、確かに。BeginPaint()は更新領域を取得し、自動的にそれを再び空にします。GetDC()を使用すると、更新領域がクリアされなかったため、プログラムが100%CPUコアを書き込み、WM_PAINTハンドラーを繰り返し実行していることに気付くでしょう。これを回避するには、ValidateRect()を呼び出す必要があります。

于 2011-08-13T18:27:53.730 に答える
5

BeginPaint関数は、デバイスコンテキストのクリッピング領域を自動的に設定するため、ウィンドウの一部のみを再描画する必要がある場合でも、ウィンドウ全体が再描画されることはありません。

于 2011-08-13T18:26:25.477 に答える