class CMyContainer : public CCoeControl
{
。。。。。。。。。。。
private:
enum{
ELabelUsr = 0,
ELabelPwd,
EEditUsr,
EEditPwd,
ECheckBox,
ELastControl
};
CMyLabel *iLabelUsr,*iLabelPwd;
CMyEdwin* iEditUsr;
CMySecretEditor* iEditPwd;
CMyCheckBox* iCheckBox;
};
方法一:
override
virtual TInt CCoeControl::CountComponentControls () const;
virtual CCoeControl* CCoeControl::ComponentControl (TInt aIndex) const;
CCoeControl* CMyContainer::ComponentControl(TInt aIndex) const
{
// ASSERT(aIndex<ELastControl);
switch(aIndex){
case ELabelUsr: return iLabelUsr;
break;
case ELabelPwd: return iLabelPwd;
break;
case EEditUsr: return iEditUsr;
break;
case EEditPwd: return iEditPwd;
break;
case ECheckBox: return iCheckBox;
break;
}
return NULL;
}
TInt CMyContainer::CountComponentControls() const
{
return ELastControl;
}
方法二:
void CMyContainer::InitializeControlsL()
{
................. // create all controls
InitComponentArrayL();
CCoeControlArray& ca = Components();
ca.AppendLC (iLabelUsr,ELabelUsr);
ca.AppendLC(iLabelPwd,ELabelPwd);
ca.AppendLC(iEditUsr,EEditUsr);
ca.AppendLC(iEditPwd,EEditPwd);
ca.AppendLC(iCheckBox,ECheckBox);
CleanupStack::Pop(ELastControl);
}
CMyContainer::~CMyContainer()
{
...................... //delete controls
Components().Reset(); //have to reset, otherwise crash (3rd)
}