Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Lumpuhkan Mengecat Semula dalam RichTextBox untuk Penyerlahan Sintaks Masa Nyata?

Bagaimanakah Saya Boleh Lumpuhkan Mengecat Semula dalam RichTextBox untuk Penyerlahan Sintaks Masa Nyata?

Barbara Streisand
Barbara Streisandasal
2025-01-05 15:06:43800semak imbas

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

Melumpuhkan Cat Semula untuk Penyerlahan Sintaks Masa Nyata dalam RichTextBox

Anda perlu menyerlahkan kata kunci dan perkataan buruk dalam RichTextBox sambil pengguna menaip, tetapi kerlipan berlebihan yang disebabkan oleh pengecatan semula yang berterusan adalah kebimbangan. Walau bagaimanapun, kaedah standard untuk mengatasi fungsi "WndProc" dan memintas mesej cat semula memerlukan subkelas, yang tidak boleh dilaksanakan.

Nasib baik, anda boleh menangani isu ini dengan memperluaskan sendiri fungsi kelas RichTextBox. Begini caranya:

  1. Buat kelas RichTextBox tersuai:

    • Tambahkan kelas baharu bernama "MyRichTextBox" pada projek anda.
    • Salin dan tampal kod berikut ke dalam kelas definisi:
    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. Gunakan kawalan tersuai:

    • Tambahkan kawalan "MyRichTextBox" pada kotak alat anda daripada bahagian "Kawalan Tersuai".
    • Seret dan lepaskan kawalan ke dalam borang anda dan gunakannya seperti yang anda lakukan pada RichTextBox biasa.
  3. Lumpuhkan pengecatan semula:

    • Sebelum melakukan sebarang pengeditan atau pemformatan teks dalam adat RichTextBox, panggil "BeginUpdate" kaedah:
    myRichTextBox1.BeginUpdate();
  4. Dayakan mengecat semula:

    • Setelah melengkapkan penyuntingan dan pemformatan teks anda, panggil "EndUpdate " kaedah:
    myRichTextBox1.EndUpdate();

Dengan menggunakan kawalan RichTextBox tersuai, anda kini boleh menyerlahkan kata kunci dan perkataan buruk dalam masa nyata tanpa kelipan mengganggu yang disebabkan oleh pengecatan semula automatik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Lumpuhkan Mengecat Semula dalam RichTextBox untuk Penyerlahan Sintaks Masa Nyata?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn