Maison >développement back-end >C++ >Comment puis-je suspendre et reprendre efficacement la repeinture de RichTextBox pour la mise en évidence de la syntaxe en direct ?

Comment puis-je suspendre et reprendre efficacement la repeinture de RichTextBox pour la mise en évidence de la syntaxe en direct ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-05 13:42:43609parcourir

How Can I Efficiently Suspend and Resume RichTextBox Repainting for Live Syntax Highlighting?

Suspendre le repaint dans RichTextBox pour la mise en évidence de la syntaxe en direct

Pour mettre en évidence efficacement les mots-clés dans une RichTextBox en temps réel, il est idéal de désactiver le contrôle automatique repeindre. Bien que la méthode de remplacement WndProc le permette, elle ne convient pas à une fonction externe qui prend une RichTextBox.

Heureusement, il existe une solution de contournement qui exploite l'API SendMessage pour contrôler directement la repeinture automatique :

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

private const int WM_SETREDRAW = 0x0b;

En appelant SendMessage avec wp défini sur 0, la repeinture automatique est désactivée. À l'inverse, définir wp sur 1 le réactive.

Utilisation :

  1. Commencer à repeindre la suspension : SendMessage(richTextBoxHandle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero);
  2. Effectuer des mises à jour de texte et formatage.
  3. Reprendre la repeinture : SendMessage(richTextBoxHandle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero);
  4. Invalider le contrôle pour déclencher une repeinture immédiate : richTextBoxHandle.Invalidate();

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!

Déclaration:
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