Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3463913
  • 博文数量: 1450
  • 博客积分: 11163
  • 博客等级: 上将
  • 技术积分: 11101
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-25 14:40
文章分类

全部博文(1450)

文章存档

2017年(5)

2014年(2)

2013年(3)

2012年(35)

2011年(39)

2010年(88)

2009年(395)

2008年(382)

2007年(241)

2006年(246)

2005年(14)

分类: 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()负责对话框的显示。

阅读(483) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~