欢迎来到天天文库
浏览记录
ID:27651893
大小:297.19 KB
页数:15页
时间:2018-12-05
《linux焦点模型分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Linux焦点模型分析A返遥0engyaov@cn.it?m.CQm),软件工稅师,旧M中囚软件)I*•发中心2008年1月21日本文以SUSE10为例,通过实例帮助读#理解Linux坏境下焦点系统与锐际、键盎输入的关系,并讨论其与Windows坏境下焦点系统的区别。另外,本文还将介绍Xserver、windowmanager以及应用程序之间如何桕互配合以筲理焦点,敁后木文将简婪介绍GTK的伟点模型、本文而向Linux应用程序幵发人W•以及GUI应用程序移杭人员,帮助读荇深入理解Linux系统的焦点系统与符理方式。概述无论珐Windows应用程序还是Linux应用程序的幵发人员,焦点(focu
2、s)都是一个非常常见的一个槪念。那么焦点宂竞是什么呢?简聆的说,焦点决定了由嘟个窗口或我掠件接收键盘输入仿息.因此.它又彼称作输入焦点、对于用户來说.圾百观的感觉是.灯光标闪动的窗W或戎彼商亮的拉件就灯焦点、很多初级应用程序员或者Windows用户有这样一个识解.认为凡是鼠标点缶的窗II就足焦点窗山当出现将的窗I域荇控件点缶启没将反应的现象时.就认为足焦点出现/问题.枣实上.焦点仅仅控制葙键湓的钩入.而鼠标输入与焦点没苻直接关系.用户之所以有这汴的误解足山子另一个槪念.系统的焦点模式rfocusmode)-魚点模式决定了鼠标如何使一个窗口获得炻点,一般來说.烘点模式被分为三柠:1.click-
3、tofocus:这种模式就逛相鉍标点由的谉口就可获得焦点,这赶Windows用户圾常见的•抻模式。鼠你点ih的窗口会彼激活.彼S于所有窗口的圾前面.并接收键涅钩入、2.focus-follow-mouse:有的地方也称这种模式为pointerfocus.它是指鼠标下的荷口可以茯取焦点、当鼠标移到一个可以茯得焦点的荷口的范围内.用户不盂耍点击窗口的某个地//就可以激活这个窗口.接收键盘输入.但是.这个窗II不一定会彼丑F所有窗口的敁前面.当鼠标移出这个銜U的范闹时.这个窗口也会随之失去烘点,3.sloppyfocus:这种模式与focus-follow-mouse—样,当拭标移至某谉口的范W内的
4、吋候,该胬口会获得焦点。与focus-follow-mouse不同的足.当铽标移出这个茁U范围时.熊点也不会随之改变。只何当铽标移动到别的可以接收熊点的脔U时.系统傀点才改变。不同的系统对焦点说式的支持不同.所使用的係点说®也衍很大的区別、Linux与Windows焦点系统Linux使用的焦点模甩与Windows存希很大的区别,对于大多数用户來说.Windows的魚点模型较为盅观、场于理解,因此.本节中我们将以Windows上的炸点模屯为引子.狯承介绍Windows与Linux上俾点系统的基本槪念.并讨论两个平台上俾点系统的区别*Windows上的焦点系统•Windows上的焦点棋式Windo
5、ws上默认采用click-to-focus的俾点校式。这足冈为Windows操作系统采用的资源哲理器explorer.exe只支持这--种焦点校式。这也是造成之前所提到的用户认为极标点ifi的窗口就足焦点窗口的错觉的原因之一。现在宵一些基于X的Windows窗口皆fl!器•如blackboxforWindows等.可以荇代explorer。这些窗1:1管理器就町以支持以上捉到的焦点悦式,•Windows上的键盘输入模型止如骱面所介绍的,烘点决定了琊个窗I」hJ•以获将铤盘铪入,那么,介绍系统的烘点模甩就不能不捉到键盘输入,下阌桢示的就足Windows上的键盘输入梭图1Windowsh键盘输入模
6、型键盘_扫描码键盘消息系统消消息驱动息队列窗口过程当键没屮的-个键彼按卜或卉被蚌放时,踺盘驷动会收到键做中职,获得该按键的扫描码(scancode〉。这珐一个与烛件相关的数tfh驭动会根裾键做布局将这个tl描码转换成设备尤关的虛拟键湓码〈virtual-keycode>.并生成一个键盘消息(WM_KEYDOWN或ftWM_KEYUP消总〉放在系统输入队列屮。在仔何给定的时刻.只符一个线程与系统検入队列连接。系统会将这个泊总从系统検入队列中取出.发送给这个线程的檢入泊总队列。该线程的泊总循环又会从本线程的消息队见取出这个消息.传递给合适的说II处观过稈.这样的辁入梭型保证了一个线稈的行为不会对M
7、•它前稃产生影响.例如.如果一个线稃挂起了,不会妨砑K•他线程接收铤盘玢入,那么,W个线程足°与系统轮入队列连接的线程"呢,哪个洵口又是这个••合适的衔□”呢?Windows有它自己的铃理方式。•Windows上的焦Z(管理在Windows上*说U消息是以线程为苹位进行矜现的。每个进程可能何多个线程在执行.每个线程都可以创迖说U。用户当舫正在使用的顶层饼I□被称为前策窗口(foregroundwi
此文档下载收益归作者所有