Windows应用程序,操作系统,计算机硬件之间的相互关系
Windows程序设计是一种事件驱动的程序设计模式,当用户需要完成某种功能的时候,需要调动操作系统的某种支持,然后操作系统将用户的需要封装成消息,并投递到消息队列当中,应用程序从消息队列中取走消息,并进行响应。
操作系统与计算机硬件的交互
应用程序和操作系统的交互
应用程序可以通知操作系统执行某个具体的动作,应用程序是以函数调用的方式来通知操作系统执行相应的功能。
操作系统能够将输入设备的变化上传给应用程序。这个变化可以看成是一个事件,操作系统并不决定将这一时间事件如何做出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件做出反应。对事件做出反应的过程就是消息响应。
Windows API
操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是操作系统提供给应用程序编程的接口,简称Windows API。
操作系统如何将感知到的事件传递给应用程序?
这是通过消息机制来实现的,操作系统将每个事件都包装成一个称为消息的结构体MAG来传递给应用程序
1 | typedef struct tagMSG { |
HWND hwnd
Handle to the window whose window procedure receives the message.
窗口的句柄,其窗口过程接收消息。// 资源的标识 操作系统通过句柄来找到相应的资源 (类比指针)
UINT message
Specifies the message identifier.
指定消息标识符。
WPARAM wParam
Specifies additional information about the message. The exact meaning depends on the value of the message member.
指定关于消息的附加信息。确切的含义取决于消息成员的值。
LPARAM lParam
Specifies additional information about the message. The exact meaning depends on the value of the message member.
指定关于消息的附加信息。确切的含义取决于消息成员的值。
DWORD time
Specifies the time at which the message was posted.
指定消息发布的时间。
POINT pt
Specifies the cursor position, in screen coordinates, when the message was posted.
指定消息发布时的光标位置(以屏幕坐标表示)。
消息队列
操作系统会为每一个应用程序建立一个消息队列, 这个消息队列实际上是一个先进先出的缓冲区(数组),消息队列中的每一个元素都是一个消息,操作系统将获取到的消息按先后顺序一个一个的放到消息队列中,应用程序总是取走消息队列的第一个元素,应用程序取得消息后,便能够知道用户的操作和程序状态的变化,应用程序得到消息后,便要对消息进行处理,称为消息响应。