2011-06-30 11 views
2

私のコードでは、.Invalidateを呼び出すだけで、更新が呼び出されたときと同じことが行われます。実際、私が.Updateを呼び出すと、コントロールのフリッカーが悪化しているようです。私は、ドキュメントページ上で、次をお読みください。無効にした後、.NET Control.Updateメソッドが必要ですか?

、これは無効化された地域を指定することを教え再描画のすべてのオンラインの例として私のために混乱している

を「Updateメソッドは、ちょうどすぐに塗装する制御を強制的に」フリッカーの量を最小限に抑えるために更新を呼び出します。これらの例に基づいて、私は更新呼び出しが必須であると仮定します。

答えて

3

このブログの記事は

ブールパラメータは ユーザーが子供に上のコントロールの コントロールを無効にしたいかどうかを示し違いbetween Control.Invalidate and Control.Update

Control.Invalidate(...)を記述する彼は を呼び出しています。矩形 は、 を無効にする境界であり、領域パラメータは、無効にする領域 です。すべてのオーバーロード は、本来、 RedrawWindow、InvaliateRectまたは InvalidateRgn関数のいずれかを呼び出すことになります。 RedrawWindowが呼び出された場合、 は、アプリケーションメッセージ キュー( コントロールを無効にする)に投稿された というWM_PAINTメッセージになります。

ここで注意すべき重要なことは、これらの機能は、制御のみの ウィンドウの現在の更新領域に それを追加することにより、 または「ダーティ」クライアント領域を「無効」という です。この 無効領域は、更新領域の その他の領域とともに、 WM_PAINTメッセージを受信したときに塗りつぶしのために と表示されます。 の結果、すぐに のコントロールが表示されなくなり( の無効化が表示される)、または が同期して表示されないことがあります。

Control.Update()ウィンドウの更新領域場合

Update関数が(コントロールの)ウィンドウにWM_PAINT メッセージを送信することによって、クライアント領域制御の を更新UpdateWindow 機能 を呼び出します は空ではありません。この関数は、 アプリケーションメッセージキューをバイパスして、WM_PAINT を直接WNDPROC()に送信します。従って、 ウィンドウ更新領域が以前に である場合、 "無効化"された場合、 "更新" を呼び出すと、即座に "更新"され、無効化が行われる( が再描画される)。

Control.Refresh()

今では、あなたがやっているだろうか リフレッシュ()推測しているかもしれません。はい、それ コントロールとその子を無効にするにはinvalidate(true)を呼び出すと は コントロールを強制的に塗りつぶして無効化が となるようにUpdate()を呼び出します。

+0

ありがとうございます。私は約20分のグーグルで、このような明確な説明を見つけることができませんでした。私はキーワード「違い」を見逃していました。 – Phil