LockWindowUpdate関数のバグ

画面のちらつきを抑えるために、処理前後に入れる描画停止命令に『LockWindowUpdate』というのがあるのですが

BUG in LockWindowUpdate & UnlockWindowUpdate [MFC]

LockWindowUpdate を解除すると、WM_PAINT を 全デスクトップウィンドウに送信してしまって画面がちらついてしまうそうです。

そういえば、昔悩んだことがあったなぁ

これを回避するには、 WM_SETREDRAW を呼んで、そのあとに InvalidateRect を呼んであげるしかないようです。(Windows XPより前のOSにも対応させる場合)
Vista以降であれば、 TVS_EX_DOUBLEBUFFER なんてスタイルもあるんですね。

XP以降だったら、WS_EX_COMPOSITED でもできるんですが、GDI+や DirectX周りでバグがあって使い物にならないとかいう話も。

Vistaの描画が重いのは、全部ダブルバッファ処理してるからかな|;・ω・)?

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です