第八章 Symbian常用控件介绍
1 第八章 Symbian 常用控件介绍
本章目标 完成本章内容之后我们将能够: ⑧掌握与UI相关的API和组件 3知道如何使用常用组件
2 完成本章内容之后我们将能够: 掌握与UI相关的API和组件 知道如何使用常用组件 本 章 目 标
常见UI组件 本节介绍如何定义、创建和使用两种UI中都存在的 UI组件,包括两种实现之间的差异。 3.4.1菜单栏 菜单在资源文件中定义,由下列四个组件组成: 菜单栏在UIQ中是一个包含菜单标题的水平栏。在 Series60中,它从不显示。它使用一个MENU BAR资 源定义(在C+中使用CEikMenuBar) ● 菜单标题。这些标题定义一个菜单窗格,在UIQ中, 定义菜单栏中显示的文本。它们由MENU_TITLE资源定 义。注意,在Series60中, 在控制窗格中显示的标 签不在MENU TITLE资源中定义,而是在定义软键的 CBA资源中定义
3 本节介绍如何定义、创建和使用两种UI中都存在的 UI组件,包括两种实现之间的差异。 3.4.1菜单栏 菜单在资源文件中定义,由下列四个组件组成: ⚫ 菜单栏在UIQ中是一个包含菜单标题的水平栏。在 Series 60中,它从不显示。它使用一个MENU_BAR资 源定义(在C++中使用CEikMenuBar)。 ⚫ 菜单标题。这些标题定义一个菜单窗格,在UIQ中, 定义菜单栏中显示的文本。它们由MENU_TITLE资源定 义。注意,在Series 60中,在控制窗格中显示的标 签不在MENU_TITLE资源中定义,而是在定义软键的 CBA资源中定义。 常见UI组件
常见UI组件 菜单窗格,是当用户在UIQ中选择菜单标题或 在Series60中选择“选项”软键时显示的菜 单项垂直列表。它们由MENU PANE资源定义 (在C+中使用CEikMenuPane)。Series60 和UIQ都支持级联菜单窗格,尽管在UIQ中己 淘汰。 菜单项,是菜单窗格中可以由用户选择的项。 它们由MENU ITEM资源定义,与显示在菜单 窗格中的标签和选择该项时发出的命令D关 联
4 ⚫ 菜单窗格,是当用户在UIQ中选择菜单标题或 在Series 60中选择“选项”软键时显示的菜 单项垂直列表。它们由MENU_PANE资源定义 (在C++中使用 CEikMenuPane)。Series60 和UIQ都支持级联菜单窗格,尽管在UIQ中已 淘汰。 ⚫ 菜单项,是菜单窗格中可以由用户选择的项。 它们由 MENU_ITEM资源定义,与显示在菜单 窗格中的标签和选择该项时发出的命令ID关 联。 常见UI组件
常见UI组件 UIQ中的菜单栏总是可见。它支持多菜单标题, 每个标题与一个菜单窗格关联。在Series60 中,使用控制窗格,而不是菜单栏。不过, 在大多数Series60应用程序中,菜单栏仍然 需要定义,因为它定义“选项”软键激活的 菜单窗格。 在Series60和UIQ中,当应用程序启动时,使 用的初始菜单栏在EIK APP INFO资源结构中 的menubar字段中定义
5 UIQ中的菜单栏总是可见。它支持多菜单标题, 每个标题与一个菜单窗格关联。在Series 60 中,使用控制窗格,而不是菜单栏。不过, 在大多数Series 60应用程序中,菜单栏仍然 需要定义,因为它定义“选项”软键激活的 菜单窗格。 在Series 60和UIQ中,当应用程序启动时,使 用的初始菜单栏在EIK_APP_INFO资源结构中 的menubar字段中定义。 常见UI组件
常见UI组件 不同的视图通常需要不同的菜单栏,因此当视 图更改时,菜单栏也应该更改。在UIQ中,菜 单栏切换在视图的ViewActivatedL()函数中 进行,使用如下代码: MEikAppUiFactory*factory=iEikonEnv- >AppUiFactory () factory->MenuBar()- >ChangeMenuBarL (0,R NEW MENUBAR, EFalse); CEikMenuBar::ChangeMenuBarL(O的第二个参数 是新视图菜单栏的资源ID。另外两个参数在 班Q中不使用
6 不同的视图通常需要不同的菜单栏,因此当视 图更改时,菜单栏也应该更改。在UIQ中,菜 单栏切换在视图的ViewActivatedL()函数中 进行,使用如下代码: MEikAppUiFactory* factory=iEikonEnv- >AppUiFactory(); factory->MenuBar()- >ChangeMenuBarL(0,R_NEW_MENUBAR, EFalse); CEikMenuBar::ChangeMenuBarL()的第二个参数 是新视图菜单栏的资源ID。另外两个参数在 UIQ中不使用。 常见UI组件
常见UI组件 在Series60中,如果需要动态更改菜单栏, 可以使用如下代码: MEikAppUiFactory*factory=iEikonEnv- >AppUiFactory () factory->MenuBar()- >SetMenuTitleResourceId(R NEW MENUBAR); 与UIQ不同,Series60不实现 CEikMenuBar::ChangeMenuBarL();你必须使 用SetMenu TitleResourceld(
7 在Series 60中,如果需要动态更改菜单栏, 可以使用如下代码: MEikAppUiFactory* factory=iEikonEnv- >AppUiFactory(); factory->MenuBar()- >SetMenuTitleResourceId(R_NEW_MENUBAR); 与UIQ不同,Series 60不实现 CEikMenuBar::ChangeMenuBarL();你必须使 用SetMenu TitleResourceId()。 常见UI组件
常见UI组件 然而,对于在视图特定的菜单栏之间的切换, Series60通常使用不同的方案。Series60 视图由AVKON VIEW资源定义,与视图关联的 菜单栏和软键在资源中定义: STRUCT AVKON VIEW LLINK hotkyes=0; LLINK menubar=0; LLINK cba=0:
8 然而,对于在视图特定的菜单栏之间的切换, Series 60通常使用不同的方案。Series 60 视图由AVKON_VIEW资源定义,与视图关联的 菜单栏和软键在资源中定义: STRUCT AVKON_ VIEW { LLINK hotkyes=0; LLINK menubar=0; LLINK cba=0; } 常见UI组件
常见UI组件 在视图的Cons tructL()中,调用 CAknView::BaseConstructL(O,给它传递AVKON VIEW 资源的D。当视图激活时,自动使用它的菜单栏和软 键。在Series60中,对话框可以定义它们自己的 菜单栏。Series60对话框基类CAknDialog拥有一个 菜单栏,该菜单栏的资源ID在构造对话框时定义。该 对话框使用的软键在DIALOG资源的buttons字段中定 义。当该对话框启动时,它的软键标签改写以前显示 的标签,将它的菜单栏添加到控件栈,以便它在现 有菜单栏之前接收键事件。注意,不需要“选项”菜 单窗格的Series60对话框可以从CeikDialog派生
9 在视图的ConstructL()中,调用 CAknView::BaseConstructL(),给它传递AVKON_VIEW 资源的ID。当视图激活时,自动使用它的菜单栏和软 键。 在Series 60中,对话框可以定义它们自己的 菜单栏。 Series 60对话框基类CAknDialog拥有一个 菜单栏,该菜单栏的资源ID在构造对话框时定义。该 对话框使用的软键在DIALOG资源的buttons字段中定 义。当该对话框启动时,它的软键标签改写以前显示 的标签,将它的菜单栏 添加到控件栈,以便它在现 有菜单栏之前接收键事件。注意,不需要“选项”菜 单窗格的Series 60对话框可以从CeikDialog派生。 常见UI组件
常见UI组件 窗体(CAknForm)是一种派生于CAknDialog的对 话框。窗体提供它们自己的默认菜单栏和菜 单窗格。列表查询对话框 (CAknListQueryDialog)也派生于CAknDialog。 它们由AVKON LIST QUERY资源定义(使用一 个名为softkeys的字段而不是buttons来定义 它的软键)。对话框和窗体我们将在本章后 面介绍
10 窗体(CAknForm)是一种派生于CAknDialog的对 话框。窗体提供它们自己的默认菜单栏和菜 单窗格。列表查询对话框 (CAknListQueryDialog)也派生于CAknDialog。 它们由AVKON_LIST_QUERY资源定义(使用一 个名为softkeys的字段而不是buttons来定义 它的软键)。对话框和窗体我们将在本章后 面介绍。 常见UI组件