📄 chap1_3.htm
字号:
<p>对话框</b></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">1.5</font><font SIZE="3">给出了查找对话框的一个例子。</font><font FACE="Times New Roman" SIZE="3"></p>
<p align="center"><img src="T1_5.jpg" alt="T1_5.jpg (8482 bytes)" WIDTH="389" HEIGHT="126"></p>
<p align="center"></font><font size="2">图<font FACE="Times New Roman">1.5 </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">1.5</font><font SIZE="3">中,查找对话框是一个独立的窗口,它显示信息并接收用户的输入。在对话框中,还包含了许多小的窗口,这些窗口被称为控件。控件是应用程序用来获得用户特定信息的窗口,比如要打开文件的名字或自动换行的设置等。应用程序也会通过控件获取所需的信息,以便控制程序的某种属性,如自动换行特性的开关。</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font><font SIZE="3">控件总是与其他窗口连用,典型的是对话框,但也可以用在普通窗口之中。常见的控件有:按钮、编辑框、列表框、组合框、静态文本等等。<b></p>
<p>消息框</font><font FACE="Times New Roman" SIZE="3"></p>
<p></font></b><font SIZE="3">消息框是用于给用户一些提示或警告的窗口。例如,消息框能够在应用程序执行某项任务过程中出现问题时通知用户。下图所示的对话框警告用户输入了一个不合法的文件名。</font><font FACE="Times New Roman" SIZE="3"></p>
<p align="center"></font><img src="T1_6.jpg" alt="T1_6.tif (100211 bytes)" WIDTH="185" HEIGHT="115"><font FACE="Times New Roman" size="2"></p>
<p align="center"></font><font size="2">图</font><font FACE="Times New Roman" size="2">1.6</p>
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p>1.3.5 </font><font SIZE="3">资源共享</font></b><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></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>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"></p>
<p>1.</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>2.</font><font SIZE="3">使用该资源;</font><font FACE="Times New Roman" SIZE="3"></p>
<p>3.</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">程序员也常常会忽略第三步。如果忽略了这一步,轻则当时不出错,但过一会儿出现程序运行出现异常情况,或干扰别的程序正常运行;重则立即死机,比如设备上下文没有释放时。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></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">CPU</font><font SIZE="3">也是一种非常重要的资源,因此应用程序应当避免长时间的占用</font><font FACE="Times New Roman" SIZE="3">CPU</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"></p>
<b><p>1.3.6 Windows</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">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">Windows</font><font SIZE="3">应用程序,一般需要:</font><font FACE="Times New Roman" SIZE="3"></p>
<p>1.C,CPP</font><font SIZE="3">源程序文件:源程序文件包含了应用程序的数据、类、功能逻辑模块(包括事件处理、用户界面对象初始化以及一些辅助例程)的定义。</font><font FACE="Times New Roman" SIZE="3"></p>
<p>2.H,HPP</font><font SIZE="3">头文件:头文件包含了</font><font FACE="Times New Roman" SIZE="3">CPP</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">C</font><font SIZE="3">源文件中所有数据、模块、类的声明。当一个</font><font FACE="Times New Roman" SIZE="3">CPP</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">C</font><font SIZE="3">源文件要调用另一个</font><font FACE="Times New Roman" SIZE="3">CPP</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">C</font><font SIZE="3">中所定义的模块功能时,需要包含那个</font><font FACE="Times New Roman" SIZE="3">CPP</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">C</font><font SIZE="3">文件对应的头文件。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">3.</font><font SIZE="3">资源文件:包含了应用程序所使用的全部资源定义,通常以</font><font FACE="Times New Roman" SIZE="3">.RC</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">CPP</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">C</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">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">应用程序中引入资源有以下一些好处:</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">1.</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>2.</font><font SIZE="3">便于统一管理和重复利用:将位图、图标、字符串等按资源文件方式组织便于统一管理和重用。比如,将所有的错误信息放到资源文件里,利用一个函数就可以负责错误提示输出,非常方便。如果在应用程序中要多次用到一个代表公司的徽标位图,就可以将它存放在资源文件中,每次用到时再从资源文件中装入。这种方式比将位图放在一个外部文件更加简单有效。</font><font FACE="Times New Roman" SIZE="3"></p>
<p>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"></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"></p>
<p align="center"></font><img src="T1_7.gif" alt="T1_7.tif (156126 bytes)" WIDTH="401" HEIGHT="300"><font FACE="Times New Roman" size="1"></p>
<p align="center"></font><font size="1">图</font><font FACE="Times New Roman" size="1">1.7
</font><font size="1">应用程序生成过程</font><font FACE="Times New Roman" size="1"></p>
<p></font><font FACE="Times New Roman" SIZE="3">C</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">CPP</font><font SIZE="3">编译器将</font><font FACE="Times New Roman" SIZE="3">C</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"></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"><b></p>
</b></font><p ALIGN="right"><font size="2">[<a href="chap1_2.htm">上一页</a>][<a href="chap1_4.htm">下一页</a>]</font></p>
<font size="4"><hr noshade color="#3973DE" size="1">
<p align="center"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作,1999<br>
未经许可,请勿以任何形式复制或转载</font></td>
</tr>
</table>
</center></div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -