📄 chap1_3.htm
字号:
<p></font><font SIZE="3">比如,在</font><font FACE="Times New Roman" SIZE="3">DOS</font><font SIZE="3">字符方式下,我们可以写出如下程序用于输出两行文字:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>printf(</font><font SIZE="3">“</font><font FACE="Times New Roman" SIZE="3">Hello,\n</font><font SIZE="3">”</font><font FACE="Times New Roman" SIZE="3">);</p>
<p>printf(</font><font SIZE="3">“</font><font FACE="Times New Roman" SIZE="3">This is
DOS program.\n</font><font SIZE="3">”</font><font FACE="Times New Roman" SIZE="3">);</p>
<p></font><font SIZE="3">而在</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">下要输出这两行文字所做的工作要复杂的多。因为</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">输出是基于图形的,它输出文本时不会象</font><font FACE="Times New Roman" SIZE="3">DOS</font><font SIZE="3">那样自动换行,而必须以像素为单位精确定位每一行的输出位置。另外,由于</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">提供了丰富的字体,所以在计算坐标偏移量时还必须知道当前所用字体的高度和宽度。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">3.Windows</font><font SIZE="3">下的输出是设备无关的。在</font><font FACE="Times New Roman" SIZE="3">DOS</font><font SIZE="3">下编写过</font><font FACE="Times New Roman" SIZE="3">Foxpro</font><font SIZE="3">程序的读者常常会有这样的体会,在编写打印报表程序时,要针对不同的打印机在程序中插入不同的打印控制码,用以控制换页、字体设置等选项。这样的程序编写起来繁琐,而且不容易移植(因为换一台不同型号的打印机就要重新修改程序)。而</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">下的应用程序使用图形设备接口(</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">)来进行图形输出。</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">屏蔽了不同设备的差异,提供了设备无关的图形输出能力,</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">应用程序只要发出设备无关的</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">请求(如调用</font><font FACE="Times New Roman" SIZE="3">Rectangle</font><font SIZE="3">画一个矩形),由</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">去完成实际的图形输出操作。对于一台具有打印矩形功能的</font><font FACE="Times New Roman" SIZE="3">PostScript</font><font SIZE="3">打印机来说,</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">可能只需要将矩形数据传给驱动程序就可以了,然后由驱动程序产生</font><font FACE="Times New Roman" SIZE="3">PostScript</font><font SIZE="3">命令绘制出相应的矩形;而对于一台没有矩形输出功能的点阵打印机来说,</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">可能需要将矩形转化为四条线,然后向驱动程序发出画线的指令,在打印机上输出矩形。当然,这两种输出在用户看来并没有什么区别。</font><font FACE="Times New Roman" SIZE="3"></p>
<p>Windows</font><font SIZE="3">的图形输出是由图形设备接口(</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">)来完成的,</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">是系统原始的图形输出库,它用于在屏幕上输出像素、在打印机上输出硬拷贝以及绘制</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">用户界面。</font><font FACE="Times New Roman" SIZE="3"></p>
<p>GDI</font><font SIZE="3">提供两种基本服务:创建图形输出和存储图象。</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">提供了大量用于图形输出的函数,这些函数接收应用程序发出来的绘图请求、处理绘图数据并根据当前使用设备调用相应的设备驱动程序产生绘图输出。这些绘图函数分为三类:一是文字输出,二是矢量图形函数,用于画线、圆等几何图形,三是光栅(位图)图形函数,用于绘制位图。</font><font FACE="Times New Roman" SIZE="3"></p>
<p>GDI</font><font SIZE="3">识别四种类型的设备:显示屏幕、硬拷贝设备(打印机、绘图机)、位图和图元文件。前两者是物理设备,后两者是伪设备。一个伪设备提供了一种在</font><font FACE="Times New Roman" SIZE="3">RAM</font><font SIZE="3">里或磁盘里存储图象的方法。位图存放的是图形的点位信息,占用较多的内存,但速度很快。图元文件保存的是</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">函数的调用和调用参数,占用内存较少,但依赖于</font><font FACE="Times New Roman" SIZE="3">GDI</font><font SIZE="3">,因此不可能用某个设备来创建图元文件,而且速度比位图要慢。</font><font FACE="Times New Roman" SIZE="3"></p>
<p>GDI</font><font SIZE="3">的图形输出是面向窗口的,面向窗口包含两层含义:</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">(</font><font FACE="Times New Roman" SIZE="3">1</font><font SIZE="3">)每个窗口作为一个独立的绘图接口来处理,有它自己的绘图坐标。当程序在一个窗口中绘图时,首先建立缺省的绘图坐标,原点(</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">)位于窗口用户区的左上角。每个窗口必须独立的维护自己的输出。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">(</font><font FACE="Times New Roman" SIZE="3">2</font><font SIZE="3">)绘图仅对于本窗口有效,图形在窗口边界会被自动裁剪,也就是说窗口中的每一个图形都不会越出边界。即使想越出边界,也是不可能的,窗口会自动的防止其他窗口传过来的任何像素。这样,你在窗口内绘图时,就不必担心会偶然覆盖其他程序的窗口,从而保证了</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">下同时运行多个任务时各个窗口的独立性。</font><b><font FACE="Times New Roman" SIZE="3"></p>
<p>1.3.4 </font><font SIZE="3">用户界面对象</font></b><font FACE="Times New Roman" SIZE="3"></p>
<p>Windows</font><font SIZE="3">支持丰富的用户接口对象,包括:窗口、图标、菜单、对话框等等。程序员只需简单的几十行代码,就可以设计出一个非常漂亮的图形用户界面。而在</font><font FACE="Times New Roman" SIZE="3">DOS</font><font SIZE="3">环境下,则需要大量的代码来完成同样的工作,而且效果也没有</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">提供的那么好。下面我们介绍一下用户界面对象中的一些术语和相关概念。<b></p>
<p>窗口</b></font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">窗口是用户界面中最重要的部分。它是屏幕上与一个应用程序相对应的矩形区域,是用户与产生该窗口的应用程序之间的可视界面。每当用户开始运行一个应用程序时,应用程序就创建并显示一个窗口;当用户操作窗口中的对象时,程序会作出相应反应。用户通过关闭一个窗口来终止一个程序的运行;通过选择相应的应用程序窗口来选择相应的应用程序。一个典型的窗口外观如图</font><font FACE="Times New Roman" SIZE="3">1.4</font><font SIZE="3">所示。</font><font FACE="Times New Roman" SIZE="3"></p>
<p align="center"><img src="T1_4.jpg" alt="T1_4.jpg (15734 bytes)" WIDTH="469" HEIGHT="324"></p>
<p align="center"></font><font size="2">图<font FACE="Times New Roman">1.4 </font>窗口<b></p>
<p></font><font SIZE="3">边框</font></b><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">绝大多数窗口都有一个边框,用于指示窗口的边界。同时也用来指明该窗口是否为活动窗口,当窗口活动时,边框的标题栏部分呈高亮显示。用户可以用鼠标拖动边框来调整窗口的大小。<b></p>
<p>系统菜单框</b></font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">系统菜单框位于窗口左上角,以当前窗口的图标方式显示,用鼠标点一下该图标(或按</font><font FACE="Times New Roman" SIZE="3">ALT+</font><font SIZE="3">空格键)就弹出系统菜单。系统菜单提供标准的应用程序选项,包括:</font><font FACE="Times New Roman" SIZE="3">Restore(</font><font SIZE="3">还原窗口原有的大小</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Move(</font><font SIZE="3">使窗口可以通过键盘上的光标键来移动其位置</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Size(</font><font SIZE="3">使用光标键调整窗口大小</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Minimize(</font><font SIZE="3">将窗口缩成图标</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">,</font><font FACE="Times New Roman" SIZE="3">Maximize(</font><font SIZE="3">最大化:使窗口充满整个屏幕</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">Close(</font><font SIZE="3">关闭窗口</font><font FACE="Times New Roman" SIZE="3">)</font><font SIZE="3">。<b></p>
<p>标题栏</b></font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">标题栏位于窗口的顶部,其中显示的文本信息用于标注应用程序,一般是应用程序的名字,以便让用户了解哪个应用程序正在运行。标题栏颜色反映该窗口是否是一个活动窗口,当为活动窗口时,标题栏呈现醒目颜色。鼠标双击标题栏可以使窗口在正常大小和最大化状态之间切换。在标题栏上按下鼠标器左键可以拖动并移动该窗口,按右键弹出窗口系统菜单。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><b><font SIZE="3"> </p>
<p>菜单栏</font></b><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">菜单栏位于标题栏下方,横跨屏幕,在它上面列出了应用程序所支持的命令,菜单栏中的项是命令的主要分类,如文件操作、编辑操作。从菜单栏中选中某一项通常会显示一个弹出菜单,其中的项是对应于指定分类中的某个任务。通过选择菜单中的一个项(菜单项),用户可以向程序发出命令,以执行某一功能。如选择“文件</font><font FACE="Times New Roman" SIZE="3">-></font><font SIZE="3">打开</font><font FACE="Times New Roman" SIZE="3">...</font><font SIZE="3">”菜单项会弹出一个打开文件对话框,让用户选择一个文件,然后打开这个文件。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">一般的,以“</font><font FACE="Times New Roman" SIZE="3">...</font><font SIZE="3">”结尾的菜单项文本表明选择该项时会弹出一个对话框,让用户输入信息,然后执行操作,如“文件</font><font FACE="Times New Roman" SIZE="3">-></font><font SIZE="3">打开</font><font FACE="Times New Roman" SIZE="3">...</font><font SIZE="3">”。若不以“</font><font FACE="Times New Roman" SIZE="3">...</font><font SIZE="3">”结尾,则表明选择该菜单项直接执行一个动作,如“编辑”菜单下的“粘贴”菜单项。若一个菜单项呈现灰色,则表明该菜单当前不可用。有时菜单项上还有加速键,加速键是一种键盘组合,它是菜单项的一种替代方式,可以让用户通过键盘直接发出命令;在键盘上按下这一键盘组合,就等效于选择了相应的菜单。如“粘贴(</font><font FACE="Times New Roman" SIZE="3">P</font><font SIZE="3">) </font><font FACE="Times New Roman" SIZE="3">CTRL+V</font><font SIZE="3">”,就表示粘贴操作的加速键是</font><font FACE="Times New Roman" SIZE="3">CTRL+V</font><font SIZE="3">,按下</font><font FACE="Times New Roman" SIZE="3">CTRL+V</font><font SIZE="3">就执行粘贴操作。<b></p>
<p>工具条</b></font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">工具条一般位于菜单栏下方,在它上面有一组位图按钮,代表一些最常用的命令。工具条可以显示或隐藏。让鼠标在某个按钮上停一会儿,在按钮下方会出现一个黄色的小窗口,里面显示关于该按钮的简短说明,叫做工具条提示(</font><font FACE="Times New Roman" SIZE="3">ToolTip</font><font SIZE="3">)。用户还可以用鼠标拖动工具条将其放在窗口的任何一侧。<b></p>
<p>客户区</b></font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">客户区是窗口中最大的一块空白矩形区域,用于显示应用程序的输出。例如,字处理程序在客户区中显示文档的当前页面。应用程序负责客户区的绘制工作,而且只有和该窗口相对应的应用程序才能向该用户区输出。<b></p>
<p>垂直滚动条和水平滚动条</b></font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">垂直滚动条和水平滚动条分别位于客户区的左侧和底部,它们各有两个方向相反的箭头和一个深色的长度可变的滚动块。可以用鼠标选中滚动条的箭头上下卷滚(选中垂直滚动条时)或水平卷滚(选中水平滚动条时)客户区的内容。滚动块的位置表示客户区中显示的内容相对于要显示的全部内容的位置,滚动块的长度表示客户区中显示的内容大小相对于全部内容大小的比例。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3"><b> </p>
<p>状态栏</b></font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">状态栏是一般位于窗口底部,用于输出菜单的说明和其他一些提示信息(如鼠标器位置、当前时间、某种状态等)。<b></p>
<p>图标</b></font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">图标是一个用于提醒用户的符号,它是一个小小的图象,用于代表一个应用程序。当一个应用程序的主窗口缩至最小时,就呈现为一个图标。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><b><font SIZE="3"> </p>
<p>光标</font></b><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p>Windows</font><font SIZE="3">的光标是显示屏上的一个位图,而不是</font><font FACE="Times New Roman" SIZE="3">DOS</font><font SIZE="3">下的一条下划线。光标用于响应鼠标或其他定位设备的移动。程序可以通过改变光标的形状来指出系统中的变化。例如,程序常显示一个计时的光标,用于指示用户一些漫长的操作正在进行之中。程序也可以通过改变光标让用户知道程序进入了一种特殊模式,例如,绘图程序经常改变光标来反映被绘制对象的类型,是直线还是圆或其他。<b></p>
<p>插入符</b></font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">插入符</font><font FACE="Times New Roman" SIZE="3">(caret)</font><font SIZE="3">是一个微小并闪烁的位图,作为一个键盘控制的指针。控制键盘输入的窗口可以创建一个插入符去通知用户:窗口现在可以进行键盘输入。在</font><font FACE="Times New Roman" SIZE="3">DOS</font><font SIZE="3">环境下,一般使用“光标”作为键盘指针,而在</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">中,“光标”被作为鼠标指针。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">应用程序必须维护这个插入符。在</font><font FACE="Times New Roman" SIZE="3">Windows</font><font SIZE="3">中,在一个时间只允许有一个插入符存在。因此,要使用插入符号作为键盘指针的应用程序必须在取得焦点时创建一个插入符号,并在失去焦点后删除它。<b></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -