今天在设置一个软件的RichTextBox的时候,需要一个背景透明,不可编辑的文本展示框,而且还要向文本框中不停地追加数据,所以我选择修改winform自带的richtextbox组件。
首先,我们先新建一个自定义组件,继承与RichTextBox,在构造函数中添加双缓冲避免组件闪烁:
public DsAlphaRichTextBox()
{
InitializeComponent();
this.GetType().GetProperty("DoubleBuffered", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).SetValue(this, true, null);
}
并重写一个函数,用于将整个组件设置成为背景透明的:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
接着,设置组件的Readonly为true,设置为只读状态,但是组件中的光标还是存在的,因此,我们需要继续重写一个函数,将光标去除:
首先,在构造函数中,添加this.Cursor = Cursors.Arrow;
然后,重写函数:
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x7 || m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203 || m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206 || m.Msg == 0x0100 || m.Msg == 0x0101)
{
return;
}
base.WndProc(ref m);
}
这样,我们自定义的透明,只读,无鼠标光标的RichTextBox组件就完成了。