数据查询对话框要求用户输入文本,确定后作相应的响应处理,用户可以输入的文本可以是文字、数字、电话号码、日期、时间、口令等。表-1列出了常用的数据查询的类型。
表-1 数据查询类型
类型 | 类 | 布局 | 控件 |
无格式文本 | CAknTextQueryDialog | EDataLayout | EDWIN |
电话号码 | CAknTextQueryDialog | EPhoneLayout | EDWIN |
PIN | CAknTextQueryDialog | EPinLayout | SECRETED |
口令 | CAknTextQueryDialog | ECodeLayout | SECRETED |
日期 | CAknTimeQueryDialog | EDateLayout | DATE_EDITOR |
时间 | CAknTimeQueryDialog | ETimeLayout | TIME_EDITOR |
持续期 | CAknDurationQueryDialog | EDurationLayout | TIME_EDITR |
浮点行 | CAknFloatingPointQueryDialog | EFloatingPointLayout | FLPTED |
多行 | CAknMultiLineDataQueryDialog | EAknMultiLineDataQueryLayout | 根据使用而不同 |
数字 | CAknNumberQueryDialog | ENumberLayout | AVKON_INTEGER_EDWIN |
数据查询是一种基本的查询方式,它通过接受用户的数据输入来确定程序的执行流程。例如当程序要求保存数据时,通常要求用户输入保存数据的文件名,然后按用户输入的文件名保存数据。
在程序中,首先在资源文件中定义查询对话框。
RESOURCE DIALOG r_data_query_dialog
{
flags =EGeneralQueryFlags;
buttons =R_AVKON_SOFTKEYS_OK_CANCEL;
items=
{
DLG_LINE
{
type = EAknCtQuery;
id = 1;
control = AVKON_DATA_QUERY
{
layout = EDataLayout;
control = EDWIN
{
width = 20;
lines = 1;
maxlength = 20;
};
};
}
};
}
查询对话框资源定义了对话框的属性。
(1)flags。此处定义为EGeneralQueryFalgs,即通用标记。
(2)button。指定对话框使用的按键。此处的R_AVKON_SOFTKEYS_OK_CANCEL表示左键为OK,右键为Cancel。
(3)control。此处定义为AVKON_DATA_QUERY,这是查询对话框的控件。在control中规定了对话框的布局Layout,这里指定为EDataLayout,这是一种通用的数据布局方式。
在查询对话框中还定义了一个编辑器控件,在资源文件中定义为EDWIN,并指定了它的三个属性width(宽度)、lines(行数)和maxlength(最大长度)。资源文件定义好之后,在程序文件中就可以使用查询对话框。使用代码如下所示。
TBuf<20> fileName;
CAknTextQueryDialog* queryDialog =CAknTextQueryDialog::NewL(fileName);
CleanupStack::PushL(queryDialog);
HBufC* prompt = StringLoader::LoadLC(R_DATA_QUERY_PROMPT);
queryDialog->SetPromptL(*prompt);
CleanupStack::PopAndDestroy(prompt);
CleanupStack::Pop(queryDialog);
if(queryDialog->ExecuteLD(R_DATA_QUERY_DIALOG))
{
}
这里使用的是无格式的文本查询对话框,它的类为CAknTextQueryDialog。(1)句首先调用该类的NewL()函数建立对象,NewL()函数需要一个TBuf类型的描述符作为参数,该参数用于接受用户输入的数据,要求用户输入文件名。
作为对话框来说,(2)句将给用户一定的提示信息,以下这段代码将给查询对话框增加一个提示内容。
HBufC* prompt = StringLoader::LoadLC(R_DATA_QUERY_PROMPT);
queryDialog->SetPromptL(*prompt);
CleanupStack::PopAndDestroy(prompt);
提示的文本在资源文件中定义如下所示。
RESOURCE TBUF r_data_query_prompt
{
buf = "Inputfile name:";
}
定 义文本的方式为RESOURCE TBUF,该结构有一个参数buf,buf的值就是程序要定义的文本。最(3)句调用ExecuteLD执行对话框,如果用户选择确 定,ExecuteLD()函数返回ETrue;否则返回EFalse。这里没有给出具体的保存顾数据的代码,可以根据需要自行添加上去。另外需要说明的 一点是,由于ExecuteLD()函数有一个压栈的过程,所以在调用ExecuteLD()函数之前必须把queryDialog弹栈。