2

WM_PAINT メッセージを処理するときに、BeginPaint と EndPaint の呼び出しを省略したところ、CPU 使用率が 100% まで跳ね上がりました。どうしてこれなの?

私もワーカースレッドを使用しています...しかし、それらは何か違うことをしており、この問題には影響を与えていないようです。

また、BeginPaint ではなく GetDC() からデバイス コンテキストを使用できますか? 価値観が違うようで、仕事も違うと思いました。

私がばかのように聞こえる場合は申し訳ありません-私はWinAPI、C ++、および一般的なロジックの世界に慣れていません...

ありがとう

4

3 に答える 3

1

GDI は WM_PAINT メッセージを発行して、ウィンドウの一部を更新します。BeginPaint/EndPaint()ハンドラーがそのジョブを実行していることを gdi に通知します。指定された領域の BeginPaint() がない場合、ウィンドウが (誰かによって) 更新されるまで、WM_PAINT メッセージが生成されます。これが WM_PAINT ハンドラーで必要な理由でありBeginPaint/EndPaint() 、それがないと CPU 使用率が高くなります。

前の段落で述べた理由により、GetDC() は Begin+EndPaint() の代わりにはなりません。

于 2014-01-25T18:27:01.540 に答える