首頁 > 後端開發 > C++ > 如何消除語法高亮期間 RichTextBox 閃爍?

如何消除語法高亮期間 RichTextBox 閃爍?

Patricia Arquette
發布: 2025-01-06 02:52:40
原創
326 人瀏覽過

How to Eliminate RichTextBox Flickering During Syntax Highlighting?

停用RichTextBox 語法反白的重繪

在使用者輸入期間在RichTextBox 中執行語法反白顯示時,解決閃爍問題需要停用重繪。

目前效率低下解決方案

目前的解決方案涉及重寫「WndProc」函數來攔截和抑制重繪訊息。但是,這種方法對於使用提供的 RichTextBox 的外部函數來說並不實用。

克服監督

更有效的方法是將缺少的 BeginUpdate 和 EndUpdate 方法加入 RichTextBox 類別。這些方法會產生 WM_SETREDRAW 訊息以抑制重畫。

新增方法

使用下列程式碼在專案中建立一個新類別:

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;
}
登入後複製

使用

使用

使用

SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); // Disable repainting
// Update text
SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); // Enable repainting
this.Invalidate();
登入後複製
使用 您現在可以使用這些方法在語法反白功能中停用和啟用重畫。 替代解決方案如果無法將方法加入類別中,您也可以使用P/在更新文字之前和之後直接呼叫「SendMessage」函數。

以上是如何消除語法高亮期間 RichTextBox 閃爍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板