首頁 >後端開發 >C++ >即時輸入時RichTextBox中的文字高亮顯示時如何消除閃爍?

即時輸入時RichTextBox中的文字高亮顯示時如何消除閃爍?

DDD
DDD原創
2025-01-05 16:31:44563瀏覽

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

RichTextBox 的擴充語法反白:停用重繪以實現無閃爍輸入

在RichTextBox 控制項中鍵入文字時,您可以想要即時突出顯示特定關鍵字或不需要的單字。為了實現這一點,通常會在每次按鍵時呼叫函數,這可能會導致單字和遊標過度閃爍。

在這種情況下,停用重繪是建議的解決方案,以最大限度地減少視覺幹擾。實現此目的的一種方法是重寫“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中文網其他相關文章!

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