Tcl/Tk中的WM命令的正确使用
 

  一、WM的简单介绍
  WM的全名为Communicate with window manager,是一个TCL/TK中的内建的命令。其语法是wm option window ? args?。WM 命令用于和窗口管理器进行交互,以便控制窗口的标题,几何形状,或者是窗口大小改变。WM命令参数不同,其格式也不同。
  WM命令的一般格式有:
  wm aspect window ?minNumer minDenom maxNumer maxDenom?
  当规定了minNumer, minDenom, maxNumer, and maxDenom 后,这些参数将被传递给窗口管理器,且窗口管理器会用它们来规定窗口可用的外观比率。窗口的外观比率(宽/长)将 会被限定在minNumer/minDenom 和 maxNumer/maxDenom之间。如minNumer等被赎为空值时,那么所有已存在的外观比率的约定都会被移走。如minNumer等等,被定义,那么该命令会返回一个空串。否则,它将会返回一个包括四个元素的TCL列表。这四个元素为minNumer, minDenom, maxNumer, and maxDenom 的当前值(如果没有外观约定,那么会驼回一个为空的串。)


二、WM的使用说明
  A、wm client window ?name?
  当定义了名字以后,该命令会存储名字(该名字应为正在运行程序的主机名)到窗口的WM_CLIENT_MACHINE属性以供窗口管理者或会话管理使用。在这种情形下,该命令会返回一个为空的字符串。如果没有规定名字,该命令会返回窗口的wm client命令中最后设定的名字。如果名字定义为一个空串,该命令会从窗口中删除WM_CLIENT_MACHINE属性。

  B、wm colormapwindows window ?windowList?
  该命令用来控制WM_COLORMAP_WINDOWS属性,该属性提供关于窗口色图的信息给窗口管理器。如果没有规定窗口管理列表,该命令返回一个列表,其列表包括WM_COLORMAP_WINDOWS属性中窗口的名字。如果定义了窗口列表,列表中包括了窗口路径名列表。该命令重写给定的WM_COLORMAP_WINDOWS属性并返回一个空的字符串。The WM_COLORMAP_WINDOWS属性应包括一个窗口中的内部窗口列表,其色图和父窗口不同。属性中的窗口顺序指明了属性的顺序:当窗口取得了色图焦点时,窗口管理者将尽量地从该列表中的头部安装尽可能多的色图。如果窗口列表中没有包括包括该窗口,TK隐式地把它添加到WM_COLORMAP_WINDOWS属性的结尾。如果没有调用wm colormapwindows,TK会自动为每一个顶级窗口到内部窗口设定其特性。内部窗口和父窗口的色图不同,属于同一个层次,内部窗口的顺序则未定义。查看ICCCM相关的文档可以了解到有关WM_COLORMAP_WINDOWS属性的更多知识。

  C、wm command window ?value?
  如规定数值,该命令将在窗口的WM_COMMAND属性中存储数值,以供窗口管理者或者是会话管理者使用,并且返回一个为空的字符串。数值必须是一个正确的列表结构:其中的元素应包括调用应用程序的命令字。如果数值没有定义,那么该命令会返回用wm command命令最后设定的数值。如果数值定义为了一个为空的字符串,该命令会从窗口中删除WM_COMMAND属性。

  D、wm deiconify window
  管理窗口按正常模式进行显示。它通过映射窗口来完成。如果窗口从来没被映射,那么该命令将不会映射该窗口,但是它确保当窗口第一次被映射时,它将以无图标的方式进行显示。在窗口上,一个无图标的图口将成为活动窗口,最后该命令会返回一个为空的字符串。

  E、wm focusmodel window ?active|passive?
  如果将主动或者是被动模式作为该命令的参数,那么它定义了窗口的焦点模式。在这种情况下,该命令返回一个为空的字符串。如果没有额外的参数,那么该命令会返回当前的窗口焦点模式。一个活动的焦点模式意味着窗口会为其自身和子窗口要求输出入焦点,即使焦点在一些其它的应用程序中的时候。窗口管理者应在适当的时候将焦点给予窗口。然而,一旦焦点传给了该窗口或它的其中一个子窗口的时候,该应用程序会在窗口的子窗口中重新分配焦点。焦点模式默认为被动方式,并且TK的焦点命令也确定被动方式为其默认方式。

  F、wm frame window
  当窗口已由窗口管理者重新分配到一个窗框中时,该命令为最外面包含窗口(该窗口的父窗口是根或虚根结点)的窗框返回一个特定的窗口标识符。如果窗口没有被窗口管理器指定,那么该命令会为窗口返回一个特定的窗口标识符。

  G、wm geometry window ?newGeometry?
  如果新的几何特征定义了,那么窗口的几何特征就会改变并全一个为空的字符串会被返回。否则,当前窗口的几何特征将返回(这是由最近由手动调整大小或用一个wm geometry command进行修改后的几何特征。)。新的几何特征参数有如下的格式:NewGeometry =widthxheight?x?y, 在此widthxheight, 或者x?y可以被省略。Width和 height均为正整数,定义了窗口的预期的尺寸大小。如果窗口是分了格的(参见如下的GRIDDED GEOMETRY MANAGEMENT)那么该尺寸就会由格子单元所决定;否则它们就会由像素点来决定。X和Y定义了屏幕上窗口的位置。如果X前加上了"+",则定义了以及屏幕的右边界和窗口的右边界之间的像素点数。如果前面加上了"-",那么X则定义了屏幕的左边和窗口的左边界之间的像素点数目。如果Y的前面加上了"+",那么它定义了屏幕的顶部和窗口的顶部之间的像素点数目,如果Y的前面加上了"-",那么它定义了屏幕的底部和窗口的底部之间的像素点数目。如果新的几何参数定义为一个为空的字符串,那么任何一个已存在的窗口几何特性将会被删除,并且该窗口会转换为其窗口内部小部件所需的尺寸大小。

  H、wm grid window ?baseWidth baseHeight widthInc heightInc?
  该命令指出了窗口将会被作为一个分了格的窗口进行管理。它也定义了格子单元和像素点之间的关系。  BaseWidth 和 baseHeight定义了格子单元的数目,该数目对应于使用Tk_GeometryRequest的窗口所要求的像素尺寸。WidthInc 和heightInc定义了每个水平格和垂直格单元的像素数目。这四个数值决定了窗口可接受的范围大小,和基于像素的非负宽和高的数值相对应。TK将这些信息传送给窗口管理器;在手动调节尺寸过程中,窗口管理器会把窗口的尺寸限定为其可以接受的尺寸大小。此外,在手动调节尺寸大小时,窗口管理器将会用格子单元来显示窗口的当前尺寸大小而不是像素。如果baseWidth等等都被赎为空字符串,那么窗口不会再作为格子窗口来管理。  如果baseWidth等,都被定义了,则会返回一个为空的字符串。否则,其返回值是一个TCL列表,包含四个元素分别对应于当前的baseWidth, baseHeight, widthInc, and heightInc;如果窗口当前不是分格的,那么就会返回一个为空的字符串。注意:该命令不应频繁使用,因为Tk_SetGrid库程序和setGrid选项提供了更易使用的相同功能函数。

  I、wm group window ?pathName?
  如果定义了pathName,则会给出相关窗口组的前导字符的路径名。窗口管理可以使用该信息,列如,当一个组的前导字符被图标化了以后,将取消一个组内的所有窗口的映射。PathName可以定义为一个为空的字符串以从任一个组关系中移走窗口。如果定义了PathName,则该命令会返回一个为空的字符串,否则它将返回当前窗口的组前导符的路径名,当窗口不是任何一个组的一部分时,则是一个为空的字符串。

  J、wm iconbitmap window ?bitmap?
  如bitmap定义了,则该命令会对可由TK(参见Tk_GetBitmap手册以获得更多的信息。)接受的标准格式的位图命名。该位图将传递给窗口管理器,以便在窗口的图标中进行显示,且该命令将返回一个空值。如果为位图定义了一个为空的字符串,那么窗口的任一个图标位图则会被删除。如定义了位图,则该命令会返回一个空的字符串。否则该命令返回窗口相关的当前图标位图,或者窗口无图标位图时,返回一个为空的字符串。

  K、wm iconify window
  管理图标化的窗口。如果第一次窗口没有被映射,则最终映射时,该命令将会把其置为图标化的状态之中。

  L、wm iconmask window ?bitmap?
  如果定义了位图,那么则该命令会对可由TK(参见Tk_GetBitmap手册以获得更多的信息。)接受的标准格式的位图命名。该位图将被传递给窗口管理器,用作图标位图选项连接中的屏蔽:在屏蔽数值为零的地方,没有图标显示;而在有屏蔽值的地方,来自图标位图的那些像素位将会被显示出来。如果为位图定义一个空的字符串,那么任一个窗口的当前图标屏蔽会被取消(这等效于给所有的窗口定义一个位图)。如果规定了位图那么该命令会返回一零点空字符串。否则,该命令会返回当前窗口相关的图标屏蔽,或者在无屏蔽生效时返回一几何属性管理个空的字符串。

  M、wm iconname window ?newName?
  如果定义了新的名字,那么该名字会被传递给窗口管理器。窗口管理器会在窗口相关的图标中显示新的名字。在该情形中会返回一个空的字串。如果新的我安没有定义,那么该命令会为窗口返回当前的图标,或者在没有定义图标名的时候返回一个空字符串(在这种情形中,窗口管理者会用WM命令规定的标题来显示出窗口的标题,)。

  N、wm iconposition window ?x y?
  如果定义了X和Y,则会将其传送给窗口管理者,从而指出窗口图标的位置。在这种情形下,返回一个为空的字符串。如果没有定义X和Y,那么该命令返回的TCL列表将包括两个值,即当前图标位置(如没有有效的位置,则返回一个空字符串)。

  0、wm iconwindow window ?pathName?
  如果指定了路径名,则为窗口所使用的图标指定一个路径名,并且当窗口图标化时路径名会被映射为一个图标,并且当窗口非图标化时,路径名将再一次去除映射。如果定义路径名为一个空字符串,那么对于窗口来说任一个存在的图标窗口关系将会删除。如定义了路径名参数,那么就会返回一个非空的字符串。否则的话,该命令会返回一个图标窗口的路径名,或者是当没有为窗口定义一个图标窗口时,会返回一个为空的字符串。只要是图标化的窗口,按钮点击事件就会禁止,该方式是为了允许窗口管理者去确定其事件。注意:并不是所有的窗口管理者支持图标化窗口的概念。

  P、wm maxsize window ?width height?
  如果定义了宽和高,则会为窗口给定一个可接受的最大的尺寸。对于格子化的窗口来说,尺寸是用格子单元来计算的,除非他们是以像素来进行定义的。窗口管理者将限定窗口的尺寸大小为小于或等于宽和高。如果宽和高定义了,则该命令返回一个为空的字符串。否则,它返回一个TCL列表,该列表包括两个元素,当前有效的宽的最大值和高的最大值。最大的尺寸默认为屏幕的尺寸。如用wm resizable命令已经使重调尺寸失效,那么该命令无效。参见下面的几何参数管理以获得更加详尽的信息。

  Q、wm minsize window ?width height?
  如果定义了宽和高,他们会为窗口定义一个可能的最小尺寸。对于格子化的窗口来说,尺寸定义为格子单元数。否则则定义为像素单元数。窗口管理器会限定窗口的尺寸大于或者等于宽和高。如定义了宽和高,那么该命令返回一个为空的字符串。否则它会返回一个TCL列表,列表中包括两个元素,即当前有效的最小的宽和高的数值。最小的默认尺寸是一个像素大小。如果用wm resizable命令将重调大小功能禁掉,那么该命令将不起作用。参见下面的几何参数管理以获得更加详尽的信息。

  R、wm overrideredirect window ?boolean?
  如果定义了boolean,则必须为一个合法的布尔形式并且窗口的override-redirect标志也要设为该值。如果没有定义布尔值,那么1或是0会返回以指明是否有为窗口设定了override-redirect标志位。为窗口设定override-redirect会使窗口管理器忽略它,在其它的情形中,这意味着窗口将不会从根窗口关连到别的窗框中去,用户也不能控制使用通常窗口管理机制管理的窗口。,

  S、wm positionfrom window ?who?
  如果定义了who,它必定是应用程序或是用户,或是两者之一的缩写。它指示了窗口的当前位置是否是程序和用户所要求的。许多窗口管理器忽略了程序所要求的初始位置并且要求用户手动给窗口进行定位。如定义了用户,那么窗口管理者应在给定的位置定位窗口,而不用询问用户的帮助。如果定义了who为一个空的字符串,那么当前的位置源将会被删除。如果who定义了,该命令会返回一个为空的字符串。否则它返回给用户或程序,以指明窗口当前位置的源,或者在没有定义源的时候返回一个为空的字符串。大多数窗口管理器把源和程序看作是对等的。当调用一个wm geometry命令时,TK会自动的设置位置源给用户,除了该源已显式地设定给了程序。

  T、wm protocol window ?name? ?command?
  该命令用来管理窗口管理器协议,例如WM_DELETE_WINDOW 。Name是一个对应于窗口管理协议的原子名称,例如,WM_DELETE_WINDOW或者是WM_SAVE_YOURSELF或者是WM_TAKE_FOCUS。如果名字和命令都定义了,那么命令则会和由名字确定的协议有关。Name会被加入到窗口的WM_PROTOCOLS的属性中去,以告诉窗口管理器什么时候就该发送那个协议的消息给用户。在该情形下,该命令返回了一个为空的字符串。如定义了名字,但没定义命令的名字,那么当前该名字的命令会返回。或者在没有为该名字的定义句柄时返回一个为空的字符串。如果命令定义为一个为空的字符串,那么名字当前的句柄将会被删除,且会从WM_PROTOCOLS窗口的属性中移除。一个为空的字符串将返回。最后,如果没有定义名字也没定义命令,该命令会返回一个协议列表,这些的协议的句柄均为窗口最近所确定的。TK总是为WM_DELETE_WINDOW,定义一个协议句柄,既使你没有请求wm协议。当你没定义句柄时,如WM_DELETE_WINDOW消息到达,那么TK通过删除该窗口来处理该消息。。

  U、wm resizable window ?width height?
  该命令控制是否用户可以交互性的调节一个顶级的窗口。如定义了宽和高,他们则是布尔值以决定窗口的宽和高的值是否可以被用户更改。在这种情况下,该命令返回一个为空的字符串。如果忽略了宽和高,那么该命令将返回一个带有0和1元素的列表,指示当前窗口的宽和高是否可以被调整。在此情况时,该命令返回一个为空的字符串。默认情况下,窗口是在两个方向可调的。如果可调尺寸禁止了,那么窗口的大小将是最近调整后的大小,或者是wm geometry命令的结果。如没有这些相应的操作,那么就使用窗口的默认的大小尺寸。

  V、wm sizefrom window ?who?
  如果定义了who,它必定为程序或是用户,或是两者之一的简称。它指明了窗口的当前尺寸是否是程序或是用户所需要的。一些窗口管理器忽略程序要求的大小并且要求用户手动的调整窗口的尺寸大小。如果定义了用户,那么窗口管理者应给以窗口特定的尺寸而不需要询问用户的帮助。如果定义了who为一个为空的字符串,那么当前的尺寸源会被删除。如果定义了"who",该命令会返回一个为空的字符串。否则,它会返回用户或者是窗口以指明窗口的当前尺寸源,或者在没有特定的源时,返回一个为空的字符串。大多数的窗口管理者认为源是和程序等价的。

  W、wm state window ?newstate?
  如定义了newstate,会设定窗口为一个新的状态,否则返回窗口的当前状态。是正常,图标化,撤消,图标或者是(仅Windows系统)缩放。在图标化和图标之间的不同是图标化指一个已被图标化了的窗口(如;利用wm iconify命令),而图标指一个窗口,其目的仅是作为其它的一些窗口的图标(通过wm iconwindow命令)。图标的状态不能设定。

  X、wm title window ?string?
  如定义了字符串,那么将会传递给窗口管理器,用作窗口的标题(该窗口管理者应在窗口的标题栏中)。在该情形下,命令返回一个为空的字符串。如字符串没有定义,则命令返回窗口的当前的标题。窗口的默认标题是其名字。

  Y、 wm transient window ?master?
  如定义了master,那么将通知窗口管理器窗口是一个代表所有者的临时窗口(在此所在者是顶层窗口的路径名)。一些窗口管理器使用该信息去管理特定的窗口。如果定义所有者为一个为空的字符串,那么窗口会被标记为不再是临时窗口。如定义了所有者,那么该命令会返回一个为空的字符串。否则该命令返回当前所有者窗口的路径名,或如果窗口不是当前的临时窗口,则为一个空的字符串。

  Z、wm withdraw window
  从屏幕上撤消窗口。该命令导致了窗口会被去除映射,且从窗口管理者的记录中删除。如窗口从未被映射,那么该命令会导致窗口映射为撤消模式。并不是所有的窗口管理者知道怎样去处理被映射成撤消状态的窗口。注意:有时对于撤消一个窗口并且重新映射它,以获得窗口管理器的处理,从而改变象组那样的属性是必须的。

  A1、GEOMETRY MANAGEMENT
  顶级窗口在屏幕上以其本身的尺寸进行显示,其受内部自身的窗口小组件和几何形状管理器的限制。如顶级窗口的本来尺寸得致电更改,那么窗口的尺寸也会得到相应的改变。一个顶级的窗口能以两种方式得到一个新的尺寸。首先,用户能够得用窗口管理器提供的功能来手动改变窗口的大小,如尺寸调节句柄。第二,应用程序能用wm geometry命令来请求得到一个顶级窗口的特定尺寸。这两种情形都在TK中得到有效处理。在两种情形中,所请求的尺寸会覆盖掉原有的尺寸。可以返回到窗口中,通过利用带有空geometry字符串的命令来回到原来的尺寸。通常,一个顶级的窗口可以具有从像素到其屏幕尺寸的任何一个尺寸。然而,可以使用wm minsize和wm maxsize命令来限定可接受的尺寸大小范围。由wm minsize和wm maxsize所设定的范围可用于各种尺寸的调整,包括窗口的本来的尺寸以及手动的尺寸调节和wm geometry命令。也可以使用命令来禁止一维或多维的交互性尺寸调节。

  B1、GRIDDED GEOMETRY MANAGEMENT
  分格几何属性管理器在当一个应用程序窗口小组件支持可用尺寸的一个范围时起作用。例如,在文本编缉器中,滚动条,菜单,和其它的一些组件的大小都固定了,但是编辑窗口小组件可以支持一些文本行或字符行。就此而言,通常是让用户来决定行的数目愉及一行中的字符数,用wm geometry命令或者是交互式地改变窗口的大小。在文本方式下,或其它类似的情形中,仅有窗口中不连续的大小数值值得注意,如整数倍的行数目和一行中的字符数。任何一个像素的大小都是没有用的。
  分格几何属性管理器为TK(和窗口管理器)的此类应用提供了支持。TK(和窗口管理器)假定应用程序中有几种类型的格子,则该程序应按格子单元来调整大小而不是用像素。分格几何属性管理由打开窗口小组件的setGrid属性从而被调用。也可以用wm grid命令或者是调用Tk_SetG rid来获得调用。在每个方法中,特定的窗口小组件(或就是程序中的代码)规定了窗口内部格子大小和像素大小之间的关系。调用空参数字符串的wm grid命令可以返回得到非分格的几何特性管理。当几何属性管理有效时,所有在wm minsize, wm geometry ,wm maxsize,命令中定义的尺寸都被认为是格子单元而不是像素单元。交互式的调整大小也是经常利用格子单元而不是像素单元。


三、错误信息
  大多数现存的窗口管理者都有一些错误,影响了wm命令的功能。例如:当一个窗口已经是活动状态时,一些改变就不会生效。窗口必须撤消或者是去图标化,从而使改变可以发生。






©Tcl/Tk中文网 2003-2008
ALL RIGHTS RESERVED