最近学习了下MFC,现在说说我对Windows操作系统的消息机制的了解。如有不对,请大家多多指正。

什么是消息? 通俗的来讲,消息就是操作系统给应用程序的一个通知,它告诉应用程序一个事件的发生,如鼠标单击,键盘按下等。

消息的组成:

  • hwnd  窗口句柄
  • message  消息常量标识符
  • lparam  通常是一个指向内存中数据的指针
  • wparam  通常是与一个消息有关的常量
  • time 消息创建的时间
  • pt 消息创建时鼠标的位置

消息的分类:

  • 标准消息 标准消息以WM_开头
  • 通知消息 通知消息是在针对控件的消息,这些控件包括按钮、组合框、菜单等
  • 自定义消息 编程人员自己定义的消息

消息系统的组成

  • 消息队列 Windows操作系统能为所有的应用程序都能维护一个消息队列,应用程序从消息队列中获取消息并分派给程序某个窗口。
  • 消息循环 应用程序运行后,会进入消息循环,在这个消息循环中,应用程序不断的从消息队列中获取相应的消息,并分派给应用程序相应的窗口。
  • 窗口过程 每个窗口都有一个窗口过程来接收传递给窗口的消息,它的任务是获取消息然后相应的处理它。

Windows操作系统的消息控制

  • 第一级控制中心是Windows操作系统的内核,它维护着一个消息队列
  • 第二级控制中心是应用程序,它从消息队列中获取属于自己管辖的消息后做出处理。
  • 第三级控制中心是窗体对象,应用程序接收到消息后会传给主窗口处理,如果主窗口不处理消息,它会往下传递给子窗口或者子控件,如果子窗口或者子控件仍然没有处理,子窗口或者子控件又会把这个消息传递给它的子控件或者子窗口,一直往下传,如果最终没有处理,这个消息又开始按照相应的顺序往上传。