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) 收藏 举报
浙公网安备 33010602011771号