ホームページ > バックエンド開発 > C++ > リアルタイムの構文強調表示のために RichTextBox の再描画を最適化するにはどうすればよいですか?

リアルタイムの構文強調表示のために RichTextBox の再描画を最適化するにはどうすればよいですか?

DDD
リリース: 2025-01-06 03:01:40
オリジナル
1037 人が閲覧しました

How Can I Optimize RichTextBox Repainting for Real-Time Syntax Highlighting?

リアルタイム RichTextBox 構文強調表示の再描画の無効化

特定のプログラミング シナリオでは、キーワードや特定の単語を動的に強調表示する必要がある場合があります。ユーザーが入力するときの RichTextBox。ただし、再描画を頻繁に行うと、入力中にちらつきや不快感が生じる可能性があります。

ユーザー エクスペリエンスを向上させるために、テキストの編集中に RichTextBox の自動再描画を無効にすることができます。残念ながら、標準の RichTextBox クラスには、このための組み込みメソッドが提供されていません。

外部クラスを使用した RichTextBox のカスタマイズ

1 つの解決策は、カスタム RichTextBox クラスを作成することです。不足している機能を追加します。次に例を示します:

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;
}
ログイン後にコピー

その後、リアルタイムでキーワードを強調表示するカスタム関数で BeginUpdate() メソッドと EndUpdate() メソッドを使用できます。

void HighlightKeywords(MyRichTextBox richTextBox) {
    richTextBox.BeginUpdate();

    // Highlight keywords and bad words

    richTextBox.EndUpdate();
}
ログイン後にコピー

直接P/Invoke を使用した再描画の制御

または、カスタム クラスを使用し、WM_SETREDRAW メッセージで SendMessage メソッドを使用して再描画を直接制御します。

RichTextBox のテキストを更新する前:

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
const int WM_SETREDRAW = 0x0b;

// (Disable repainting)
SendMessage(richTextBox.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
ログイン後にコピー

RichTextBox のテキストを更新した後:

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

このアプローチにより、標準の RichTextBox クラスを変更せずに同じ結果を達成できます。

以上がリアルタイムの構文強調表示のために RichTextBox の再描画を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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