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 ?
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; }
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!