X Window 系统使用指南--X的基本架构( 三 )


相当高阶的,(例如画一条线是指定两个端点而非记录一串萤幕上的点)通常
萤幕上被影响到的像素的数目往往是区块本身大小的十到一百倍,如此不会使
网路的负荷太重,网路的使用效率会非常的好(一般认为X的server和client
之间的传输是位元影像 (bitmaps)的观念是错误的) 。
2.2.2 Server送达Client的东西;Input Handling (输入交予)Server也会利用通讯通道送资讯回client,这些资讯包括回应client需求
是否成功和告诉client有兴趣的特殊 "事件" ,这些 "事件" 包含的讯息类似
”视窗XYZ 的滑鼠左按钮被碰触”或”视窗ABC 已被重定大小等” 。就像从client来的需求一般,server的回应也是一些和语言、机器、作业
系统无关的简单区块 。"事件" 是X的基本功能,所有的键盘输入,滑鼠按钮输入和滑鼠移动都
是由 "事件" 来控制,尤有进者,client完全依赖 "事件" 才能获得那些一定
在系统发生的而它必需知道的资讯 。我们将从一些普通的输入和移动功能著手
,实际了解 "事件" 是如何工作的:键盘输入当你从键盘按下一个键,这个动作会被server查觉到,Server便送出一个
的 "事件" 通知那些登记对这种情况有兴趣的应用程式 。这种通
知有一些限制:不是通知目前被滑鼠指标指到的视窗,便是通知目前被指定接
受所有键盘输入的视窗 。这种限制称之为设定键盘焦点(focus)。当键被松开时(通常几乎是立刻),另外一个 的 "事件"
产生了,一般除了那些修饰键(例如SHIFT 或 CONTROL),很少的应用程式会
对松开键这个 "事件" 有兴趣 。送到client的讯息区块告诉client它们是键盘 "事件" 内容的只是”编号
第几的键已被按下(或松开)”,不包含是不是ASCII 或EBCDIC字元及如何解
释等内容,而把这些留给client程式去处理,这种做法使得client程式看起来
似乎复杂,但是标准的xlib函数馆,有非常简单的副程式可供控制解释键盘 "
事件",而且通常预设成你所希望的键盘型式,换个角度来看,这种”软体”
的键盘字元相关方式允许了很大的弹性:在server这方面,对不同型式的键盘
均可以完全重新对应,在client这方面,每一个单独的键都”可程式化”,例
如按一个键即可以输入一串使用者特定的字串,或者完成一个特殊的功能等 。稍後我们会再详细讨论,不过直到目前,这些将不会影响你使用系统,事
实上,对於X系统如何处理你按下一个”A ”键,并将它转换成一个ASCII 的
”A ”字元送到你的应用程式的这类事情,你不需要太关心 。关於指标位置的 "事件"client可以要求当萤幕上的指标进入或离开它所控制的视窗时被通知,这
种 "事件" ("" 和"") 告诉client程式是进入或
离开视窗以及是哪一个视窗 。当指标进入视窗时通常用类似”高亮度”视窗这一类的方式表式,有些应
用程式是改变视窗的边框(例如从灰到黑),有些则会改变颜色,用以强调你目
前正在处理这个应用程式(视窗) 。当一个视窗未被覆盖时 -- Exposure (曝光 "事件")X和大多数其它的视窗系统有一个很大的不同点,那就是client必需负责
保持它的视窗最近的内容,server只是维持视窗在任何时刻均在萤幕上显示,
但它不负责保持视窗的内容 。当原先被其它的视窗遮住的视窗(或视窗的一部份)变成可见时,server
并不知道应该显示这个视窗的哪个部份 。server送一个exposure(曝光)"事件"
给拥有这个视窗的client,告诉它视窗的哪一个部份刚刚已变成可见,client便
会决定该怎麽作,在大多数的情况(一般为简单的应用程式或小视窗),client

推荐阅读