4

MSDN ドキュメントから:

このBeginPaint関数は、クライアント領域全体を検証します。

次の WM_PAINT メッセージが生成される前に、更新領域の一部を検証する必要がある場合は、このValidateRect関数を呼び出してはなりません。1

私は何年も Win32 API を使ってプログラミングしてきましたが、ValidateRect関数を呼び出すことは考えたこともありませんでした。今日、私の同僚は、 への呼び出しが欠落していることを指摘しましたValidateRect。これにより、GDI を使用して高速アニメーションを実行していたときに発生していたバグが修正されました (矛盾した表現です)。

/ペアValidateRectの後にへの呼び出しが必要かどうか教えてもらえますか? MSDN でこれを明らかにするドキュメントを見たことがありません。また、呼び出しが不要であることを示唆しているドキュメントや例はあります。BeginPaintEndPaintValidateRect

4

1 に答える 1

3

それは必要はありません。BeginPaintで処理(ペイント)したため、領域を検証するときに使用されますWM_PAINT

ValidateRectこれは「無効化をキャンセル」することであり、通常、何かが変更されていないWM_PAINTか、何かが変更されて保留中のが発行されたくないために、ウィンドウに直接ペイントした後ですWM_PAINT

バグを修正したという事実は、何か他のことが起こっていることを意味している可能性があり、これは誤って修正した(おそらくWM_PAINTメッセージの数を減らすことによって?)、または間違った観察(たとえば、2つのものを変更したが、これはその他は実際の修正です)。

于 2012-08-27T21:36:04.983 に答える