⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap1_3.htm

📁 vc教程,真正的程序员用Visual C++。如果你想当程序员
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>Windows应用程序设计的特点</title>
</head>

<body bgcolor="#FFFFFF" text="#000000" link="#3973DE" alink="#3973DE"
style="text-decoration: none" background="../bg.gif">
<div align="center"><center>

<table border="0" width="85%" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
  <tr>
    <td><div align="center"><center><table border="0" width="615" cellpadding="0"
    cellspacing="0">
      <tr>
        <td width="266" bgcolor="#15397D"></td>
        <td width="349" bgcolor="#000000"><p align="right"><a href="../index.htm"><strong><font
        COLOR="red">电脑报网络学院Visual C++网络教程</font></strong></a> </td>
      </tr>
    </table>
    </center></div><p ALIGN="CENTER"><b><font SIZE="3"><br>
    </font><font color="#3973DE" FACE="Times New Roman" SIZE="3">1.3 Windows</font><font
    SIZE="3" color="#3973DE">应用程序设计的特点</font></b></p>
    <p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; 如前所述,Windows操作系统具有MS-DOS操作系统无可比拟的优点,因而受到了广大软件开发人员的亲睐。但是,熟悉DOS环境下软件开发的程序员很快就会发现,Windows编程与DOS环境下编程相比有很大的不同。Windows要求以一种全新的思维方式进行程序设计,主要表现为以下几点:</span></p>
    <p><span style="font-size: 9pt"><b>1.3.1事件驱动的程序设计</b></span></p>
    <p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; 传统的MS-DOS程序主要采用顺序的、关联的、过程驱动的程序设计方法。一个程序是一系列预先定义好的操作序列的组合,它具有一定的开头、中间过程和结束。程序直接控制程序事件和过程的顺序。这样的程序设计方法是面向程序而不是面向用户的,交互性差,用户界面不够友好,因为它强迫用户按照某种不可更改的模式进行工作。它的基本模型如图1.1所示。<br>
    &nbsp;&nbsp;&nbsp; 事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。对于需要用户交互的应用程序来说,事件驱动的程序设计有着过程驱动方法无法替代的优点。它是一种面向用户的程序设计方法,它在程序设计过程中除了完成所需功能之外,更多的考虑了用户可能的各种输入,并针对性的设计相应的处理程序。它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。它的框图如图1.2所示:<br>
    &nbsp;&nbsp;&nbsp; 在图中,输入界面1-4并没有固定的顺序,用户可以随机选取,以任何合理的顺序来输入数据。</span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt"><img src="T1_1.gif"
    alt="T1_1.tif (69737 bytes)" WIDTH="189" HEIGHT="321"></span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt">图1.1 过程驱动模型</span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt"><img src="T1_2.gif"
    alt="T1_2.tif (200700 bytes)" WIDTH="565" HEIGHT="302"></span></p>
    <b><p ALIGN="CENTER"><span style="font-size: 9pt">图<small>1.2</small>事件驱动程序模型</span></b></p>
    <p><span style="font-size: 9pt"><b>1.3.2 消息循环与输入</b></span></p>
    <p><span style="font-size: 9pt"> 
    &nbsp;&nbsp;&nbsp; 事件驱动围绕着消息的产生与处理展开,一条消息是关于发生的事件的消息。事件驱动是靠消息循环机制来实现的。<br>
    &nbsp;&nbsp;&nbsp; 消息是一种报告有关事件发生的通知。<br>
    &nbsp;&nbsp;&nbsp; 消息类似于DOS下的用户输入,但比DOS的输入来源要广,Windows应用程序的消息来源有以下四种:<br>
    &nbsp;&nbsp;&nbsp; (1)输入消息:包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由应用程序来处理消息。<br>
    &nbsp;&nbsp;&nbsp; (2)控制消息:用来与Windows的控制对象,如列表框、按钮、检查框等进行双向通信。当用户在列表框中改动当前选择或改变了检查框的状态时发出此类消息。这类消息一般不经过应用程序消息队列,而是直接发送到控制对象上去。<br>
    &nbsp;&nbsp;&nbsp; (3)系统消息:对程序化的事件或系统时钟中断作出反应。一些系统消息,象DDE消息(动态数据交换消息)要通过Windows的系统消息队列,而有的则不通过系统消息队列而直接送入应用程序的消息队列,如创建窗口消息。<br>
    &nbsp;&nbsp;&nbsp; (4)用户消息:这是程序员自己定义并在应用程序中主动发出的,一般由应用程序的某一部分内部处理。<br>
    &nbsp;&nbsp;&nbsp; 在DOS应用程序下,可以通过getchar()、getch()等函数直接等待键盘输入,并直接向屏幕输出。而在Windows下,由于允许多个任务同时运行,应用程序的输入输出是由Windows来统一管理的。<br>
    &nbsp;&nbsp;&nbsp; Windows操作系统包括三个内核基本元件:GDI, KERNEL ,USER。其中GDI(图形设备接口)负责在屏幕上绘制像素、打印硬拷贝输出,绘制用户界面包括窗口、菜单、对话框等。系统内核KERNEL支持与操作系统密切相关的功能:如进程加载,文本切换、文件I/O,以及内存管理、线程管理等。USER为所有的用户界面对象提供支持,它用于接收和管理所有输入消息、系统消息并把它们发给相应的窗口的消息队列。消息队列是一个系统定义的内存块,用于临时存储消息;或是把消息直接发给窗口过程。每个窗口维护自己的消息队列,并从中取出消息,利用窗口函数进行处理。框图如下:</span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt"><img src="T1_3.gif"
    alt="T1_3.tif (207496 bytes)" WIDTH="456" HEIGHT="327"></span></p>
    <p ALIGN="CENTER"><span style="font-size: 9pt">图1.3 消息驱动模型</span></p>
    <p><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt"> </span></p>
    <p><span style="font-size: 9pt"><b>1.3.3 图形输出</b></span></p>
    <p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; Windows程序不仅在输入上与DOS程序不同,而且在程序输出上也与DOS有着很大不同,主要表现为:<br>
    &nbsp;&nbsp;&nbsp; 1.DOS程序独占整个显示屏幕,其他程序在后台等待。而Windows的每一个应用程序对屏幕的一部分进行处理。DOS程序可以直接往屏幕上输出,而Windows是一个多窗口的操作系统,由操作系统来统一管理屏幕输出;每个窗口要输出内容时,必须首先向操作系统发出请求(GDI请求),由操作系统完成实际的屏幕输出工作。<br>
    &nbsp;&nbsp;&nbsp; 2.Windows程序的所有输出都是图形。Windows提供了丰富的图形函数用于图形输出,这对输出图形是相当方便的,但是由于字符也被作为图形来处理,输出时的定位要比DOS复杂的多。<br>
    &nbsp;&nbsp;&nbsp; 比如,在DOS字符方式下,我们可以写出如下程序用于输出两行文字:<br>
    printf(“Hello,\n”);<br>
    printf(“This is DOS program.\n”);<br>
    &nbsp;&nbsp;&nbsp; 而在Windows下要输出这两行文字所做的工作要复杂的多。因为Windows输出是基于图形的,它输出文本时不会象DOS那样自动换行,而必须以像素为单位精确定位每一行的输出位置。另外,由于Windows提供了丰富的字体,所以在计算坐标偏移量时还必须知道当前所用字体的高度和宽度。<br>
    &nbsp;&nbsp;&nbsp; 3.Windows下的输出是设备无关的。在DOS下编写过Foxpro程序的读者常常会有这样的体会,在编写打印报表程序时,要针对不同的打印机在程序中插入不同的打印控制码,用以控制换页、字体设置等选项。这样的程序编写起来繁琐,而且不容易移植(因为换一台不同型号的打印机就要重新修改程序)。而Windows下的应用程序使用图形设备接口(GDI)来进行图形输出。GDI屏蔽了不同设备的差异,提供了设备无关的图形输出能力,Windows应用程序只要发出设备无关的GDI请求(如调用Rectangle画一个矩形),由GDI去完成实际的图形输出操作。对于一台具有打印矩形功能的PostScript打印机来说,GDI可能只需要将矩形数据传给驱动程序就可以了,然后由驱动程序产生PostScript命令绘制出相应的矩形;而对于一台没有矩形输出功能的点阵打印机来说,GDI可能需要将矩形转化为四条线,然后向驱动程序发出画线的指令,在打印机上输出矩形。当然,这两种输出在用户看来并没有什么区别。<br>
    &nbsp;&nbsp;&nbsp; Windows的图形输出是由图形设备接口(GDI)来完成的,GDI是系统原始的图形输出库,它用于在屏幕上输出像素、在打印机上输出硬拷贝以及绘制Windows用户界面。<br>
    &nbsp;&nbsp;&nbsp; GDI提供两种基本服务:创建图形输出和存储图象。GDI提供了大量用于图形输出的函数,这些函数接收应用程序发出来的绘图请求、处理绘图数据并根据当前使用设备调用相应的设备驱动程序产生绘图输出。这些绘图函数分为三类:一是文字输出,二是矢量图形函数,用于画线、圆等几何图形,三是光栅(位图)图形函数,用于绘制位图。<br>
    &nbsp;&nbsp;&nbsp; GDI识别四种类型的设备:显示屏幕、硬拷贝设备(打印机、绘图机)、位图和图元文件。前两者是物理设备,后两者是伪设备。一个伪设备提供了一种在RAM里或磁盘里存储图象的方法。位图存放的是图形的点位信息,占用较多的内存,但速度很快。图元文件保存的是GDI函数的调用和调用参数,占用内存较少,但依赖于GDI,因此不可能用某个设备来创建图元文件,而且速度比位图要慢。<br>
    &nbsp;&nbsp;&nbsp; GDI的图形输出是面向窗口的,面向窗口包含两层含义:<br>
    &nbsp;&nbsp;&nbsp; (1)每个窗口作为一个独立的绘图接口来处理,有它自己的绘图坐标。当程序在一个窗口中绘图时,首先建立缺省的绘图坐标,原点(0,0)位于窗口用户区的左上角。每个窗口必须独立的维护自己的输出。<br>
    &nbsp;&nbsp;&nbsp; (2)绘图仅对于本窗口有效,图形在窗口边界会被自动裁剪,也就是说窗口中的每一个图形都不会越出边界。即使想越出边界,也是不可能的,窗口会自动的防止其他窗口传过来的任何像素。这样,你在窗口内绘图时,就不必担心会偶然覆盖其他程序的窗口,从而保证了Windows下同时运行多个任务时各个窗口的独立性。</span></p>
    <p><span style="font-size: 9pt"><b>1.3.4 用户界面对象</b></span></p>
    <p><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp; Windows支持丰富的用户接口对象,包括:窗口、图标、菜单、对话框等等。程序员只需简单的几十行代码,就可以设计出一个非常漂亮的图形用户界面。而在DOS环境下,则需要大量的代码来完成同样的工作,而且效果也没有Windows提供的那么好。下面我们介绍一下用户界面对象中的一些术语和相关概念。</span></p>
    <p><span style="font-size: 9pt"><b>窗口</b></span></p>
    <p><span style="font-size: 9pt"> 
    &nbsp;&nbsp;&nbsp; 窗口是用户界面中最重要的部分。它是屏幕上与一个应用程序相对应的矩形区域,是用户与产生该窗口的应用程序之间的可视界面。每当用户开始运行一个应用程序时,应用程序就创建并显示一个窗口;当用户操作窗口中的对象时,程序会作出相应反应。用户通过关闭一个窗口来终止一个程序的运行;通过选择相应的应用程序窗口来选择相应的应用程序。一个典型的窗口外观如图1.4所示。</span></p>
    <p align="center"><span style="font-size: 9pt"><img src="T1_4.jpg"
    alt="T1_4.jpg (15734 bytes)" WIDTH="469" HEIGHT="324"></span></p>
    <p align="center"><span style="font-size: 9pt">图1.4 窗口</span></p>
    <p><span style="font-size: 9pt"><b>边框</b></span></p>
    <p><span style="font-size: 9pt"> 
    &nbsp;&nbsp;&nbsp; 绝大多数窗口都有一个边框,用于指示窗口的边界。同时也用来指明该窗口是否为活动窗口,当窗口活动时,边框的标题栏部分呈高亮显示。用户可以用鼠标拖动边框来调整窗口的大小。</span></p>
    <p><span style="font-size: 9pt"><b>系统菜单框</b></span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> 
    &nbsp;&nbsp;&nbsp; 系统菜单框位于窗口左上角,以当前窗口的图标方式显示,用鼠标点一下该图标(或按ALT+空格键)就弹出系统菜单。系统菜单提供标准的应用程序选项,包括:Restore(还原窗口原有的大小),Move(使窗口可以通过键盘上的光标键来移动其位置),Size(使用光标键调整窗口大小),Minimize(将窗口缩成图标),Maximize(最大化:使窗口充满整个屏幕)和Close(关闭窗口)。</span></p>
    <p><span style="font-size: 9pt"><b>标题栏</b></span></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -