场景,Panel中放置了自定义控件,控件中包含了listbox,导致当鼠标放在listbox上的 时候,鼠标滚轮无法滚动panel。
处理方式:基于ListBox扩展一个控件,然后捕获系统消息,如果是鼠标滚动,就将消息转发给外层的panel进行响应。
[DllImport("User32.DLL")]
private static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x020a: //鼠标滚轮滚动
case 0x0207://按下鼠标滚轮
case 0x0208://释放鼠标滚轮
if (ScrollEnable)
{
base.WndProc(ref m);
}
else
{
SendMessage(this.Parent.Parent.Parent.Handle,(uint) m.Msg, m.WParam, m.LParam);
}
break;
default:
base.WndProc(ref m);
//base.DefWndProc(ref m);//调用基类函数处理非自定义消息。
break;
}
}