.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,进行处理,注意的是重写时不要忘了调用基类的函数。
相关文章推荐
- 揭秘.NET对Windows消息循环的封装
- .Net中封装Windows 消息实现进程间通讯
- .Net中封装Windows 消息实现进程间通讯
- Windows 消息循环(一)
- SDLframework实现之消息循环的封装
- Windows的消息队列与消息循环
- 揭开.NET消息循环的神秘面纱(二)(转)
- Windows程序设计零基础自学_1_Windows程序消息循环机制
- windows游戏编程 以PeekMessage为核心的消息循环体系
- 【Windows编程】Step.2 消息循环机制
- 模拟MFC和WTL对Windows窗口框架消息映射机制的封装代码
- windows 消息循环机制
- 理解Windows消息循环
- windows程序设计 消息循环
- DirectUI中模态对话框和菜单的原理(自己控制整个Windows消息循环。或者,用菜单模拟窗体打开时用SetCapture取得控制权,一旦窗体收到WM_CAPTURECHANGED消息就把窗体退出)
- 揭开.NET消息循环的神秘面纱
- DirectUI消息循环的简单封装
- Delphi对Windows消息等的封装和窗体的实现
- Windows事件驱动机制及消息循环
- 关于Windows中的系统消息循环占用CPU的疑问