Heim >Backend-Entwicklung >C++ >Wie kann ich das Neuzeichnen in einer RichTextBox für die Syntaxhervorhebung in Echtzeit deaktivieren?

Wie kann ich das Neuzeichnen in einer RichTextBox für die Syntaxhervorhebung in Echtzeit deaktivieren?

Barbara Streisand
Barbara StreisandOriginal
2025-01-05 15:06:43757Durchsuche

How Can I Disable Repainting in a RichTextBox for Real-Time Syntax Highlighting?

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:

  1. Erstellen Sie eine benutzerdefinierte RichTextBox-Klasse:

    • Fügen Sie Ihrem Projekt eine neue Klasse mit dem Namen „MyRichTextBox“ hinzu.
    • Kopieren Sie den folgenden Code und fügen Sie ihn in die Klasse ein Definition:
    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. Verwenden Sie das benutzerdefinierte Steuerelement:

    • Fügen Sie das „MyRichTextBox“-Steuerelement zu Ihrer Toolbox hinzu den Abschnitt „Benutzerdefinierte Steuerelemente“.
    • Ziehen Sie das Steuerelement per Drag-and-Drop auf Ihr Formular und verwenden Sie es wie ein normales Steuerelement RichTextBox.
  3. Neuzeichnung deaktivieren:

    • Bevor Sie Text in der benutzerdefinierten RichTextBox bearbeiten oder formatieren, rufen Sie „ „BeginUpdate“ Methode:
    myRichTextBox1.BeginUpdate();
  4. Neuzeichnen aktivieren:

    • Nachdem Sie Ihre Textbearbeitung und -formatierung abgeschlossen haben, rufen Sie „EndUpdate“ auf " Methode:
    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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn