ホームページ > バックエンド開発 > C++ > .NETコントロールとその子供のために塗装を効率的に一時停止して再開するにはどうすればよいですか?

.NETコントロールとその子供のために塗装を効率的に一時停止して再開するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-30 10:56:09
オリジナル
165 人が閲覧しました

How Can I Efficiently Suspend and Resume Painting for a .NET Control and Its Children?

wm_setredraw

を使用して.NET制御再挿入を最適化します

.NET開発者は、大規模な更新中に、コントロール内およびその子供内で一時的に補充を停止する必要があることがよくあります。 SuspendLayoutResumeLayoutレイアウトを管理していますが、彼らは完全に再描画を抑制しません。

wm_setredrawソリューション

コントロールのウィンドウハンドルに送信されるWM_SETREDRAWメッセージは、堅牢なソリューションを提供します。 ブールパラメーターは再描画を制御します:false無効にし、trueを有効にします。

サスペンドドローと再開の方法の実装

この合理化されたクラスは、機能をカプセル化します:

<code class="language-csharp">public static class ControlPainting
{
    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);

    private const int WM_SETREDRAW = 11;

    public static void SuspendPainting(Control parent)
    {
        SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
    }

    public static void ResumePainting(Control parent)
    {
        SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
        parent.Refresh();
    }
}</code>
ログイン後にコピー

使用例

塗り直しを防ぐため:

<code class="language-csharp">ControlPainting.SuspendPainting(myControl);
// ... perform modifications ...
ControlPainting.ResumePainting(myControl);</code>
ログイン後にコピー

さらに読み取り

詳細な情報については、これらのリソースを参照してください:

  • c#jitter
  • レイアウトの一時停止

以上が.NETコントロールとその子供のために塗装を効率的に一時停止して再開するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート