分类: C/C++
2009-07-16 14:45:51
Symbian OS的对话框分为模式对话框和非模式对话框。对话框首先需要在资源文件中定义(对话框所容纳的控件也需要在资源文件中定义),然后在程序中建立对话框对象并使用资源文件中的对话框id进行初始化,最后执行对话框并显示相关内容。
对话框的种类很多,除了标准对话框外,还有窗体、通知对话框、查询对话框、列表对话框等类型。
* 窗体:与列表控件相似,但不同的是,窗体的每一个数据项都是可以编辑的。
* 通知对话框:主要用于显示用户的提示信息。
* 查询对话框:包含一个编辑框,用户可以向文本编辑器输入数据供程序查询,主要用于数据查询中。
* 列表对话框:包含一个列表控件,可以显示多项数据。
标准对话框
Symbian OS中的对话框都从CAknDialog中继承,大多数对话框是一个容器,可以容纳其他控件。下面示例如何在资源文件中定义一个带有编辑框的对话框:
RESOURCE DIALOG r_dialog_edit_dialog
{
flags = EEikDialogFlagNoDrag | EEikDialogFlagCbaButtons | EEikDialogFlagWait;
buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
items = {
DLG_LINE
{
id = EConfirmationNoteDlgCIdFileName;
type = EEikCtLabel;
control = LABEL { };
},
DLG_LINE
{
id = EConfirmationNoteDlgCIdEditor;
type = EEikCtEdwin;
control = EDWIN { maxlength = 20; };
}
};
}
DIALOG有以下几个属性需要设置:
1.flag属性。定义对话框自身的性质。示例中定义了三个属性--EEikDialogFlagNoDrag(不可拖动), EEikDialogFlagCbaButtons(使用软键),EEikDialogFlagWait(等待)。这些标志在uikon.hrh中定义。
2.buttons属性。指出对话框使用的软键。在avkon.rsg中定义。
3.items属性。定义了对话框中实际包含的内容。items由一些DLG_LINE组成,每一个DLG_LINE包含了一个控件。
4.DLG_LINE属性。表示对话框的每一行,控件通常由id,type和control组成。
在资源文件中定义好对话框之后,即可以编写对话框类,Symbian OS的所有对话框类都从CAknDialog继承而来。需要包含头文件akndialog.h。以下是CAknDialog的几个重要函数:
1.PreLayoutDynInitL(),完成对话框装载前的初始化工作。对话框中控件的初始化在此函数中进行,通过对话框的成员函数ControlOrNull()来通过id得到控件指针;如果id存在,返回CCoeControl指针,如果不存在,返回NULL。可以使用函数Control()来得到控件指针,与ControlOrNull()不同的是,如果id不存在,Control()返回一个错误。
2.OkToExitL(),点击OK键(EAknSoftkeyOk),对话框退出之前调用此函数以获取对话框中控件的数据。
3.静态函数TBool RunDlgLD(),该函数包含一个对话框的一阶构造函数ExecuteLD(),该函数用来构造、显示和销毁对话框。在程序中显示对话框,只需调用CXXXDialog::RunDlgLD()即可。
TBool CSimpleDialog::RunDlgLD()
{
CSimpleDialog* dialog=new(ELeave) CSimpleDialog();
return dialog->ExecuteLD(R_DIALOG_EDIT_DIALOG);
}
ExecuteLD()调用了CAknDialog的两个函数PrepareLC()和RunLD()。其中PrepareLC()负责将对话框指针放到清理栈,完成对话框的构建。RunLD()负责对话框的显示。