>백엔드 개발 >C++ >구문 강조 중에 RichTextBox 깜박임을 제거하는 방법은 무엇입니까?

구문 강조 중에 RichTextBox 깜박임을 제거하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-06 02:52:40367검색

How to Eliminate RichTextBox Flickering During Syntax Highlighting?

RichTextBox 구문 강조에 대한 다시 그리기 비활성화

사용자 입력 중에 RichTextBox에서 구문 강조를 수행할 때 깜박임을 해결하려면 다시 그리기를 비활성화해야 합니다.

현재 비효율적 해결 방법

현재 해결 방법에는 "WndProc" 기능을 재정의하여 다시 그리기 메시지를 가로채서 억제하는 것이 포함됩니다. 그러나 이 접근 방식은 제공된 RichTextBox를 사용하여 작업하는 외부 기능에는 실용적이지 않습니다.

감독 극복

더 효과적인 접근 방식은 누락된 BeginUpdate 및 EndUpdate 메서드를 추가하는 것입니다. RichTextBox 클래스에. 이러한 메서드는 다시 그리기를 억제하기 위해 WM_SETREDRAW 메시지를 생성합니다.

메서드 추가

다음을 사용하여 프로젝트에 새 클래스를 만듭니다. 코드:

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

사용법

이제 이러한 방법을 사용하여 구문 강조 기능 내에서 다시 그리기를 비활성화하거나 활성화할 수 있습니다.

대체 솔루션

클래스에 메소드를 추가하는 것이 그렇지 않은 경우 가능하다면 텍스트 업데이트 전후에 P/Invoke "SendMessage" 기능을 직접 사용할 수도 있습니다.

SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)0, IntPtr.Zero); // Disable repainting
// Update text
SendMessage(this.Handle, WM_SETREDRAW, (IntPtr)1, IntPtr.Zero); // Enable repainting
this.Invalidate();

위 내용은 구문 강조 중에 RichTextBox 깜박임을 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.