C#实现在Form上截取消息的两种方法

发表于:2014-10-09 10:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:milantgh    来源:51Testing软件测试网采编

  比较常用的是重载Form的DefWndProc方法,例如截取鼠标按下的消息:
protected override void DefWndProc(ref Message m)
{
if ( m.Msg == 0x0201 )
{
MessageBox.Show(m.Msg.ToString());
}
else
{
base.DefWndProc (ref m);
}
}
    还可以通过另一种办法,使用IMessageFilter 接口:
public class MessageFilter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x0201)
{
MessageBox.Show("WM_LBUTTONDOWN is: " + m.Msg);
return true;
}
return false;
}
}
  然后使用Application.AddMessageFilter方法,例如:
  private static MessageFilter msgFliter = new MessageFilter();
  在Main方法中注册消息筛选器:
  Application.AddMessageFilter(msgFliter);
  如果要取消注册,可以调用Application.RemoveMessageFilter方法
  在这里有一个Windows的MessageID的枚举,挺有用的,好几次都忘了地址,这次写在这里好好保存
  Windows Message ID constants
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号