面向过程-事件驱动编程-消息机制【VC MFC】

面向过程的MS-DOS编程:编程

传统的DOS程序都有并且只有一个main函数,能够在main函数中调用其它的函数,完成各类各样的功能和过程。全部函数的调用以及执行都是按照用户预约好的顺序进行的。设计模式

在面向过程的程序中,整个程序按照必定顺序进行;它是一系列预先定义好的操做序列的组合,且该过程彻底占用着CPU,控制整个程序执行的过程。并发

面向用户的事件驱动编程:函数

当Windows操做系统出现以后,面向过程的编程方式已经不能知足用户的需求。一方面,随着程序代码量的逐步增大,面向过程编程的开发与维护工做也愈来愈困难;另外一方面,面向过程的程序设计方式只能适合于在单任务的操做系统上运行。所以,必须有一种新的程序设计模式,即事件驱动编程方式。spa

Windows是一种多任务的操做系统,能够同时运行多个程序。每个程序都不能独占系统资源,而是共享各类系统资源,好比CPU和存储器等。事件驱动程序刚好适合于Windows的多任务特色。操作系统

事件驱动编程方式彻底不一样于面向过程的程序设计方式,它是由事件的产生来驱动的。事件的产生是随机的、不肯定的,没有预约顺序的。所以,各类事件能够以各类不一样的、合理的顺序出现,那么,依赖于事件驱动的程序也能够按各类不一样的、合理的流程来执行。也正是这一点,使得多个程序共享系统资源成为可能。设计

事件驱动的程序设计是一种面向用户的程序设计方式。相对于面向过程的程序设计方式来讲,事件驱动的程序设计方式是一种被动的程序设计方式。指针

面向过程的程序须要主动地去查询用户操做,并根据用户操做调用相应的处理函数。而事件驱动的程序设计方式是一种被动的程序设计方式。程序老是处于等待用户输入事件状态,而后被动地等待用户操做;用户的各类操做被称之为事件,事件驱动的程序设计方式须要事先为各类须要处理的事件编写事件响应函数;当某个用户操做产生,即某个事件发生时,相应的响应函数就会被调用。程序取得事件并作出反应,处理完毕并返回后,又处于等待事件状态。队列

Windows消息机制:事件

要更好地使用Visual C++进行Windows编程,就须要进一步了解其消息机制。在Windows应用程序中,事件驱动是围绕着消息的产生和处理展开的,消息是对发生的事件的描述信息。消息通知程序有关事件的发生。一条消息包含有消息的名字、标识、消息发生时的一些参数,以及处理这条消息的函数入口指针。

每当用户进行某种操做,好比鼠标单击或键盘按键,就会触发相应的事件。而事件是以消息的方式通知Windows应用程序的。一旦应用程序得到某条消息,就根据消息映射表查找相应消息的响应函数的入口地址,调用该函数处理消息,完成用户预期的功能。

在Windows操做系统中,应用程序主要以窗口的形式存在。窗口是一个可视的人机交互界面,用来接收各类事件,如用户键盘/鼠标事件、外设的请求事件、定时器的请求事件、信号量的请求事件等。所以,它也就成为应用程序控制消息的发送端和接收端。即Windows应用程序是围绕窗口进行的,窗口不只提供了可视化的应用程序的界面,也是Windows消息的产生和响应的地方。

消息的产生是因为相应的事件被触发;消息的发送以队列形式进行;消息响应遵循必定的顺序。MFC类库为这种消息响应机制提供了完整的处理功能。MFC类库中的不少类都具备处理相应消息的功能。在面向过程的程序设计方式中,对外设,好比鼠标、键盘等的控制是经过轮询方式进行,即分别定时查询这些设备的输入请求来完成的。而在Windows环境中,这些控制是经过消息机制完成的。所以,Windows也被称为“基于事件驱动的、消息机制的”操做系统。消息机制是Windows能进行多任务并发处理的基础,它保证了Windows下同时运行的程序可以协同做业。

在Windows中,应用程序都包含一个消息循环。该消息循环持续反复检测消息队列,查看是否有用户事件消息,这些用户事件消息包括鼠标移动、单击、双击、键盘操做和计时器到达等。

事实上,这些事件首先被Windows系统接收到。当Windows接收到这些事件后,会产生一些相应的描述事件的消息,而且将这些消息分发到相应的应用程序。应用程序接到这些消息后,根据不一样的消息查询消息映射,调用其相应的消息响应函数,完成必定的功能与过程。这一系列动做称之为消息响应。

相关文章
相关标签/搜索