首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> 用户界面 >> 正文
在S60"指示符面板"上显示小图标的解决方法
作者:Jrive    文章来源:Jrive的专栏    更新时间:2006-9-12 9:30:22

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

定义一个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

相关文章:
视图命令处理与视图的切换
如何从Carbide.c++产生SIS安装文件?
S60程序中,如何在指示器面板中绘制图标
CCoeControl类中Draw()函数的调试
DSA and RBackupWindow
恢复IMEI,IMSI及网络信息(元Id,位置代码)第三版
深入理解Symbian控件架构
在S60指示面板上画图标
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号