积极答复者
IMessageFilter.PreFilterMessage 方法没有执行

问题
-
我写了一个类,继承了IMessageFilter接口,但是PreFilterMessage这个方法没有执行。
public class MyMessageFilter : IMessageFilter
{
private Control control = null;
private Boolean isMove = true;public MyMessageFilter(Control control)
{
this.control = control;
}#region IMessageFilter 成员
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == (int)Msgs.WM_MOUSEMOVE)
{
move();
}
else if (m.Msg == (int)Msgs.WM_LBUTTONUP)
isMove = false;
else if (m.Msg == (int)Msgs.WM_CAPTURECHANGED)
isMove = false;
else if (m.Msg == (int)Msgs.WM_KEYDOWN && (int)m.WParam == (int)Keys.Escape)
isMove = false;return false;
}private void move()
{
if (isMove)
{
control.Top = Control.MousePosition.Y;
control.Left = Control.MousePosition.X;
}
}#endregion
}
这样调用的 Application.AddMessageFilter(new MyMessageFilter(button1));
snyod
答案
-
我在WinForm里试验过了(VS2005),没有问题。效果是按钮随着鼠标移动。
public class MyMessageFilter : IMessageFilter
{
private Control control = null;
private Boolean isMove = true;
public MyMessageFilter(Control control)
{
this.control = control;
}
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x200)
{
move();
}
else if (m.Msg == 0x202)
isMove = false;
else if (m.Msg == 0x215)
isMove = false;
else if (m.Msg == 0x0100 && (int)m.WParam == (int)Keys.Escape)
isMove = false;
return false;
}
private void move()
{
if (isMove)
{
control.Top = Control.MousePosition.Y;
control.Left = Control.MousePosition.X;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
Application.AddMessageFilter(new MyMessageFilter(button1));- 已标记为答案 BoberSongModerator 2010年7月27日 7:14
全部回复
-
我在WinForm里试验过了(VS2005),没有问题。效果是按钮随着鼠标移动。
public class MyMessageFilter : IMessageFilter
{
private Control control = null;
private Boolean isMove = true;
public MyMessageFilter(Control control)
{
this.control = control;
}
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x200)
{
move();
}
else if (m.Msg == 0x202)
isMove = false;
else if (m.Msg == 0x215)
isMove = false;
else if (m.Msg == 0x0100 && (int)m.WParam == (int)Keys.Escape)
isMove = false;
return false;
}
private void move()
{
if (isMove)
{
control.Top = Control.MousePosition.Y;
control.Left = Control.MousePosition.X;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
Application.AddMessageFilter(new MyMessageFilter(button1));- 已标记为答案 BoberSongModerator 2010年7月27日 7:14