首页 > 后端开发 > C++ > 如何在 RichTextBox 中禁用重画以实现实时语法突出显示?

如何在 RichTextBox 中禁用重画以实现实时语法突出显示?

Barbara Streisand
发布: 2025-01-05 15:06:43
原创
759 人浏览过

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

在 RichTextBox 中禁用实时语法突出显示的重绘

您需要在用户键入时突出显示 RichTextBox 中的关键字和不良单词,但由于不断重新绘制而导致的过度闪烁是一个令人担忧的问题。但是,重写“WndProc”函数并拦截重绘消息的标准方法需要子类化,这是不可行的。

幸运的是,您可以通过自己扩展 RichTextBox 类的功能来解决此问题。操作方法如下:

  1. 创建自定义 RichTextBox 类:

    • 将名为“MyRichTextBox”的新类添加到您的项目中。
    • 将以下代码复制并粘贴到类中定义:
    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. 使用自定义控件:

    • 将“MyRichTextBox”控件添加到您的工具箱“自定义控件”部分。
    • 将控件拖放到表单上,然后像使用常规 RichTextBox 一样使用它。
  3. 禁用重绘:

    • 在其中执行任何文本编辑或格式化之前自定义 RichTextBox,调用“BeginUpdate”方法:
    myRichTextBox1.BeginUpdate();
    登录后复制
  4. 启用重画:

    • 完成文本编辑和格式化后,调用“EndUpdate” ”方法:
    myRichTextBox1.EndUpdate();
    登录后复制

通过使用自定义 RichTextBox 控件,您现在可以实时突出显示关键字和不良单词,而不会出现自动重画导致的分散注意力的闪烁。

以上是如何在 RichTextBox 中禁用重画以实现实时语法突出显示?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板