您的位置:首页 > 其它

.NET对Windows消息循环的封装

2010-08-24 11:43 330 查看

.NET对Windows消息循环的封装

第一部分

在讲.NET对消息的包装前,先了解下传统的Windows程序。
先看一下直接用C++构造一个窗体的代码,以下代码在VS2005中自动生成,
笔者对其进行了删减,只保留主要部分。

代码
1 protected override void DefWndProc(ref Message m)
2 {
3             if ( m.Msg ==  0x0201 )
4             {
5                 MessageBox.Show(m.Msg.ToString());
6             }
7             else
8             {
9                 base.DefWndProc (ref m);
10             }
11 }


不过在这里截获的消息,和利用PreFilterMessage的原理不同,这里只是操作系统在调用回调函数时,
我们通过消息ID,编写自己的相应,或者不响应,而不让它执行base.DefWndProc中的相应动作,
实现了消息截取,而且这里只能截取到本窗体的消息。而利用PreFilterMessage截获的是整个应用程序
的消息,不管几个窗体,他都能截获到,而且他截取的时间要比在DefWndProc中的早。

PreProcessMessage

此函数对键盘消息进行预处理。
像其他消息一样,键盘消息是在窗体或控件的 WndProc 方法中处理的。但是,在处理键盘消息之前,
PreProcessMessage 方法会调用一个或多个方法对消息进行预处理,这些方法可被重写以处理特殊的
字符键和物理按键。您可以重写这些方法,以便在控件处理消息之前检测并筛选某些按键。
如果我们想自己定义消息,然后发送,处理,可以调用Windows API ::SendMessage(),然后重写窗口
的WndProc,或DefWndProc,进行处理,注意的是重写时不要忘了调用基类的函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: