料库,每一个resource规格以一个应用程式的某些特徵命名,且设定一个值给
这个特徵当预设值,也就是说,一个规格 (spec) 的形式为:
characteristic : value (特徵:值)
当应用程式开始执行时,他会先询问资料库是否有任何特徵符合自己所要
的设定,或使用相关的值,例如:
xclock*foreground:blue
意为将值blue设定给特徵xclock*foreground 。用以决定一个程式的需求
是否符合在资料库中之规格的系统部份,被称作Resource管理器。
Resource预设值能被应用到一个应用程式中的物件(通常是widget),就
如同设计整个程式一般,(例如您能够对一个特定的子视窗在某一个命令按钮
的背景色设定预设值,而不是只能针对任何应用程式的视窗背景)。为了能达
到这一点,我们需要一些严谨的命名方法,以设定物件应用预设值。
15.3.1 指定一个Resource预定应用到何处
Resource管理器根据特徵值(characteristic)决定一个预设规格是否能应
用在特别的情况,我们可将特徵值分为三个部份。
1. 您用以设定预设值的程式属性,例如:背景色、字型等。
您必需指定属性 (attribute) -- 意即您设定什麽值给他。给定一个
resource的规格 而不说明他的值是无意义的。
注意:在X的文献和手册中,属性通常被称为”resource”或
”resource name”,”Resource”也通常被用来当作我们称为特徵值。
特徵值的其他两个部份指定预设值在何处使用。例如只在特定的程式
使用或在特定型态的物件,或两者均是。
2. 应用到这个规格的应用程式的名称,假如您省略他,规格将应用到
任何的应用程式。
3. 一连串的限定(restrictions)条件:当物件符合限定条件时,才会产
生指定的应用。限定通常为widget的名称,您能够指定从零开始任何
数目的限定。例如:
xclock*foreground:blue
xedit*row1*Command*Cursor:Cntr_ptr
第一个例子没有任何限定,第二个例子有两个限定(row1 和Command)
三个部份依序排列
[<program name>] [<restrictions>] <attribute>
并以特别的分隔符号分开,我们将於稍後说明分隔符号的细节,但我
们先看一些特徵值的□例(为了简单起见,我们在□例中只用到颜色
属性)。
一些说明Resource规格的□例
.指定在任何地方中的前景色预设值为黄色。
*foreground:yellow
我们未指定任何应用程式的名称,所以此规格可应用到任何的应用程式;
我们也未指定任何限制,所以对一个应用程式在任何地方都适用。("*" 这个
符号就是我们方才提及的特别分隔号的一种)
.指定只有在xclock应用程式中的前景色预设值为粉红色。
xclock*foreground:pink
这个规格仅能在xclock适用,但是只要项目中的属性叫做
”foreground”的均适用。
.现在,针对一个特定应用程式的特定地方:
xman*topBox*foreground:blue
这个规格仅能在xman适用,而且只能在xman主选项选单中名为topBox的
物件适用。(应该适用於xman中任何叫topBox的物件,但实际上只有一个
topBox物件)
.在第二个□例(粉红色)中我们包含了应用程式名称,但忽略了任何限
制,现在我们反过来:
*command*foreground:green
也就是说,我们指定在任何应用程式中物件名称为command 的前景色预
设值为绿色。
15.3.2 用类别名称一般化规格说明
前述的例子说明了我们对预设值结构所需的大部份功能,但他们有一个限
制:您必须知道应用程式设计师设计在每一个应用程式中的widget名称,这
些资讯有时包含在程式的指南页中的一部份,但通常被省略。
无论如何,Resource管理器有一个尽量减低这个问题的方式:当您在特徵
中不论何处用到一个应用程式名称、限制或属性名称,您均可类别名称(class
name)来代替他。
应用程式类别名称(Application class name):描述程式的型态,例如
xterm 能够是Term Emul (终端机模拟器)的类别,xedit 和emacs
是Editor(编辑器)的类别。(但假如xterm 是xterm 的类别,xedit
是xedit 的类别则失去意义。)
限定类别名称 (Restriction class name):限定几乎是一定不变的widget
名称,所以在此地您能够用widget类别名称。
属性类别名称 (Attribute class name) :属性是如同widget一般的一个
型态或类别的成员(instance)。
传统上,任何的类别名称以一个大写的字母开头,其後则为小写字母,例
如属性”foreground”是属於”Foreground”类别,我们将简单的解释您如何
去发现您需要用来指定项目的类别名称。首先,我们将看一些更多的□例,这
次用到了类别或一个混合了类别和成员的□例。
含有类别名称的Resource规格说明□例
这些□例展示出您如何在Resource规格中使用类别,而较前述以更一般性
的方式设定预设值,他们也解释了您如何能使用一个类别来设定一个预设值给
较大□围的情况,和将类别和成员结合起来以拒绝预设值在某些特别情况下设
定。
.指定在任何地方前景色的预设值为黄色
*Foreground:yellow
这个□例和先前□例的区别在於我们是对Foreground类别指定预设值。这
个区别之所以重要,是因为并非任何在类别Foreground的属性,他的成员名称
都是叫foreground。例如,xclock的指针的颜色可由类别Foreground的属性来
决定,但他的成员名称不叫foreground而叫hand。
.我们能够用这种结构来帮助我们在文档不清楚的情况下,藉著以强烈对
比的组合设定预设值来分辨物件的类别:
xmh*Command*Foreground:khaki (土黄色)
xmh*Command*Background:maroon (粟色)
如此将使任何的命令widget(command widget)呈现醒目而美丽的颜色。
.对任何的本文widget(text widget) 视窗设定一个预设值,除了xedit
视窗以外:
*Text*Background:pink
xedit*Text*Background:navy
.和上例原理相同:
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




