面板的练习

面板的练习

s60 的面板包括:标题面板(CAknTitlePane),情景面板(CAknContextPane),及导航面板(CAknNavigationControlContainer)

AppUi 及 AknView 提供一个 StatusPane() 的方法可以得到 CEikStatusPane 的指针,然后通过 CEikStatusPane 的 ControlL 可以

得到标题面板、情景面板、导航面板,如

CEikStatusPane sp = StatusPane();
CAknTitlePane* aTitle = static_cast<CAknTitlePane*>(sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
CAknContextPane* aContext = static_cast<CAknContextPane*>(sp->ConstrolL(TUid::Uid(EEikStatusPaneUidContext)));
CAknNavigationControlContrainer* iNavi = static_cast<CAknNavigationControlContrainer*>(sp->ControlL(TUid::Uid(EEikStaticPaneUidNavi)));

标题面板及情景面板是单一的控件,而 CAknNavigationControlContrainer 是复合控件,复合控件可以包括标签组及标签还有图像

对于单一控件包含文本或图片的代码如下:

iStatusPane = StatusPane();
_LIT(Kpic,"\\system\\apps\\MULTIVIEW\\BITMAP.MBM");
CAknTitlePane* aTitle = static_cast<CAknTitlePane*>
(iStatusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)));
aTitle->SetTextL(_L("hello"));
// 上面是标题面板一个字符串
CFbsBitmap* bitmap = iEikonEnv->CreateBitmapL(Kpic,EMbmBitmapS1);
CleanupStack::PushL(bitmap);
aTitle->SetPicture(bitmap);
CleanupStack::PopAndDestroy();
aTitle->SetPicture(Kpic,EMbmBitmapS2);
aTitle->SetPictureFromFileL(Kpic,EMbmBitmapS2);
这里有两种方式,一种是通过 CFbsBitmap ,另一种是直接通过 mbm 文件

_LIT(Kpic,"\\system\\apps\\MULTIVIEW\\BITMAP.MBM");
CAknContextPane* context = static_cast<CAknContextPane*>
(iStatusPane->ControlL(TUid::Uid(EEikStatusPaneUidContext)));
CFbsBitmap* bmp = iEikonEnv->CreateBitmapL(Kpic,EMbmBitmapS3);
CleanupStack::PushL(bmp);
context->SetPicture(bmp);
CleanupStack::Pop();
context->SetPictureFromFileL(Kpic,EMbmBitmapS3);
这里有两种方式,一种是通过 CFbsBitmap ,另一种是直接通过 mbm 文件

对于导航面板,可以通过 CAknNavigationDecorator* 来创建标签组或标签

TResourceReader aReader;
iCoeEnv->CreateResourceReaderLC(aReader,R_MY_PANE);
CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane();
iNavi = static_cast<CAknNavigationControlContainer*>(sp->ControlL(TUid::Uid(EEikStatusPaneUidNavi)));
//iNavi->ConstructFromResourceL(aReader);
CleanupStack::PopAndDestroy();
iCoeEnv->CreateResourceReaderLC(aReader,R_MY_TAB);
this->iDecorator = iNavi->CreateTabGroupL(aReader);
//this->iDecorator = iNavi->CreateNavigationLabelL(_L("label1"));
CleanupStack::PopAndDestroy();
iNavi->PushL(*iDecorator);
 

其中试了试在 ConstructL 函数中创建一个 CFbsBitmap 对像

CFbsBitmap* bitmap = iEikonEnv->CreateBitmapL(Kbmp,EMbmNavitestS1);

程序运行这到里出错,而代码没有错,可能是 iEikonEnv 这时还不能用

显示出音量的图标来

this->iDecorator = iNavi->CreateVolumeIndicatorL(R_AVKON_NAVI_PANE_VOLUME_INDICATOR);
iNavi->PushL(*iDecorator);
 



安平2009@原创
qi_jianzhou@126.com

原文地址:https://www.cnblogs.com/zziss/p/1737397.html