最近在编写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
}
View Code

相关文章: