IMessageFilter学习

  最近要做的东西没怎么有头绪,好不容易从网上看到一篇文章介绍相关知识,无奈自己水平太低,里面好多知识都不是非常懂,现查也学习一下。里面有些消息处理方面的知识,在此总结一下。

  看到里面有个 Application.AddMessageFilter方法,MSDN上对它的说明是这样的:添加消息筛选器以便在向目标传送 Windows 消息时监视这些消息。

public static void AddMessageFilter(
	IMessageFilter value
)

  必须传入一个IMessageFilter作为参数,我们使用一个类来继承自IMessageFilter。

 public class Joystick : IMessageFilter
{
  ..............
}

  若要防止调度某消息,传递给该方法的 value 参数实例必须用处理该消息的代码重写PreFilterMessage方法。 该方法必须返回 false

  在Joystick中重写该方法,并且返回false

  

bool IMessageFilter.PreFilterMessage(ref Message m)                          
        {
            bool flag = false;
            if (m.HWnd != IntPtr.Zero && (m.WParam != IntPtr.Zero || m.LParam != IntPtr.Zero))
            {
                Action<JoystickEventArgs> action = null;
                int joystickId = -1;
                switch (m.Msg)
                {
                    case API.MM_JOY1MOVE:
                    case API.MM_JOY2MOVE:
                        //单击事件
                        GetXYStateFromLParam(m.LParam.ToInt32());
                        action = this.OnClick;
                        joystickId = m.Msg == API.MM_JOY1MOVE ? API.JOYSTICKID1 : API.JOYSTICKID2;
                        break;
                }
                if (action != null && joystickId != -1 )
                {
                    //阻止消息继续传递
                    flag = true;
                    //触发事件
                    action(new JoystickEventArgs(joystickId));
                }
            }
            return flag;
        }

  最后使用Application.AddMessageFilter(this);注册消息编辑器,this是传入的窗口句柄。这个地方还是有点晕,慢慢再看吧,现在先记这么多

posted on 2014-11-06 09:32  kuiblog.com  阅读(599)  评论(0)    收藏  举报