最近学习了下MFC,现在说说我对Windows操作系统的消息机制的了解。如有不对,请大家多多指正。
什么是消息? 通俗的来讲,消息就是操作系统给应用程序的一个通知,它告诉应用程序一个事件的发生,如鼠标单击,键盘按下等。
消息的组成:
- hwnd 窗口句柄
- message 消息常量标识符
- lparam 通常是一个指向内存中数据的指针
- wparam 通常是与一个消息有关的常量
- time 消息创建的时间
- pt 消息创建时鼠标的位置
消息的分类:
- 标准消息 标准消息以WM_开头
- 通知消息 通知消息是在针对控件的消息,这些控件包括按钮、组合框、菜单等
- 自定义消息 编程人员自己定义的消息
消息系统的组成
- 消息队列 Windows操作系统能为所有的应用程序都能维护一个消息队列,应用程序从消息队列中获取消息并分派给程序某个窗口。
- 消息循环 应用程序运行后,会进入消息循环,在这个消息循环中,应用程序不断的从消息队列中获取相应的消息,并分派给应用程序相应的窗口。
- 窗口过程 每个窗口都有一个窗口过程来接收传递给窗口的消息,它的任务是获取消息然后相应的处理它。
Windows操作系统的消息控制
- 第一级控制中心是Windows操作系统的内核,它维护着一个消息队列
- 第二级控制中心是应用程序,它从消息队列中获取属于自己管辖的消息后做出处理。
- 第三级控制中心是窗体对象,应用程序接收到消息后会传给主窗口处理,如果主窗口不处理消息,它会往下传递给子窗口或者子控件,如果子窗口或者子控件仍然没有处理,子窗口或者子控件又会把这个消息传递给它的子控件或者子窗口,一直往下传,如果最终没有处理,这个消息又开始按照相应的顺序往上传。