Link: http://www.newlc.com/How-to-draw-an-Icon-on-the.html
Here is a way to show an icon on the IndicatorPane of Series 60. You can show an icone near to the battery pane or signal pane, for that you have to customise the code.
I've used a calss named CIndicatorIcon derived from CCoeControl. Now you have to create the ConstructL() should be like this:
{
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();
}
In the ConstructL() I was calling another function called SetIndicatorIconL(), to set the icon:
{
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();
}
}
You have to over-ride Draw() from CCoeControl. The Draw function is as follows:
{
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);
}
Now add these lines to the ConstructL() of your Application's AppUi class:
// The next line will set the icon to draw and it'll draw to the screen.
iIndicatorIcon->SetIndicatorIconL(CIndicatorIcon::EIndicatorIconAppInactive, ETrue);
Finally after running the application it'll look like this:
| |
You can download an example application from here.
本文介绍如何在S60平台的应用程序中实现自定义图标指示器,并展示其在电池或信号图标旁显示的效果。通过继承CCoeControl类并重写相应方法,可以创建动态变化的图标指示。
1364

被折叠的 条评论
为什么被折叠?



