首頁 >後端開發 >C++ >如何在 RichTextBox 中停用重畫以實現即時語法突出顯示?

如何在 RichTextBox 中停用重畫以實現即時語法突出顯示?

Barbara Streisand
Barbara Streisand原創
2025-01-05 15:06:43800瀏覽

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. 啟用重畫:

    • 啟用重畫:
    myRichTextBox1.EndUpdate();
    完成文字和格式化後,呼叫“EndUpdate” 」方法:

透過使用自訂RichTextBox 控件,您現在可以即時突出顯示關鍵字和不良單詞,而不會出現自動重畫導致的分散注意力的閃爍。

以上是如何在 RichTextBox 中停用重畫以實現即時語法突出顯示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn