Linux 焦点模型分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux 焦点模型分析

Linux 焦点模型分析冯 遥遥 (fengyaoy@), 软件工程师, IBM 中国软件开发中心 2008 年 1 月 21 日 本文以 SUSE 10 为例,通过实例帮助读者理解 Linux 环境下焦点系统与鼠标、键盘输入的关系,并讨论其与 Windows 环境下焦点系统的区别。另外,本文还将介绍 X server 、 window manager 以及应用程序之间如何相互配合以管理焦点。最后本文将简要介绍 GTK 的焦点模型。本文面向 Linux 应用程序开发人员,以及 GUI 应用程序移植人员。帮助读者深入理解 Linux 系统的焦点系统与管理方式。 概述 无论是 Windows 应用程序还是 Linux 应用程序的开发人员,焦点( focus )都是一个非常常见的一个概念。那么焦点究竟是什么呢?简单的说,焦点决定了由哪个窗口或者控件接收键盘输入信息,因此,它又被称作输入焦点。对于用户来说,最直观的感觉是,有光标闪动的窗口或者被高亮的控件就有焦点。 很多初级应用程序员或者 Windows 用户有这样一个误解,认为凡是鼠标点击的窗口就是焦点窗口。当出现有的窗口或者控件点击后没有反应的现象时,就认为是焦点出现了问题。事实上,焦点仅仅控制着键盘的输入,而鼠标输入与焦点没有直接关系。用户之所以有这样的误解是由于另一个概念,系统的焦点模式(focus mode )。焦点模式决定了鼠标如何使一个窗口获得焦点。一般来说,焦点模式被分为三种: click-to focus :这种模式就是指鼠标点击的窗口就可获得焦点。这是Windows用户最常见的一种模式。鼠标点击的窗口会被激活,被置于所有窗口的最前面,并接收键盘输入。 focus-follow-mouse :有的地方也称这种模式为 pointer focus 。它是指鼠标下的窗口可以获取焦点。当鼠标移到一个可以获得焦点的窗口的范围内,用户不需要点击窗口的某个地方就可以激活这个窗口,接收键盘输入。但是,这个窗口不一定会被置于所有窗口的最前面。当鼠标移出这个窗口的范围时,这个窗口也会随之失去焦点。 sloppy focus :这种模式与 focus-follow-mouse 一样,当鼠标移至某窗口的范围内的时候,该窗口会获得焦点。与 focus-follow-mouse 不同的是,当鼠标移出这个窗口范围时,焦点也不会随之改变。只有当鼠标移动到别的可以接收焦点的窗口时,系统焦点才改变。 不同的系统对焦点模式的支持不同,所使用的焦点模型也有很大的区别。 Linux 与 Windows 焦点系统 Linux 使用的焦点模型与 Windows 有着很大的区别。对于大多数用户来说,Windows 的焦点模型较为直观、易于理解,因此,本节中我们将以Windows 上的焦点模型为引子,着重介绍 Windows 与 Linux 上焦点系统的基本概念,并讨论两个平台上焦点系统的区别。 Windows 上的焦点系统 Windows 上的焦点模式 Windows 上默认采用 click-to-focus 的焦点模式。这是因为 Windows 操作系统采用的资源管理器 explorer.exe 只支持这一种焦点模式。这也是造成之前所提到的用户认为鼠标点击的窗口就是焦点窗口的错觉的原因之一。 现在有一些基于 X 的 Windows 窗口管理器,如 blackbox for Windows 等,可以替代explorer。这些窗口管理器就可以支持以上提到的焦点模式。 Windows 上的键盘输入模型 正如前面所介绍的,焦点决定了哪个窗口可以获得键盘输入。那么,介绍系统的焦点模型就不能不提到键盘输入。下图展示的就是 Windows 上的键盘输入模型。 图 1 Windows 上键盘输入模型 当键盘中的一个键被按下或者被释放时,键盘驱动会收到键盘中断,获得该按键的扫描码( scan code )。这是一个与硬件相关的数值。驱动会根据键盘布局将这个扫描码转换成设备无关的虚拟键盘码( virtual-key code ),并生成一个键盘消息( WM_KEYDOWN 或者 WM_KEYUP 消息)放在系统输入队列中。在任何给定的时刻,只有一个线程与系统输入队列连接。系统会将这个消息从系统输入队列中取出,发送给这个线程的输入消息队列。该线程的消息循环又会从本线程的消息队里取出这个消息,传递给合适的窗口处理过程。这样的输入模型保证了一个线程的行为不会对其它前程产生影响。例如,如果一个线程挂起了,不会妨碍其他线程接收键盘输入。 那么,哪个线程是“与系统输入队列连接的线程”呢,哪个窗口又是这个“合适的窗口”呢?Windows 有它自己的管理方式。 Windows 上的焦点管理 在 Windows 上,窗口消息是以线程为

文档评论(0)

almm118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档