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

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

Barbara Streisand
リリース: 2025-01-05 15:06:43
オリジナル
799 人が閲覧しました

How Can I Disable Repainting in a RichTextBox for Real-Time Syntax Highlighting?

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

ユーザーが入力している間、RichTextBox 内のキーワードと不適切な単語を強調表示する必要があります。ただし、定期的な再描画による過度のちらつきが懸念されます。ただし、「WndProc」関数をオーバーライドして再描画メッセージをインターセプトする標準的な方法ではサブクラス化が必要ですが、これは現実的ではありません。

幸いなことに、RichTextBox クラスの機能を自分で拡張することで、この問題に対処できます。方法は次のとおりです:

  1. カスタム RichTextBox クラスを作成します:

    • 「MyRichTextBox」という名前の新しいクラスをプロジェクトに追加します。
    • 次のコードをコピーしてクラスに貼り付けます定義:
    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;
    }       
    ログイン後にコピー
  2. カスタム コントロールの使用:

    • 「MyRichTextBox」コントロールをツールボックスに追加します。 「カスタム コントロール」セクション。
    • コントロールをフォームにドラッグ アンド ドロップします。通常の RichTextBox と同じように使用します。
  3. 再描画を無効にします:

    • テキストの編集または書式設定を実行する前にカスタム RichTextBox 内で、「BeginUpdate」を呼び出します。メソッド:
    myRichTextBox1.BeginUpdate();
    ログイン後にコピー
  4. 再描画を有効にする:

    • テキストの編集と書式設定が完了したら、「EndUpdate」を呼び出します。 」メソッド:
    myRichTextBox1.EndUpdate();
    ログイン後にコピー

カスタム RichTextBox コントロールを使用すると、自動再描画によって引き起こされるちらつきを気にせずに、キーワードや不適切な単語をリアルタイムで強調表示できるようになりました。

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

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