首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> Symbian入门 >> 正文
如何在Series 60窗体上绘制标签
作者:雨夜孤星    文章来源:本站原创    更新时间:2006-3-16 18:07:25

这是一种在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);

相关文章:
视图命令处理与视图的切换
关于简单的对话框
S60 Python 编程指南——声音录制/播放,MIDI 播放
恢复IMEI,IMSI及网络信息(元Id,位置代码)第三版
怎样为SettingsList赋值
S60上不再支持CMdaAudioConvertUtility
在S60"指示符面板"上显示小图标的解决方法
Audio input streaming溢出,导致异常发生
 

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