Heim >Backend-Entwicklung >C++ >Wie kann ich das Neuzeichnen in einer RichTextBox für die Syntaxhervorhebung in Echtzeit deaktivieren?
Repaint für Echtzeit-Syntaxhervorhebung in RichTextBox deaktivieren
Sie müssen Schlüsselwörter und schlechte Wörter in einer RichTextBox hervorheben, während der Benutzer Folgendes eingibt: Besorgniserregend ist jedoch das übermäßige Flackern, das durch das ständige Neulackieren verursacht wird. Allerdings erfordert die Standardmethode zum Überschreiben der „WndProc“-Funktion und zum Abfangen der Repaint-Nachricht eine Unterklassenbildung, was nicht möglich ist.
Glücklicherweise können Sie dieses Problem beheben, indem Sie die Funktionalität der RichTextBox-Klasse selbst erweitern. So geht's:
Erstellen Sie eine benutzerdefinierte RichTextBox-Klasse:
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; }
Verwenden Sie das benutzerdefinierte Steuerelement:
Neuzeichnung deaktivieren:
myRichTextBox1.BeginUpdate();
Neuzeichnen aktivieren:
myRichTextBox1.EndUpdate();
Durch Verwendung des Brauchs Mit der RichTextBox-Steuerung können Sie jetzt Schlüsselwörter und schlechte Wörter in Echtzeit hervorheben, ohne das störende Flackern, das durch automatisches Neuzeichnen verursacht wird.
Das obige ist der detaillierte Inhalt vonWie kann ich das Neuzeichnen in einer RichTextBox für die Syntaxhervorhebung in Echtzeit deaktivieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!