ホームページ >バックエンド開発 >C++ >ライブ構文ハイライトの RichTextBox 再描画を効率的に一時停止および再開するにはどうすればよいですか?

ライブ構文ハイライトの RichTextBox 再描画を効率的に一時停止および再開するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-05 13:42:43609ブラウズ

How Can I Efficiently Suspend and Resume RichTextBox Repainting for Live Syntax Highlighting?

ライブ構文強調表示のための RichTextBox の再描画の一時停止

RichTextBox 内のキーワードをリアルタイムで効率的に強調表示するには、コントロールの自動強調表示を無効にするのが理想的です。再塗装中。 WndProc オーバーライド メソッドではこれが可能ですが、RichTextBox を受け取る外部関数には適していません。

幸いなことに、SendMessage API を利用して自動再描画を直接制御する回避策があります。

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

private const int WM_SETREDRAW = 0x0b;

wp を 0 に設定して SendMessage を呼び出すと、自動再描画が無効になります。逆に、wp を 1 に設定すると、再び有効になります。

使用法:

  1. 一時停止の再描画の開始: SendMessage(richTextBoxHandle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
  2. テキストの更新を実行し、 formatting.
  3. 再描画を再開する: SendMessage(richTextBoxHandle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero);
  4. コントロールを無効にして即時再描画をトリガーする: richTextBoxHandle.Invalidate();

以上がライブ構文ハイライトの RichTextBox 再描画を効率的に一時停止および再開するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。