最近在编写Max插件时,其主容器FlowLayoutPanel由于隐藏了滚动条,要实现按住鼠标中键上下拖动的功能,因此尝试了全局鼠标事件、以及鼠标勾子,可惜由于Max不争气?都未能实现,于是代码报废,故将其分享于此。
一、全局鼠标事件,首先构建鼠标事件处理器
public delegate void MouseMovedEvent(); public delegate void MouseMDownEvent(); public delegate void MouseMUpEvent(); public class GlobalMouseHandler : IMessageFilter { private const int WM_MOUSEMOVE = 0x0200; private const int WM_MBUTTONDOWN = 0x0207; private const int WM_MBUTTONUP = 0x0208; public event MouseMovedEvent TheMouseMoved; public event MouseMDownEvent TheMouseMDown; public event MouseMUpEvent TheMouseMUp; #region IMessageFilter Members public bool PreFilterMessage(ref Message m) { if (m.Msg == WM_MOUSEMOVE) if (TheMouseMoved != null) TheMouseMoved(); if (m.Msg == WM_MBUTTONDOWN) if (TheMouseMDown != null) TheMouseMDown(); if (m.Msg == WM_MBUTTONUP) if (TheMouseMUp != null) TheMouseMUp(); // Always allow message to continue to the next filter control return false; } #endregion }