full class name Xedit.VPaned.Box.Command
attribute instance-names borderWidth,cursor,font,label,...
attribute class-names BorderWidth,Cursor,Font,Label,...
而後Resource Manager检查每一个在资料库中的规格,看他是否和应用程
式所传来的属性和物件名称相符。假如相符发生,在资料库中规格值的部份会
传回应用程式。
在这种相符的操作中,星号和句号的区别很重要。简单来说,我们能够
想到Resource Manager只是以单字为基准来对应文字串,句号正是每一个单字
的区隔号,星号也是分隔号,但不同的是他能够通用字元的方式代表从零到任
意数目的单字,对於对应唯一的限制是在资料库中规格的属性必需对应查询应
用程式所传来的属性,您不可对属性用通用字元。
现在您能够看到不同的规格如何工作:
*foreground:yellow
能够应用於任何应用程式中的任何物件。因为星号对应到任何的应用程式和所
有的限定和物件名称。
*Command.Foreground:violet
应用於任何应用程式中任何Command 型态中Foreground类别的任何属性。
xedit.vpaned.row1.Help.background:navy
是个完整的规格但是将只影响到命名当中的物件名称的属性。(本例中,
尽管事实上是大写的,"Help"是个成员名称,他的类别是"Command" 。)
除非您有一些很特别的需求,最好不要用句点当分隔号,尽量以星号代
替,如此可减少错误发生的可能,而且在重写应用程式时,比较不会受到阶层
结构改变的影响。
上述的对应结构解释了为什麽您能够输入奇怪的规格,或resource
和属性尚未定义:意即一个规格只有当应用程式查询资料库才会附著,甚至□
围的意义也是不足道的 -- 规格对应或不对应到查询。
15.3.4 当多种Resorce规格对应的居先(precedence) 规则
我们现在有一个很弹性的方法来指定应用程式的resource,但正因他太
笼统,以致当一个应用程式查询resources 资料库时常常有数种规格和之对应,
如何解决呢?
简单地说,假如同时有超过一个规格对应,则最具体的(specific)一个会
被使用,Resource Manager有一组的居先规则用来决定是否一个规格较另一个
具体。
.使用句号为分隔号较使用星号为具体,例如:*Command.Foreground 较
*Command*Foreground 为具体。
.成员名称较类别名称具体,例如:*foreground 较*Foreground 具体。
.指定一个元素较省略他具体,例如:xmh*command*foreground较
xmh*foreground具体。
.元素靠近规格左边的星号较靠近右边的具体,例如:xmh*foreground较
*command*foreground具体。
这些规则相当直接,他们大部份可用另一种方法来说明:”假如一个规格
对应到另一个规格而为其子集合者,则前者较後者具体。”
15.3.5 在Toolkit 程式中应用程式Resource
通常一个应用程式使用Resource Manager来定义程式阶层中widget的属性
预设值,但有时需要有和widget不直接相关的设定预设值(或传值)的能力。
为了达到这点,Toolkit 提供了一个叫做Application Resource的设施,
他和非Toolkit 预设的外表原则相同 -- 应用程式定义了他本身选择的属性。
类别名称也相同,所以事实上这些属性和一般常见的阶层没有什麽不同。
xman使用到一点这个设施,他让您能在求助视窗(help window) 指定不同
的本文档案,是否在主选择视窗中指定一个您要的视窗,或当程式启动时直接
进入一个指南页等。(查看指南页,在X Default那一节,他会明确地列出他
的”应用程式特定的resources ”)。
15.3.6 Resource和non-toolkit 应用程式
并非任何的程式均使用Toolkit ,但Toolkit 几乎掌控了任何对一个应用
程式的resource管理,特别是应用程式的widget结构定义了物件和子物件的阶
层,并能适当地查询Resource Manager。但是non-Toolkit 应用程式要如何使
用Resource Manager?
答案是应用程式只需明确地查询每一个他有兴趣的属性。稍早我们曾说过
Resource Manager对resource无限制,因此应用程式能使用任何他想要的属性
名称,只要程式的文档告诉使用者他们在何处,他们就如同其他的应用程式一
样。
xcalc 应用程式是个不使用Toolkit 的程式□例,他也利用上述方式掌
握resource规格。
有几点需要注意:
.此种型态的预设值没有类别。
.程式以类似类别名称(也就是说,第一个字母大写)来定义属性,例如
xcalc 使用Background, Foreground, BorderWidth 等等。
.假如大小写错误,您的规格不会工作,例如:规格
xcalc.foreground:green
会被xcalc 忽略。
.即使这个程式定义的属性并非阶层的一部份,您仍能使用星号当分隔号,
例如:
xcalc*Foreground
range 15.4 Resources 的型态----如何指定值
直到现在我们仍然只看resource规格的”左半边”,而忽略了值(value)
的部份,或只是用色彩名称。现在,我们来看一看”右半边”(值的部份)。
简单地说,值只是个传递到应用程式的本文字串,和Resource Manager
完全相关,之後,应用程式以此值做他所要做的事。当然,在实际的操作上,
应用程式必须明确地做某些事,而Toolkit 的确也掌控了大多数这一部份的工
作,所以您可获得一致地介面。
所以当我们以一个Resource值传递我们所需时,实际上我们使用少数的型
态,您已看过他们的大部份,您在任何地方均能够resource规格来使用他们:
Colours (色彩):我们已广泛的使用过他们----毋需多做解释。
Fonts (字型):在一般的方法我们已描述过,在resource规格,您也
可使用通用字元或全名。例如:
*Font: *-courier-medium-r-*-140-*
xterm*Font: 8*13
xterm*boldFont: 8*13
demo*font: *-courier-medium-r-*-240-*
demo*boldFont: *-courier-bold-r-*-240-*
设定一个整体性的预设字型,但使用一个正常的xterm 指定一个明确的一对字
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




