📄 00000004.htm
字号:
称的来源是X由MIT 的Athena计画产生出来)。这些widget的定义你已在许多 <BR>的应用程式用过。 <BR> <BR> 我们在前节提过了Command Widget和Scrollbar Widget,至於Athena Widget <BR>Set 的其它部份包含: <BR> <BR> Label Widget:这个你可以想像 -- 在视窗中显示的一个字串或图。(例 <BR> 如在xman主选项选单中的”Manual Browser”的标题) <BR> <BR> Text Widget :我们在第10章描述xedit 时提过的”building block”。 <BR> 它提供我们所使用的编辑功能。 <BR> <BR> Viewport Widget :一个具有卷动棒的视窗,让你可以卷动视埠(viewport) <BR> 的内容,xman使用其中之一用以显示指南页之目录。 <BR> <BR> Box Widget:它以一个指定大小的盒管理sub-widget的布置,且试著将 sub- <BR> widget尽量集中在一起,例如xmh 的Reply 、Forward 等命 <BR> 令钮即是由Box Widget布置。 <BR> <BR> VPaned Widget :它管理sub-widget,将它们保存在垂直堆叠中,且显示了 <BR> 在两个sub-widget之间的分隔线上的”把手”(grip),把手 <BR> 可以选择性的让你改变一个widget的大小,而且另一个相 <BR> 关的widget大小亦伴随变化,例如我们在图10-12 看到的 <BR> xman的视窗的主要的元素是被VPaned Widget 管理的。 <BR> <BR> Form Widget :另一种管理一组sub-widget的方法,但对位置的选择有更多 <BR> 的弹性。 <BR> <BR> List Widget :它管理一群字串,将它们安排在行列中,任何的字串藉 <BR> 著於其上碰触的动作而被选择:字串会转为高亮度,且呼叫 <BR> 一个指定的函数以完成特定的动作。xman使用一个List <BR> Widget来掌握在一个指南章节中指南页的表列。 <BR> <BR> 我们现在来看一下如何组合widget以获得所需要功能,我们仍然以xman为 <BR>例。xman的指南页之目录在它的低阶是list widget ,管理目录页名称的表列 <BR>以及它本身的内容是用viewport widget (让使用者卷动至表列中所需的位置 <BR>),将指南页的widget聚集在一起,它们是包含在一个VPaned Widget 中,所 <BR>以事实上这是一个阶层状(hierarchy) 的widget,每一个可以完成它的专门 <BR>功能,而所有的应用程式所使用的Toolkit 均含有这三个widget结构。 <BR> <BR> <BR> <BR> 15.2.3 widget:名称和类别 (Names and Classes) <BR> <BR> resource和预设结构是在widget名称的基础下工作,所以我们将以对名称 <BR>的处理做一个概观方式来结束对Toolkit 的观察,并回到先前讨论的resource。 <BR> <BR> Toolkit 提供一个物件导向程式系统(object-oriented programming system) <BR>给程式设计师。它定义物件的类别(class) ,也就是指定何时物件被建立或如 <BR>何操作等等的物件性质。这些物件即是widget,系统将确保它们和其它的widget <BR>以及其它部份的应用软体以定义明确的方式交谈。 <BR> <BR> 当一个程式设计师建立一个特定类别的widget,它被称为该类别的成员 <BR>(instance)(概括的说,一个类别是一个抽象的定义,而一个成员在某些地方 <BR>实际地符合这些定义。)建立widget有必须一个名称,由程式设计师指定,( <BR>例如:程式码的实际型式为”Creat a widget, of the class Box Widget, <BR>and call it topBox ”)在某些环境下widget的类别名称也会被参考到。总 <BR>结来说,一个widget有一个成员名称和类别名称;更简单的说,一个名称和一 <BR>个类别。 <BR> <BR> <BR> <BR>15.3 Resources 如何被管理 -- Resource管理器 <BR> <BR> 让我们提醒自己一下我们试图用resource来做什麽?我们要能传递资讯给 <BR>一个应用程式,告诉它以某些方式改变它的一般性动作,例如,将视窗的边 <BR>以粉红色取代原来的黑色,或使用一些特别的字型。 <BR> <BR> X用下述的方式掌握这些需求。你设定一个包含许多项resource规格的资 <BR>料库,每一个resource规格以一个应用程式的某些特徵命名,且设定一个值给 <BR>这个特徵当预设值,也就是说,一个规格 (spec) 的形式为: <BR> <BR> characteristic : value (特徵:值) <BR> <BR> 当应用程式开始执行时,它会先询问资料库是否有任何特徵符合自己所要 <BR>的设定,或使用相关的值,例如: <BR> <BR> xclock*foreground:blue <BR> <BR> 意为将值blue设定给特徵xclock*foreground 。用以决定一个程式的需求 <BR>是否符合在资料库中之规格的系统部份,被称作Resource管理器。 <BR> <BR> Resource预设值能被应用到一个应用程式中的物件(通常是widget),就 <BR>如同设计整个程式一般,(例如你可以对一个特定的子视窗在某一个命令按钮 <BR>的背景色设定预设值,而不是只能针对所有应用程式的视窗背景)。为了能达 <BR>到这一点,我们需要一些严谨的命名方法,以设定物件应用预设值。 <BR> <BR> <BR> 15.3.1 指定一个Resource预定应用到何处 <BR> <BR> Resource管理器根据特徵值(characteristic)决定一个预设规格是否能应 <BR>用在特别的情况,我们可将特徵值分为三个部份。 <BR> <BR> 1. 你用以设定预设值的程式属性,例如:背景色、字型等。 <BR> <BR> 你必需指定属性 (attribute) -- 意即你设定什麽值给它。给定一个 <BR> resource的规格 而不说明它的值是无意义的。 <BR> <BR> 注意:在X的文献和手册中,属性通常被称为”resource”或 <BR> ”resource name”,”Resource”也通常被用来当作我们称为特徵值。 <BR> <BR> 特徵值的其它两个部份指定预设值在何处使用。例如只在特定的程式 <BR> 使用或在特定型态的物件,或两者均是。 <BR> <BR> 2. 应用到这个规格的应用程式的名称,如果你省略它,规格将应用到 <BR> 所有的应用程式。 <BR> <BR> 3. 一连串的限定(restrictions)条件:当物件符合限定条件时,才会产 <BR> 生指定的应用。限定通常为widget的名称,你可以指定从零开始任何 <BR> 数目的限定。例如: <BR> <BR> xclock*foreground:blue <BR> xedit*row1*Command*Cursor:Cntr_ptr <BR> <BR> 第一个例子没有任何限定,第二个例子有两个限定(row1 和Command) <BR> <BR> 三个部份依序排列 <BR> <BR> [<program name>] [<restrictions>] <attribute> <BR> <BR> 并以特殊的分隔符号分开,我们将於稍後说明分隔符号的细节,但我 <BR> 们先看一些特徵值的□例(为了简单起见,我们在□例中只用到颜色 <BR> 属性)。 <BR> <BR> <BR>一些说明Resource规格的□例 <BR> <BR> .指定在任何地方中的前景色预设值为黄色。 <BR> <BR> *foreground:yellow <BR> <BR> 我们未指定任何应用程式的名称,所以此规格可应用到所有的应用程式; <BR>我们也未指定任何限制,所以对一个应用程式在任何地方都适用。("*" 这个 <BR>符号就是我们方才提及的特殊分隔号的一种) <BR> <BR> .指定只有在xclock应用程式中的前景色预设值为粉红色。 <BR> <BR> xclock*foreground:pink <BR> <BR> 这个规格仅能在xclock适用,但是只要项目中的属性叫做 <BR>”foreground”的均适用。 <BR> <BR> .现在,针对一个特定应用程式的特定地方: <BR> <BR> xman*topBox*foreground:blue <BR> <BR> 这个规格仅能在xman适用,而且只能在xman主选项选单中名为topBox的 <BR>物件适用。(应该适用於xman中所有叫topBox的物件,但实际上只有一个 <BR>topBox物件) <BR> <BR> .在第二个□例(粉红色)中我们包含了应用程式名称,但忽略了任何限 <BR> 制,现在我们反过来: <BR> <BR> *command*foreground:green <BR> <BR> 也就是说,我们指定在任何应用程式中物件名称为command 的前景色预 <BR>设值为绿色。 <BR> <BR> <BR> <BR> 15.3.2 用类别名称一般化规格说明 <BR> <BR> 前述的例子说明了我们对预设值结构所需的大部份功能,但它们有一个限 <BR>制:你必须知道应用程式设计师设计在每一个应用程式中的widget名称,这 <BR>些资讯有时包含在程式的指南页中的一部份,但通常被省略。 <BR> <BR> 无论如何,Resource管理器有一个尽量减低这个问题的方式:当你在特徵 <BR>中不论何处用到一个应用程式名称、限制或属性名称,你均可类别名称(class <BR>name)来代替它。 <BR> <BR> 应用程式类别名称(Application class name):描述程式的型态,例如 <BR> xterm 可以是Term Emul (终端机模拟器)的类别,xedit 和emacs <BR> 是Editor(编辑器)的类别。(但如果xterm 是xterm 的类别,xedit <BR> 是xedit 的类别则失去意义。) <BR> <BR> 限定类别名称 (Restriction class name):限定几乎是一定不变的widget <BR> 名称,所以在此地你可以用widget类别名称。 <BR> <BR> 属性类别名称 (Attribute class name) :属性是如同widget一般的一个 <BR> 型态或类别的成员(instance)。 <BR> <BR> 传统上,所有的类别名称以一个大写的字母开头,其後则为小写字母,例 <BR>如属性”foreground”是属於”Foreground”类别,我们将简单的解释你如何 <BR>去发现你需要用来指定项目的类别名称。首先,我们将看一些更多的□例,这 <BR>次用到了类别或一个混合了类别和成员的□例。 <BR> <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -