此处以继承RichTextBox为例。简单来说就是截获windows的WM_MOUSEWHEEL消息,并将消息内容发送给父控件。
1.自定义控件,继承RichTextBox。
2.重写WndProc函数。
[DllImport("User32.dll", CharSet = CharSet.Auto, EntryPoint = "SendMessage")]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
protected override void WndProc(ref Message m)
{
//WM_MOUSEWHEEL
if (m.Msg == 0x020A)
{
//只针对父控件是Panel的情况
if (this.Parent is Panel)
{
//将消息发送给父控件
SendMessage(((Panel)this.Parent).Handle, 0x020A, m.WParam, m.LParam);
//直接返回,让OnMouseWheel洗洗睡吧
return;
}
}
base.WndProc(ref m);
}