ホームページ > バックエンド開発 > C++ > 構文の強調表示中の RichTextBox のちらつきをなくす方法

構文の強調表示中の RichTextBox のちらつきをなくす方法

Patricia Arquette
リリース: 2025-01-06 02:52:40
オリジナル
329 人が閲覧しました

How to Eliminate RichTextBox Flickering During Syntax Highlighting?

RichTextBox 構文強調表示の再描画の無効化

ユーザー入力中に RichTextBox で構文強調表示を実行する場合、ちらつきを解決するには再描画を無効にする必要があります。

現在の非効率解決策

現在の解決策には、「WndProc」関数をオーバーライドして再描画メッセージをインターセプトおよび抑制することが含まれます。ただし、このアプローチは、提供された RichTextBox を操作する外部関数には現実的ではありません。

見落としを克服する

より効果的なアプローチは、不足している BeginUpdate メソッドと EndUpdate メソッドを追加することです。 RichTextBox クラスに追加します。これらのメソッドは、再描画を抑制するために WM_SETREDRAW メッセージを生成します。

メソッドの追加

次のコマンドを使用して、プロジェクトに新しいクラスを作成します。コード:

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class MyRichTextBox : RichTextBox {
    public void BeginUpdate() {
        SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
    }
    public void EndUpdate() {
        SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); 
        this.Invalidate();
    }
    [DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
    private const int WM_SETREDRAW = 0x0b;
}
ログイン後にコピー

使用法

これらのメソッドを使用して、構文強調表示機能内で再描画を無効または有効にできるようになりました。

代替解決策

にメソッドを追加する場合クラスを使用することはできません。テキストを更新する前後に P/Invoke "SendMessage" 関数を直接使用することもできます。

SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); // Disable repainting
// Update text
SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); // Enable repainting
this.Invalidate();
ログイン後にコピー

以上が構文の強調表示中の RichTextBox のちらつきをなくす方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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