ホームページ > バックエンド開発 > C++ > リアルタイム入力中に RichTextBox 内のテキストを強調表示するときのちらつきをなくすにはどうすればよいですか?

リアルタイム入力中に RichTextBox 内のテキストを強調表示するときのちらつきをなくすにはどうすればよいですか?

DDD
リリース: 2025-01-05 16:31:44
オリジナル
532 人が閲覧しました

How Can I Eliminate Flickering When Highlighting Text in a RichTextBox During Real-Time Input?

RichTextBox の拡張構文強調表示: ちらつきのない入力の再描画を無効にする

RichTextBox コントロールにテキストを入力するときに、次のことができます。特定のキーワードや望ましくない単語をリアルタイムで強調表示したい。これを実現するために、通常、キーストロークごとに関数が呼び出されます。その結果、単語やカーソルが過度にちらつく可能性があります。

この状況では、視覚的な邪魔を最小限に抑えるために、再ペイントを無効にすることが提案された解決策です。これを行う 1 つの方法は、「WndProc」関数をオーバーライドし、再描画メッセージをインターセプトすることです。ただし、使用している関数で RichTextBox パラメーターを渡す必要がある場合、このアプローチは困難になります。

別の解決策は、ペイントとトリガーを抑制できる「BeginUpdate」メソッドと「EndUpdate」メソッドを利用することです。テキストの変更が完了したら。残念ながら、これらのメソッドは RichTextBox クラスでは公開されていません。

この見落としに対処するには、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;
}
ログイン後にコピー

コンパイルしたら、ツールボックスから MyRichTextBox コントロールをフォームにドロップします。あるいは、RichTextBox テキストを更新する前後に、WM_SETREDRAW メッセージを使用して SendMessage 関数を直接呼び出すこともできます。

以上がリアルタイム入力中に RichTextBox 内のテキストを強調表示するときのちらつきをなくすにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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