Symbian 对话框组件与应用开发 对话框简介
2010-04-20 15:49:00 来源:WEB开发网MENU_ITEM { command = ESimpleDlgCmdPrepare; txt = qtn_appl_prepare; },
MENU_ITEM { command = ESimpleDlgCmdPreLayout; txt = qtn_appl_prelayout; },
MENU_ITEM { command = EAknCmdExit; txt = qtn_appl_exit; }
};
}
//MySimpleDlg.hrh
enum TMySimpleDlgCommandIds
{
ESimpleDlgCmdDialog = 1,
ESimpleDlgCmdPrepare,
ESimpleDlgCmdPreLayout
};
3.动态地初始化标准对话框
对话框的子控件在定义时被赋予初始值,但在某些情况下应用程序需要在执行对话框之前根据情况改变子控件的值,有两种方法:
第一种:使用PrepareLC()函数和RunLD()函数
ExecuteLD()函数内部首先调用PrepareLC()函数从资源中加载对话框,然后调用RunLD()函数弹出对话框,因此可以在这两个函数之间加入初始化对话框的代码,本节MySimpleDlg示例程序MySimpleDlgAppUi.cpp文件中代码如下:
#include
void CMySimpleDlgAppUi::HandleCommandL(TInt aCommand)
{
switch ( aCommand )
{
......
case ESimpleDlgCmdPrepare:
{
CAknDialog* dialog = new(ELeave)CAknDialog;
dialog->PrepareLC(R_SIMPLEDLG_DIALOG); //从资源文件中加载对话框
CEikLabel* label =
static_cast
_LIT(KMyLabel,"Changed after PrepareLC()");
label->SetTextL(KMyLabel()); //修改子控件的值
dialog->RunLD();
break;
}
.......
// TODO: Add Your command handling code here
default:
break;
}
}
注意:需要在.mmp文件中加入eikdlg.lib
第二种方法:使用PreLayoutDynInitL()函数或PostLayoutDynInitL()函数
该方法需要自定义对话框类,并重载CEikDialog::PreLayoutDynInit()函数和 CEikDialog::PostLayoutDynInitL()函数。这两个函数都是虚函数,他们会在显示对话框之前被调用。其中对话框完成控件布局会调用PreLayoutDynInitL()函数,因此该函数常用于完成可能会影响对话框布局的初始化操作,例如创建新的控件。对话框完成布局之后会调用PostLayoutDynInitL()函数,该函数用于实现不影响对话框布局的操作,如为控件赋值等。
更多精彩
赞助商链接