Symbian常用对话框
http://hi.baidu.com/yeyingxian/blog/item/3f2ec5c82e69b4177e3e6fb0.html
1、文本询问对话框
资源的定义(注意分号)
RESOURCE DIALOG r_text_query
{
flags = EGeneralQueryFlags;
buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
items =
{
DLG_LINE
{
type = EAknCtQuery;
id = EGeneralQuery;
control = AVKON_DATA_QUERY
{
layout = EDataLayout;
label = "";
control = EDWIN
{
width = 5;
lines = 1;
maxlength = 15;
};
};
}
};
}
调用该类的代码
TBuf<128> text; //保存用户输入信息
TBuf<128> prompt(_L("Enter text:")); //提示
CAknTextQueryDialog *dlg = new(ELeave)CAknTextQueryDialog(text, prompt);
dlg->SetMaxLength(20);
if (dlg->ExecuteLD(R_TEXT_QUERY))
{ //OK被按下
}
2、列表询问对话框
RESOURCE AVKON_LIST_QUERY r_demo_list_query
{
flags = EGeneralQueryFlags;
softkeys = R_AVKON_SOFTKEYS_OK_CANCEL;
items =
{
AVKON_LIST_QUERY_DLG_LINE
{
control = AVKON_LIST_QUERY_CONTROL
{
listtype = EAknCtSinglePopupMenuListBox;
listbox = AVKON_LIST_QUERY_LIST
{
array_id = r_demo_list_query_item;
};
heading = "Select one item:";
};
}
};
}
RESOURCE ARRAY r_demo_list_query_item
{
items =
{
LBUF {txt = "First item"; },
LBUF {txt = "Second item"; },
LBUF {txt = "Third item"; }
};
}
调用的代码
TInt index( 0 );
CAknListQueryDialog* dlg = new( ELeave ) CAknListQueryDialog( &index );
if ( dlg->ExecuteLD(R_DEMO_LIST_QUERY) )
{
// ok pressed, index is the selected item index.
}
程序中动态设置列表项例子
TInt index( 0 );
CAknListQueryDialog* dlg = new( ELeave ) CAknListQueryDialog( &index );
CDesCArrayFlat *aArray = new(ELeave)CDesCArrayFlat(3);
TBuf<16> aString;
aString.Format(_L("Item %d"), 1);
aArray->AppendL(aString);
aString.Format(_L("Item %d"), 2);
aArray->AppendL(aString);
aString.Format(_L("Item %d"), 3);
aArray->AppendL(aString);
dlg->PrepareLC(R_DEMO_LIST_QUERY);
dlg->SetItemTextArray(aArray);
dlg->SetOwnershipType(ELbmOwnsItemArray);
if (dlg->RunLD()){}
3、另外Symbian中建立简单常用对话框的较快方法,无须使用资源
static TBool CEikonEnv::QueryWinL(const TDesC &aFirstLine, const TDesC &aSecondLine);
显示一个带有指定文本行的询问对话框,提供Yes/No。如选Yes,返回ETrue
static void CEikonEnv::InfoWinL(const TDesC &aFirstLine, const TDesC &aSecondLine);
显示一个带有指定文本行的信息对话框
static void CEikonEnv::AlertWinL(const TDesC &aFirstLine, const TDesC &aSecondLine);
显示一个带有指定文本行的报警对话框