對話方塊的練習
寫一對話方塊的 rss 資源
RESOURCE DIALOG r_my_dlg
{
flags = EEikDialogFlagNoDrag | EEikDialogFlagNoTitleBar |
EEikDialogFlagFillAppClientRect|EEikDialogFlagCbaButtons |EEikDialogFlagWait
|EEikDialogFlagNotifyEsc;
buttons = r_my_dia_button;
items={
DLG_LINE
{
id = ESimpleDlgCtlLabel;
type = EEikCtLabel;
control = LABEL{
txt = "this is a simple dialog";
};
},
DLG_LINE
{
id = 10;
type = EEikCtEdwin;
control = EDWIN
{
width=10;
lines =1 ;
maxlength = 10;
};
}
};
}
RESOURCE CBA r_my_dia_button
{
buttons = {
CBA_BUTTON{
id = 6;
txt = "ok";
},
CBA_BUTTON
{
id = 7;
txt = "close";
}
};
} |
調用代碼
| CAknDialog* dl = new(ELeave)CMyDialog;/* dl->PrepareLC(R_MY_DLG);CEikLabel* label = static_cast<CEikLabel*>(dl->Control(ESimpleDlgCtlLabel));label->SetTextL(_L("hello"));if (dl->RunLD())*/if (dl->ExecuteLD(R_MY_DLG)){iEikonEnv->InfoMsg(_L("Button ok"));} else{iEikonEnv->InfoMsg(_L("Button cancel"));
} |
這裡用到自訂對話方塊了,自訂對話方塊從 CAknDialog 繼承過來,代碼如下
| class CMySimpleDialog : public CAknDialog{protected: // Functions from base classesvoid PreLayoutDynInitL();void PostLayoutDynInitL();TBool OkToExitL(TInt aButtonId);}; #include "CMyDialog.h"#include <eiklabel.h>#include "Dlgtest.hrh"#include <akndialog.h>#include <eikenv.h>CMyDialog::CMyDialog(){// TODO Auto-generated constructor stub}void CMyDialog::PreLayoutDynInitL(){CEikLabel* label = static_cast<CEikLabel*>(Control(ESimpleDlgCtlLabel));label->SetTextL(_L("aaa"));}void CMyDialog::PostLayoutDynInitL(){}TBool CMyDialog::OkToExitL(TInt aButtonId){TBool ret = CAknDialog::OkToExitL(aButtonId);CEikonEnv* env = CEikonEnv::Static();if (aButtonId == 6){env->InfoMsg(_L("ok to exit"));}else{env->InfoMsg(_L("cancel to exit"));ret = EFalse;}return ret;}CMyDialog::~CMyDialog(){// TODO Auto-generated destructor stub
} |
如果是自訂的對話方塊同時繼承了 OkToExit 方法,可以通過改寫這個方法的傳回值來決定是不是需要關閉這個對話方塊,
返回 ETrue 則關閉對話方塊,否則繼續顯示對話方塊,注意對於等待的對話方塊來說,代碼會停在那裡,非等待的對話方塊來說,
代碼繼續執行,但對話方塊不消失