● Windows,应用程序是事件驱动(或称作消息驱动)的应用程序。 而Windows是一个多任务的操作系统,也就是说,在同一时刻, 在Windows中有着多个应用程序的实例正在运行,例如我在打开 字处理软件Notepad键人纯文本的同时,还打开了Winmap来播放 歌曲。在这样的一个操作系统中,不可能像过去的DOS那样,由 一个应用程序来享用所有的系统资源,这些资源是由Windows:统 一管理的。那么,特定的应用程序如何获得用户输入的信息呢? 事实上,Windows时刻监视着用户的一举一动,并分析用户的动 作与哪一个应用程序相关,然后,将用户的动作以消息的形式发 送给该应用程序,应用程序时刻等待着消息的到来,一旦发现它 的消息队列中有未处理的消息,就获取并分析该消息,最后,应 用程序根据消息所包含的内容采取适当的动作来响应用户所作的 操作。 ● Windows为每一个应用程序,确切地说是每一个线程维护相应的 消息队列。应用程序的任务就是不停地从它的消息队列中获取消 息,分析和处理消息,直到接到一条叫作NM QUIT消息为止, 这个过程通常是由一种叫作消息循环的程序结构来实现的
⚫ Windows应用程序是事件驱动(或称作消息驱动)的应用程序。 而 Windows 是一个多任务的操作系统,也就是说,在同一时刻, 在Windows中有着多个应用程序的实例正在运行,例如我在打开 字处理软件Notepad键人纯文本的同时,还打开了Winmap来播放 歌曲。在这样的一个操作系统中,不可能像过去的DOS那样,由 一个应用程序来享用所有的系统资源,这些资源是由Windows统 一管理的。那么,特定的应用程序如何获得用户输入的信息呢? 事实上,Windows时刻监视着用户的一举一动,并分析用户的动 作与哪一个应用程序相关,然后,将用户的动作以消息的形式发 送给该应用程序,应用程序时刻等待着消息的到来,一旦发现它 的消息队列中有未处理的消息,就获取并分析该消息,最后,应 用程序根据消息所包含的内容采取适当的动作来响应用户所作的 操作。 ⚫ Windows为每一个应用程序,确切地说是每一个线程维护相应的 消息队列。应用程序的任务就是不停地从它的消息队列中获取消 息,分析和处理消息,直到接到一条叫作WM_QUIT消息为止, 这个过程通常是由一种叫作消息循环的程序结构来实现的
Windows能向应用程序发送的消息多达数百种,但是,对 于一般的应用程序来说,只是其中的一部分有意义,如果你的 应用程序只使用鼠标,那么如VM KEYUP、NM KEYDOWN 和VM CHAR等消息就没有任何意义,也就是说,应用程序中 事实上不需要处理这些事件,对于这些事件,只需要交给 Vindows作默认的处理即可。因此,在应用程序中,我们需要 处理的事件只是所有事件中的一小部分。 事件驱动围绕着消息的产生与处理展开,一条消息是关于 发生的事件的消息。事件驱动是靠消息循环机制来实现的
Windows能向应用程序发送的消息多达数百种,但是,对 于一般的应用程序来说,只是其中的一部分有意义,如果你的 应用程序只使用鼠标,那么如 WM_KEYUP、WM_KEYDOWN 和WM_CHAR等消息就没有任何意义,也就是说,应用程序中 事实上不需要处理这些事件,对于这些事件,只需要交给 Windows作默认的处理即可。因此,在应用程序中,我们需要 处理的事件只是所有事件中的一小部分。 事件驱动围绕着消息的产生与处理展开,一条消息是关于 发生的事件的消息。事件驱动是靠消息循环机制来实现的
Windows应用程序的消息来源有以下4种: (1)输入消息:包括键盘和鼠标的输入。这一类消息首先放在系统消息队列 中,然后由Windows将它们送入应用程序消息队列中,由应用程序来处理消 息。 (2)控制消息:用来与Windows的控制对象,如列表框、按钮、检查框等进 行双向通信。当用户在列表框中改动当前选择或改变了检查框的状态时发出 此类消息。这类消息一般不经过应用程序消息队列,而是直接发送到控制对 象上去。 (3)系统消息:对程序化的事件或系统时钟中断作出反应。一些系统消息 像DDE消息(动态数据交换消息)要通过Windows的系统消息队列,而有的 则不通过系统消息队列而直接送入应用程序的消息队列,如创建窗口消息。 (4)用户消息:这是程序员自己定义并在应用程序中主动发出的,一般由 应用程序的某一部分内部处理。 Windows7程序在处理消息时使用了一种叫作回调函数(Callback Function)的特 殊函数。 回调函数由应用程序定义,但是,在应用程序中并没有调用回调函数的代码, 回调函数是供操作系统或者其子系统调用的,这种调用通常在某一事件发生 或者在窗口或字体被枚举时。典型的回调函数有窗口过程、对话框过程和钩 子函数
Windows 应用程序的消息来源有以下4种: (l)输入消息:包括键盘和鼠标的输入。这一类消息首先放在系统消息队列 中,然后由Windows将它们送入应用程序消息队列中,由应用程序来处理消 息。 (2)控制消息:用来与Windows的控制对象,如列表框、按钮、检查框等进 行双向通信。当用户在列表框中改动当前选择或改变了检查框的状态时发出 此类消息。这类消息一般不经过应用程序消息队列,而是直接发送到控制对 象上去。 (3)系统消息:对程序化的事件或系统时钟中断作出反应。一些系统消息, 像DDE消息(动态数据交换消息)要通过Windows的系统消息队列,而有的 则不通过系统消息队列而直接送入应用程序的消息队列,如创建窗口消息。 (4)用户消息:这是程序员自己定义并在应用程序中主动发出的,一般由 应用程序的某一部分内部处理。 Windows程序在处理消息时使用了一种叫作回调函数(Callback Function)的特 殊函数。 回调函数由应用程序定义,但是,在应用程序中并没有调用回调函数的代码, 回调函数是供操作系统或者其子系统调用的,这种调用通常在某一事件发生, 或者在窗口或字体被枚举时。典型的回调函数有窗口过程、对话框过程和钩 子函数
第四节Windows API和SDK 一、 Windows API 说到Windows编程,就不能不谈到Windows API(Windows Application Programming Interface,Windows)应用程序编程接口),它是所有Windows 应用程序的根本之所在。简单地说,API就是一系列的例程,应用程序通过 调用这些例程来请求操作系统完成一些低级服务。在Windows这样的图形 用户界面中,应用程序的窗口、图标、菜单和对话框等就是由API来管理和 维护的。在DOS应用程序下,可以通过getchar (等函数直接等待键盘输入 并直接向屏幕输出。而在Windows下,由于允许多个任务同时运行,应用 程序的输入输出是由Windows来统一管理的。Windows操作系统包括3个 内核基本元件:GDI,KERNEL,USER。其中GDI(图形设备接口)负 责在屏幕上绘制像素、打印硬拷贝输出、绘制用户界面(包括窗口、菜单。 对话框)等。系统内核KERNEL支持与操作系统密切相关的功能:如进程 加载,文本切换、文件I/O,以及内存管理、线程管理等。USER为所有的 用户界面对象提供支持,它用于接收和管理所有输入消息、系统消息并把 它们发给相应的窗口的消息队列。消息队列是一个系统定义的内存块,用 于临时存储消息:或是把消息直接发给窗口过程。每个窗口维护自己的消 息队列,并从中取出消息,利用窗口函数进行处理
第四节 Windows API和 SDK ⚫ 一、Windows API ⚫ 说到 Windows编程,就不能不谈到 Windows API(Windows Application Programming Interface,Windows应用程序编程接口),它是所有 Windows 应用程序的根本之所在。简单地说,API就是一系列的例程,应用程序通过 调用这些例程来请求操作系统完成一些低级服务。在Windows这样的图形 用户界面中,应用程序的窗口、图标、菜单和对话框等就是由API来管理和 维护的。在DOS应用程序下,可以通过getchar ()等函数直接等待键盘输入, 并直接向屏幕输出。而在Windows下,由于允许多个任务同时运行,应用 程序的输入输出是由Windows来统一管理的。 Windows 操作系统包括 3个 内核基本元件: GDI,KERNEL,USER。其中 GDI(图形设备接口)负 责在屏幕上绘制像素、打印硬拷贝输出、绘制用户界面(包括窗口、菜单。 对话框)等。系统内核KERNEL支持与操作系统密切相关的功能:如进程 加载,文本切换、文件I/O,以及内存管理、线程管理等。USER为所有的 用户界面对象提供支持,它用于接收和管理所有输入消息、系统消息并把 它们发给相应的窗口的消息队列。消息队列是一个系统定义的内存块,用 于临时存储消息;或是把消息直接发给窗口过程。每个窗口维护自己的消 息队列,并从中取出消息,利用窗口函数进行处理
● Windows API,具有两种基本类型:Winl6API和Win32API。两者 在很多方面非常相像,但是Win32API除了凡乎包括了Winl6API 中的所有内容以外,还包括很多的其他内容。Windows API依靠3 个主要的核心组件提供Windows的大部分函数,在Winl6和Win32 中,它们具有不同的名称,如表1一1所示。 表1-1 Win16和Win32的核心组件 Win16 API Win32 API USER.EXE USER32.DLL GDLEXE GDI32.DLL KRNL386.EXE KERNEL32.DLL 虽然Wil6API组件带有.EXE的扩展名,但是它们事实上都是动 态链接库(.DLL),不能单独运行。其他一些非核心的Windows API 由其他组件所提供的DLL来实现,这些组件包括通用对话框、打 印、文件压缩、版本控制以及多媒体支持等
⚫ Windows API具有两种基本类型: Winl6 API和Win32 API。两者 在很多方面非常相像,但是Win32 API除了几乎包括了Winl6 API 中的所有内容以外,还包括很多的其他内容。Windows API依靠 3 个主要的核心组件提供 Windows的大部分函数,在Winl6和 Win32 中,它们具有不同的名称,如表l一1所示。 ⚫ ⚫ ⚫ 虽然Winl6 API组件带有.EXE的扩展名,但是它们事实上都是动 态链接库(.DLL),不能单独运行。其他一些非核心的Windows API 由其他组件所提供的DLL来实现,这些组件包括通用对话框、打 印、文件压缩、版本控制以及多媒体支持等