注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C#中消息过滤的方法  

2012-04-18 16:28:49|  分类: NET(C#) |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C#中消息过滤的方法
这里先说明一下,不带导入VC的方法的,也就是钩子啥滴全不用,只用C#的。
目前常用的两种方法:
1、使用窗体的WndProc函数的重载,来实现Message的过滤
即:
       protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                //截获键盘鼠标消息
                case 0xa3:     //过滤双击
                    return;
            }

            base.WndProc(ref m);
        }

2、使用IMessageFilter这个过滤的接口,如下:
    internal class MessageFilter:IMessageFilter
    {
        //重置泛型委托变量
        public Action m_aFilter = null;
        public bool PreFilterMessage(ref Message m)
        {
            switch (m.Msg)
            {
                //case 0x0200:
                //case 0x0216:
                case 0x0201:    //目前只处理鼠标按下动作
                //case 0x0204:
                //case 0x0207:
                    ResetCountValue();
                    break;
            }

            return false; //交由其它程序处理,返回TRUE则不再处理,小心使用
        }
     }
使用的方法是在窗体的代码某处,一般在load时候,用下面的下面的方法:
            //添加消息过滤
            MessageFilter mf = new MessageFilter();
            Application.AddMessageFilter(mf);
这里有一个问题,注意到最后的那个返回值不,是个false,如果返回true呢,你可以试试,所以过滤的消

息一定要尽可能的少,而且最后一定返回false.

最后总结一下,如果你的界面上有很多的PANEL之类的控件,而且覆盖了整个窗体,那么用第一种方法可

能就不好达到你的目的了,所以用第二种方法是比较干净利落的方式,不过得写一个专门的类。
不要因为工作简单,就轻视它。努力做好每一件事。

  评论这张
 
阅读(623)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017