Microsoft Windows具有许多DOS操作系统所不具备的特性,如:
a.为应用程序提供的窗口、菜单、对话框和控制特性的图形用户接口
b.队列式输入
c.与设备无关的图形
d.多任务
e.应用程序之间的动态数据交换
所以,尽管Windows应用程序也用C语言编写而成,但在许多方面与标准DOS环境下用C语言编写的程序有一定差别。Windows应用程序有其独特的风格。
1.人机对话部件及用户界面
大多数Windows应用程序使用下述部件来与用户进行人机对话:窗口(Window)、菜单(menu)、对话框(dialog box)。
窗口是Windows应用程序的主要输入输出设备,应用程序只有通过窗口才能访问系统显示器。窗口由标题条、菜单条、滚动条、边框和在系统显示器上的矩形框例出现的其它特性组成。下图给出了窗口的主要特性。
在Windows 环境中,应用程序在执行任何输出或接受任何输入之前,都必须创建自己的窗口。一旦窗口建立,Windows就能提供大量该窗口所对应的应用程序信息,Windows能自动完成许多用户请求的任务,如移动窗口位置,调整窗口大小等。该窗口的全部管理工作实际上是由应用程序和Windows 相互协作来完成的。
在DOS环境里,系统会自动为应用程序准备好系统显示器,通常它吧文件句柄传给应用程序,应用程序通过使用这个文件句柄进行常规C运行库函数或DOS的系统调用。把输出发送到显示器屏幕,产生所设计的用户界面。
除了窗口外,Windows应用程序中通常还采用菜单和对话框作为人机对话的部件。菜单是应用程序作为用户输入的主要手段,一个菜单是一组用户可查看和选择的命令列表。对话框实际上是一个临时窗口,它为用户显示更多的有关命令的信息。
在Windows环境下开发应用程序与在DOS下开发应用程序相比,用户界面的另一个优点是能创建任意数目的重叠窗口。而DOS程序则只能访问单个显示屏“表明”,Windows能以各种不同方式来显示信息,并负责为应用程序管理显示屏幕及控制窗口的位置,确保不会有两个应用程序在同一时刻征用系统显示器的同一部分。
2.队列式输入
Windows应用程序与标准C程序的最大区别之一是它们接受用户输入的方式不同。在DOS环境里,程序通过显式调用一个函数,如用getchar()来读取键盘输入,该函数一般要等待用户按下一个键后,再把相应的字符码返回给程序。在Windows环境下,Windows接收所有来自鼠标器和定时器的输入,并把相应的字符码返回给程序。在Windows环境下,Windows接收所有来自鼠标器和定时器的输入,并把它们放在相应的应用程序的“消息队列”里。当应用程序需要获取输入时,他只是简单地从消息队列里读取下一个输入消息。Windows应用程序接收输入的过程是通过一种叫“消息循环”的机制实现的。消息循环不是Windows应用程序的主要特性之一。有关消息循环机制的具体实现,请参阅Windows提供的系统资料。
在标准DOS环境里,输入一般是来自键盘的8位字符。标准输入函数getchar和fscanf从键盘读取字符,返回ASCII码或其它对应与所按键的编码。DOS程序也能接收鼠标器和定时器等输入设备的中断,将来自这些设备的信息作为输入。
在Windows环境里,应用程序使用由Windows发送的“输入消息”来接受输入。Windows的输入消息所包含的信息量远远超过在标准DOS环境里所得到的输入,它指定了系统时间、鼠标位置、键盘状态、键的扫描码(若按下该键)、按下的鼠标按钮以及产生该消息的设备。例如,有两个键盘消息WM-KEYDOWN和WM-KEYUP,分别对应与某个键的按下与释放。对于每个键盘消息,Windows都提供了一个与设备无关的用来表示按键的虚拟键码、一个由键盘产生的设备无关的扫描码以及键盘上的其它键,如SHIFT、CONTROL和NUMLOCK等键的状态。键盘、鼠标器和定时器的消息都有相同的格式,且应用程序都采用相同的方式来处理它们。
3.与设备无关的图形
Windows利用设备驱动程序提供了丰富的与设备无关的图形操作,应用程序能很方便地画出直线、矩形、圆和其他复杂图形,而不需直接与具体的输出设备打交道。应用程序也可使用同一函数在点阵打印机上火高分辨显示器上画一个圆。
4.多任务
DOS环境里,对多任务支持没有特别规定,为DOS环境编写的程序一般都假定它独占计算机的所有资源,甚至包括CPU本身。Windows则不同,它是一个多任务系统,在Windows环境中,应用程序必须与所用当前正运行的其它程序共享资源。