这片文章介绍一种在S60指示器面板中绘制图标的方法。你可以放一个图标在电池面板或信号面板旁,你需要自定义代码。
我用了一个派生自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);
// by default setting the indicator icon to inactive 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())); // if aRedraw == ETrue just draw the canvas again. 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(); // The next line will set the icon to draw and it'll draw to the screen. iIndicatorIcon->SetIndicatorIconL(CIndicatorIcon::EIndicatorIconAppInactive, ETrue); 程序运行后你将看到如下的界面:
当程序运行在后台
当出现任务菜单时
译文地址:http://www.symbianx.cn/viewthread.php?tid=51&extra=page%3D1
下载:程序源码
|