我想转发MouseWheel
在表单级别生成的事件,以便它们将由嵌入式WebBrowser
控件处理,即使该控件没有焦点。
这是我所做的:
- 实施
IMessageFilter.PreFilterMessage
。 - 将过滤器注册为
Application.AddMessageFilter
. - 在过滤器中,收听
WM_MOUSEWHEEL
消息。 - 将消息转发
SendMessage
到目标控件(在我的情况下WebBrowser
)。
在代码中,这看起来像这样:
bool IMessageFilter.PreFilterMessage(ref Message m)
{
if (m.Msg == 0x20A) // WM_MOUSEWHEEL
{
if (this.target != null)
{
var handle = this.target.Handle;
Native.SendMessage (handle, m.Message, m.WParam, m.LParam);
return true;
}
}
return false;
}
// Registering the message filter:
System.Windows.Forms.Application.AddMessageFilter (this);
// Win32 code:
protected static class NativeMethods
{
[System.Runtime.InteropServices.DllImport ("user32.dll")]
public static extern System.IntPtr SendMessage(System.IntPtr hWnd, System.Int32 Msg, System.IntPtr wParam, System.IntPtr lParam);
}
这不起作用。什么都没发生。
但是,如果WebBrowser
我指定 a而不是 aPanel
作为目标,那么这将非常有效。