这是一种在Series 60窗体上显示标签的方法。你可以在电量图标或信号图标旁边显示一个标签,为此需要用程序实现。我使用了从CCoeControl继承的CIndicatorIcon 这个类。你需要象这样创建ConstructL(): void CIndicatorIcon::ConstructL() { iMyWindowGroup = RWindowGroup(iCoeEnv->WsSession()); User::LeaveIfError(iMyWindowGroup.Construct((TUint32)&iMyWindowGroup));
iMyWindowGroup.SetOrdinalPosition(0, ECoeWinPriorityAlwaysAtFront); iMyWindowGroup.EnableReceiptOfFocus(EFalse);
CreateWindowL(&iMyWindowGroup);
// 默认设置指示标签静止 SetIndicatorIconL(EIndicatorIconAppActive);
ActivateL(); } 在ConstructL()中,我调用了另一个函数 SetIndicatorIconL()设置标签: void CIndicatorIcon::SetIndicatorIconL(TIndicatorIcon aIndicatorIconType, TBool aRedraw) { switch(aIndicatorIconType) { case EIndicatorIconEmpty: iIndicator = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_prop_empty); iIndicatorMask = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_prop_empty_mask); break;
case EIndicatorIconAppActive: iIndicator = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_bt_connect_on); iIndicatorMask = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_bt_connect_on_mask); break;
case EIndicatorIconAppInactive: iIndicator = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_prop_bt_audio); iIndicatorMask = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_prop_bt_audio_mask); break;
default: break; }
SetRect(TRect(TPoint(KIndicatorPosX, KIndicatorPosY),iIndicator->SizeInPixels())); // 如果 aRedraw == ETrue 从新绘制画布 if(aRedraw) { DrawNow(); } }
你需要跳过CCoeControl的Draw()函数代码如下 :
void CIndicatorIcon::Draw(const TRect& aRect) const { CWindowGc& gc = SystemGc();
gc.Clear(); gc.SetBrushStyle(CGraphicsContext::ENullBrush); gc.BitBltMasked(TPoint(aRect.iTl.iX, aRect.iTl.iY), iIndicator, TRect(TPoint(0, 0), iIndicator->SizeInPixels()), iIndicatorMask, ETrue); } 现在把这些行加入到程序AppUi类的ConstructL()中:
iIndicatorIcon = CIndicatorIcon::NewL(); // 下一行将画标签并绘制到屏幕上 iIndicatorIcon->SetIndicatorIconL(CIndicatorIcon::EIndicatorIconAppInactive, ETrue);
|