Series60提供了一个全面的对话框类和基类集合,可以使用这些类创建自定义对话框,以及开发窗体(form)、通知(note)、查询(query)和列表对话框(list dialog)等。
所有对话框共有某些基本属性。首先,对话框都是拥有窗口的控件,所有对话框类最终都派生于CCoeControl。然后,由一个对话框框架管理对话框的行为,包括布局、绘制以及用户与对话框在组件控件的交互。典型情况下,对于大多数任意复杂程度的对话框,都会在一个资源文件中完整定义,并在动态实例化之后由对话框框架从资源文件装载此定义完成对话框的创建。对话框所有元素的布局和定位都是通常是自动的,当然也可以干预它。
Series60的对话框默认是模态和非等待的。模态/非模态无需多述;非等待对话框允许应用程序在后台继续处理,而等待对话框会阻止应用程序在该对话框关闭前执行任何进一步的处理。
CAknDialog是大部分Series60对话框的基类。关于对话框的使用,大体分为以下步骤:1.定义资源。2.编写对话框类。3.保存和验证对话框数据。4.动态地初始化标准对话框。5.构建和执行对话框。
下面分别叙述之:
1.定义资源
使用DIALOG定义资源,资源指定了对话框的布局,在资源中定义对话框应该包含的行数、使用的控件、对话框是否为模态以及使用的软键等。下面以一个简单的例子示范:
RESOURCE DIALOG r_simpledlg_dialog
{
flags=EEikDialogFlagNoDrag |
EEikDialogFlagNoTitleBar |
EEikDialogFlagFillAppClientRect |
EEikDialogFlagCbaButtons |
EEikDialogFlagModeless;
buttons=R_AVKON_SOFTKEYS_OPTIONS_BACK;
items=
{
DLG_LINE
{
id=ESimpleDlgCIdGameName;
type=EEikCtLabel;
control= LABEL
{
txt = GAME_NAME_TEXT;
};
}
};
}
flags说明了对话框的属性,其中的属性值可参考<uikon.hrh>
#define EEikDialogFlagWait
#define EEikDialogFlagNotifyEsc
#define EEikDialogFlagButtonsBelow
#define EEikDialogFlagButtonsRight
#define EEikDialogFlagNoUserExit
#define EEikDialogFlagModeless
#define EEikDialogFlagNoTitleBar
#define EEikDialogFlagAllKeysToButtons
#define EEikDialogFlagFillScreen
#define EEikDialogFlagNoDrag
#define EEikDialogFlagDensePacking
#define EEikDialogFlagNoBackup
#define EEikDialogFlagFillAppClientRect
#define EEikDialogFlagCbaButtons
#define EEikDialogFlagNoBorder
#define EEikDialogFlagNoShadow