对话脚本

        向程序中添 加对话是件很容易的事情。每个对话都在资源数据区中做为一系列命令而存在, 而这些命令是由该项目的R C 文件中的脚本编译而来的。它们用来指定诸如对话窗口大小、标题栏中的标题以及控件的放置之类的详细资料。要修改对话, 通常仅仅需要在R C 文件中编辑脚本。

    为了举一个例子, 让我们来看一看第4 章的R e s o u r c e , 在那里, A p p W z a r d 将在H e l p 菜单上生成一个命令, 并为A b o u t( 关于) 框生成所有必需的源码, 以及具有当前在W i n d o w s 程序中越来越普遍的其他特征。A p p W i z a r d 还在项目的R C文件中编写用来定义对话及控件外观的脚本。
    下面是该脚本的另一种表示:

I D D _ A B O U T B O X D I A L O G D I S C A R D A B L E   0 , 0 , 2 1 7 , 5 5
C A P T I O N " A b o u t D e m o "
S T Y L E D S _ M O D A L F R A M E | W S _ P O P U P | W S _ C A P T I O N | W S _ S Y S M E N U
F O N T 8 , " M S S a n s S e r i f "
B E G I N
I C O N I D R _ M A I N F R A M E , I D C _ S T A T I C , 1 1 , 1 7 , 2 0 , 2 0
L T E X T " D e m o V e r s i o n   1 . 0 " ,
I D C _ S T A T I C , 4 0 , 1 0 , 1 1 9 , 8 , S S _ N O P R E F I X
L T E X T " C o p y r i g h t ( C ) 1 9 9 8 " , I D C _ S T A T I C , 4 0 , 2 5 , 1 1 9 , 8
D E F P U S H B U T T O N " O K " , I D O K , 1 7 8 , 7 , 3 2 , 1 4 , W S _ G R O U P
E N D

脚本的第一行用符号I D D _ A B O U T B O X 来标识资源,该符号在项目的R e s o u r c e . h文件中定义。D I S C A R D A B L E 关键字后面跟着的四个数字, 用来指定对话的大小。前两个数字( 0 , 0 )用来设定对话窗口左上角的原点坐标。脚本中的所有其他坐标都相对于原点, 正值的X 是向右, 正值的Y 是向下。后两个数用来确定对话窗口的尺寸, 在本例中, 窗口的宽度是2 1 7 个单元, 高度是5 5 个单元。

对话单元不是像素, 而且, 在X 和Y 方向上代表的距离也不一定相同。对话单元的尺寸取决于用于对话文字的字体, 而对话字体在默认状态下为系统字体( 在上面的脚中,可选的F O N T 指令将对话字体指定为8 磅M S S a n s S e r i f ) 。水平X 方向的一个对话单元等于用于该对话字体的1 / 4 平均字符宽。在垂直Y 方向,一个对话单元是1 / 8 字符高。因为在W i n d o w s 采用的字体测量系统里面, 将字符高度作为字体的大小, 因此, 对于一个使用了8 磅字体的对话来说, 一个垂直对话单元就是1 磅, 或1 / 1 2 英寸.

尽管与可视化控件相比, 完成控件的布局要复杂些, 但将对话单元与字体大小结合起来, 就意昧着一个对话框将在不同的屏幕分辨率下保持同一尺寸。它还可以确保当对话的字体改变时, 控件之间的相对位置保持不变, 虽然大一点儿或小一点儿的字体仅仅是导致对话窗口及其内容在尺寸上扩大或缩小。在运行时, 在对话窗口之中放置控件序应该首先通过调用G e t D i a l o g B a s e U n i t s A P I 函数来确定该对话的“ 基本单元”。基本单元定义了当前屏幕分辨率下的对话单元与像素之间的关系。M a p D i a l o g R e c t 函数可以自动实现会话, 将对话单元中的坐标翻译成相等数量的屏幕像素。M S D N 在线帮助十分详细地介绍了这两个A P I 函数。

对话脚本中的S T Y L E 伪指令指定了影响对话外观的各种标志, 例如, 为对话提供标题栏的W S _ C A P T I O N 标志。D S _ M O D A L F R A M E 标志与对话的模态样式无关, 它仅仅取决于程序创建对话的方式。模态样式的意思是, 在对话可见期间,只有属于其他程序的窗口才可以接收输入焦点, 因此, 用户在运行负责该对话的程序(或至少是线程)之前必须先关闭它。例如, A b o u t( 关于) 框就是模态对话,它可以阻塞程序执行, 直至被放弃。非模态对话则不太明显, 它允许用户不必关闭对话, 就可以在程序内切换到另一个窗口。V i s u a l C + + 文本编辑器的F i n d 命令
是非模态对话的好例子。将要在本章稍后介绍的名为C o l o r 的范例程序, 说明了如何使用V i s u a l C + + 来创建非模态样式的对话。尽管名字叫做W S _ S YS M E N U ,但这个标志只不过是在对话标题栏的最右边放置了一个C l o s e 按钮而已, 因为子窗口控件是不会有真正的系统菜单的。可选的C A P T I O N 指令指定了将要在标题栏中出现的文字。对话的控件定义语句被括在B E G I N 和E N D 语句之间。每条定义都包含有与脚本第一行一样的相同类型的四数字系列。在那里, 前两个数字给出了控件左上角相对于对话原点的X 和Y 坐标, 后两个数字用于指定控件窗口的宽度和高度。再重复一遍, 所有的坐标和尺寸都是以对话单元表示的。
这个对话脚本为A b o u t( 关于) 框提供了一个标签为O K 的推压式按钮, 以及三个静态控件, 其中一个控件包含有程序图标的一个副本。我们将在本章后面的范例代码中遇到这些控件及其他控件。如果想获得包括有普遍控件在内的一个完整控件列表, 请访问M S D N 在线帮助, 或查阅一些参考书, 例如C h a r l e s P e t z
o l d编著的P r o g r a m m i n g W i n d o w s 9 5 ( W i n d o w s 9 5 编程)。

参考资料:

Visual C++程序员指南

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值