Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menghapuskan Kelipan Apabila Menyerlahkan Teks dalam RichTextBox Semasa Input Masa Nyata?

Bagaimanakah Saya Boleh Menghapuskan Kelipan Apabila Menyerlahkan Teks dalam RichTextBox Semasa Input Masa Nyata?

DDD
Lepaskan: 2025-01-05 16:31:44
asal
550 orang telah melayarinya

How Can I Eliminate Flickering When Highlighting Text in a RichTextBox During Real-Time Input?

Penyertaan Sintaks Lanjutan untuk RichTextBox: Melumpuhkan Cat Semula untuk Input Tanpa Flicker

Sambil anda menaip teks ke dalam kawalan RichTextBox, anda boleh ingin menyerlahkan kata kunci tertentu atau perkataan yang tidak diingini dalam masa nyata. Untuk mencapai matlamat ini, fungsi biasanya digunakan dengan setiap ketukan kekunci, yang boleh mengakibatkan kelipan perkataan dan kursor yang berlebihan.

Dalam konteks ini, melumpuhkan pengecatan semula ialah penyelesaian yang dicadangkan untuk meminimumkan gangguan visual. Satu kaedah untuk melakukan ini ialah dengan mengatasi fungsi "WndProc" dan memintas mesej cat semula. Walau bagaimanapun, jika fungsi yang anda gunakan memerlukan lulus parameter RichTextBox, pendekatan ini menjadi mencabar.

Penyelesaian alternatif ialah memanfaatkan kaedah "BeginUpdate" dan "EndUpdate", yang membolehkan anda menyekat lukisan dan mencetuskan ia sebaik sahaja anda selesai mengubah suai teks. Malangnya, kaedah ini tidak didedahkan dalam kelas RichTextBox.

Untuk menangani kesilapan ini, anda boleh menambah kaedah ini sendiri dengan membuat kelas tersuai yang diwarisi daripada RichTextBox. Tampalkan kod berikut ke dalam kelas baharu yang ditambahkan pada projek anda:

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;
}
Salin selepas log masuk

Setelah disusun, lepaskan kawalan MyRichTextBox ke dalam borang anda daripada kotak alat. Sebagai alternatif, anda boleh memanggil fungsi SendMessage terus dengan mesej WM_SETREDRAW sebelum dan selepas mengemas kini teks RichTextBox.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghapuskan Kelipan Apabila Menyerlahkan Teks dalam RichTextBox Semasa Input Masa Nyata?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan