在S60"指示符面板"上显示小图标的解决方法

无法在这贴图片,效果无法展示了,觉得很不爽,现把主要代码摘录如下,感兴趣的可以自己试一下:

定义一个class,继承CCoeControl,然后在它的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();

//......................
然后提供一个设置图标的接口函数:

如:

void 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 CXX::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);
        }

最后,就是使用这个class来显示那个小图标了,在你的程序的UI类里面直接调用该类的SetIndicatorIconL()方法就可以了.

//有关更详细的说明,请参考原文:http://www.newlc.com/How-to-draw-an-Icon-on-the.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值