设为首页 加入收藏

TOP

18.4.2 焦点
2013-10-07 01:07:47 来源: 作者: 【 】 浏览:62
Tags:18.4.2焦点

18.4.2  焦点

我们可以再次看到焦点和键处理一般如何关联的,但它们并不总是关联。

窗口服务器将大部分键发送给具有焦点的应用程序,或发送给激活的前端处理器—但不是它自己的热键或者其他捕获的键。

控件栈机制通常导致键被具有焦点的控件所处理:最上层的对话框、可见的菜单或应用程序视图;键总是提供给调试键控件,它总是不可见的;如果无对话框显示,键总是提供给菜单栏,即使它不可见也是如此。换句话说,即使这些键不与焦点关联,也能得到处理。

对话框一般将键发送到聚焦的行,但方向键和确认键的处理方式不一样。

菜单栏维护一个拥有焦点的窗格和一个拥有焦点的选项,通常给它们提供按键操作方式;但是如果有快捷键,这些快捷键的处理将不受焦点的控制。

在连三子应用程序的按键事件的处理中,焦点并没有扮演很重要的角色。如我们已经看到的,应用程序视图传递那些它不处理的当前拥有焦点的棋格的按键事件。

所有 Symbian 操作系统图形组件都支持焦点。首先,窗口服务器将焦点与窗口组(window group)关联起来。窗口服务器向当前拥有焦点的窗口组的应用程序发送按键。窗口组拥有应用程序的所有窗口,包括应用视图、菜单、对话框等。当应用程序的窗口组获得焦点和失去焦点时,窗口服务器就向应用程序发送获得焦点和失去焦点的事件。 对于窗口服务器的焦点改变事件,大多数应用程序都没有反应。不必重绘控件来表明它们已经失去了焦点,因为不管怎样,在屏幕上已经看不到失去焦点的应用程序了。

控件环境维护控件栈栈顶的可聚焦控件,并在焦点改变的时候调用控件栈上的FocusChanged()函数。与此相似,当容器控件改变焦点时,它们也应该调用包含控件的FocusChanged()函数。 控件应当根据是否具有焦点来改变自己的外观。如果需要可视化地表示焦点,则在绘图代码中使用IsFocused()来绘制适当的加亮效果或者光标。处理FocusChanged()以改变焦点状态(如重绘、激活或禁止光标)。FocusChanged()包含一个参数TBool aRedrawNow,表示是否需要即时重绘。

可以用 SetFocus()控制和询问焦点。它不遍历组件控件:每个容器根据它自己的需要处理SetFocus()的传播。

可以使用 SetNonFocusing()及相关函数来设置控件是否允许聚焦。对于一些控件来说(它们不处理输入),这可能是永久性状态;对于其他一些控件来说(类似于变灰),这可能是临时状态。 作为小结,下面列出了CCoeControl中与焦点相关的函数。

 
 
【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇18.3.2 复合控件 下一篇18.3.7 容器

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: