[原创] MicroWindows学习笔记之底层消息的读取
2010-04-11 19:48
344 查看
在“消息管理”一节里,已经讲过消息是通过消息循环的PeekMessage方法来读取,而对于底层硬件消息的读取,则是通过MwSelect方法来完成,而且它的优先级也是最低的。
MwSelect
1) 方法原型
void MwSelect(void)
所在文件:mwin\Winmain.c
2) 说明
读取键盘、鼠标、定时器消息。
这个方法是整个系统的消息源动力,所以是非常重要的一个方法。它会去读取底层发上来的消息,并上传给MicroWindows的引擎,引擎根据不同的消息类型做一些事情,并决定发给哪个窗口。如果移植的话,需要把这个方法重新实现。
现在看看它的基本实现:
调用mousedev.Poll()方法查询是否有鼠标消息,如果有,则调用MwCheckMouseEvent()方法处理;调用kbddev.Poll()方法查询是否有键盘消息,如果有,则调用MwCheckKeyboardEvent()方法处理;最后调用MwHandleTimers()方法处理定时器消息。
可以看到,对于硬件消息,是通过MwCheckMouseEvent、MwCheckKeyboardEvent、MwHandleTimers这三个方法来处理的。
MwCheckMouseEvent
1) 方法原型
BOOL MwCheckMouseEvent(void)
所在文件:mwin\Winevent.c
2) 说明
在该方法前有一段注释
也就是说,该方法是非堵塞的,调用该方法时,肯定是有鼠标消息要读取。
这个方法用于读取鼠标消息(GdReadMouse),如果有,那么处理之(MwHandleMouseStatus)。
MwCheckKeyboardEvent
1) 方法原型
BOOL MwCheckKeyboardEvent(void)
所在文件:mwin\Winevent.c
2) 说明
该方法也是非堵塞,必须要有键盘消息可以读取。
这个方法用于读取键盘消息(GdReadKeyboard)、看按键状态值来做相应的处理,可能是关闭系统(MwTerminate)、打印屏幕(GdCaptureScreen)、或分发键盘消息(MwDeliverKeyboardEvent)。
MwHandleTimers
1) 方法原型
void MwHandleTimers(void)
所在文件:mwin\Winuser.c
2) 说明
查看应用开的定时器是否已经到时,如果到,则发消息给应用,还分两种情况,如果应用注册了定时器回调的,那是直接调过去,否则是调用PostMessage方法发消息。
定时器的结构为
其中lpTimerFunc是用户注册的回调函数。
有一个全局变量定义了定时器static struct timer timer;
[疑问:现在MicroWindows只能开启一个定时器?]
MwSelect
1) 方法原型
void MwSelect(void)
所在文件:mwin\Winmain.c
2) 说明
读取键盘、鼠标、定时器消息。
这个方法是整个系统的消息源动力,所以是非常重要的一个方法。它会去读取底层发上来的消息,并上传给MicroWindows的引擎,引擎根据不同的消息类型做一些事情,并决定发给哪个窗口。如果移植的话,需要把这个方法重新实现。
现在看看它的基本实现:
调用mousedev.Poll()方法查询是否有鼠标消息,如果有,则调用MwCheckMouseEvent()方法处理;调用kbddev.Poll()方法查询是否有键盘消息,如果有,则调用MwCheckKeyboardEvent()方法处理;最后调用MwHandleTimers()方法处理定时器消息。
可以看到,对于硬件消息,是通过MwCheckMouseEvent、MwCheckKeyboardEvent、MwHandleTimers这三个方法来处理的。
MwCheckMouseEvent
1) 方法原型
BOOL MwCheckMouseEvent(void)
所在文件:mwin\Winevent.c
2) 说明
在该方法前有一段注释
也就是说,该方法是非堵塞的,调用该方法时,肯定是有鼠标消息要读取。
这个方法用于读取鼠标消息(GdReadMouse),如果有,那么处理之(MwHandleMouseStatus)。
MwCheckKeyboardEvent
1) 方法原型
BOOL MwCheckKeyboardEvent(void)
所在文件:mwin\Winevent.c
2) 说明
该方法也是非堵塞,必须要有键盘消息可以读取。
这个方法用于读取键盘消息(GdReadKeyboard)、看按键状态值来做相应的处理,可能是关闭系统(MwTerminate)、打印屏幕(GdCaptureScreen)、或分发键盘消息(MwDeliverKeyboardEvent)。
MwHandleTimers
1) 方法原型
void MwHandleTimers(void)
所在文件:mwin\Winuser.c
2) 说明
查看应用开的定时器是否已经到时,如果到,则发消息给应用,还分两种情况,如果应用注册了定时器回调的,那是直接调过去,否则是调用PostMessage方法发消息。
定时器的结构为
其中lpTimerFunc是用户注册的回调函数。
有一个全局变量定义了定时器static struct timer timer;
[疑问:现在MicroWindows只能开启一个定时器?]
相关文章推荐
- [原创] MicroWindows学习笔记之消息管理
- [原创] MicroWindows学习笔记之对底层设备的管理
- [原创] MicroWindows学习笔记之对于SendMessage的疑问
- [原创] MicroWindows学习笔记之窗口管理与Z序关系
- [原创] MicroWindows学习笔记之初始化过程
- (原创)c#学习笔记08--面向对象编程简介03--Windows应用程序中的OOP
- 理解windows消息机制-delphi消息机制学习笔记。
- [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用
- [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map
- MFC学习笔记之四————菜单编程与windows消息分类
- JSTL标签库学习笔记 六、I18N格式化标签库的数字日期格式化、读取消息资源、国际化
- windows编程学习笔记(1)创建窗口与消息循环
- SDK学习笔记-Windows消息机制
- Windows程序设计_Chap03_窗口与消息_学习笔记
- Windows学习笔记6——窗口与消息<四>
- JSTL标签库学习笔记 六、I18N格式化标签库的数字日期格式化、读取消息资源、国际化
- MFC学习笔记之四————菜单编程与windows消息分类
- C++学习笔记之WINDOWS消息机制
- 【VS2010学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之WM_TIMER消息处理函数的添加问题)
- 理解windows消息机制-delphi消息机制学习笔记。