Maison > développement back-end > C++ > Comment puis-je éliminer le scintillement lors de la mise en surbrillance du texte dans une RichTextBox lors d'une saisie en temps réel ?

Comment puis-je éliminer le scintillement lors de la mise en surbrillance du texte dans une RichTextBox lors d'une saisie en temps réel ?

DDD
Libérer: 2025-01-05 16:31:44
original
547 Les gens l'ont consulté

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

Mise en évidence de la syntaxe étendue pour RichTextBox : désactivation de Repaint pour une saisie sans scintillement

Lorsque vous tapez du texte dans un contrôle RichTextBox, vous pouvez souhaitez mettre en avant des mots-clés spécifiques ou des mots indésirables en temps réel. Pour y parvenir, une fonction est généralement invoquée à chaque frappe, ce qui peut entraîner un scintillement excessif des mots et du curseur.

Dans ce contexte, désactiver le repeint est une solution proposée pour minimiser les distractions visuelles. Une méthode pour ce faire consiste à remplacer la fonction "WndProc" et à intercepter le message de repaint. Cependant, si la fonction que vous utilisez nécessite de transmettre un paramètre RichTextBox, cette approche devient difficile.

Une solution alternative consiste à exploiter les méthodes "BeginUpdate" et "EndUpdate", qui vous permettent de supprimer la peinture et de déclencher une fois que vous avez fini de modifier le texte. Malheureusement, ces méthodes ne sont pas exposées dans la classe RichTextBox.

Pour remédier à cet oubli, vous pouvez ajouter ces méthodes vous-même en créant une classe personnalisée qui hérite de RichTextBox. Collez le code suivant dans une nouvelle classe ajoutée à votre projet :

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;
}
Copier après la connexion

Une fois compilé, déposez le contrôle MyRichTextBox sur votre formulaire depuis la boîte à outils. Alternativement, vous pouvez appeler la fonction SendMessage directement avec le message WM_SETREDRAW avant et après la mise à jour du texte RichTextBox.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal