Symbian编程总结-图形图像篇-直接屏幕访问

在Symbian OS中绘制图形减少闪烁的方法有两种:

  1. 使用双缓存进行图形的绘制(点击这里进入相关文章
  2. 使用CDirectScreenAccess类对屏幕进行直接绘制。

CDirectScreenAccess类在SDK种的解释如下:

Direct screen access is a way of drawing to the screen without using the window server. As this avoids client-server communication, it is much faster, and may be useful for games and video. Note that some interaction with the window server is needed in order to prevent the application from drawing over other application's data.

此外,使用CDirectScreenAccess还可以截获系统的通知消息(如菜单弹出、电话拨入、信息收到等)的对话框弹出事件,从而避免不必要的刷新工作。

一、CDirectScreenAccess的简单使用

CDirectScreenAccess使用起来非常简单,下面的几格步骤将介绍CDirectScreenAccess的使用方法:

  1. 在Carbide C++中使用向导生成GUI应用程序
  2. 在View类中创建成员变量CDirectScreenAccess* iDSA;
  3. 在View类中创建私有方法void DrawGraphics();代码如下:

    void CTestDirectDrawAppView::DrawGraphics()
        {
        CFbsBitGc* gc = iDSA->Gc();

        TRgb colorRed= AKN_LAF_COLOR(35);
        gc->SetPenColor(colorRed);
        gc->DrawRect(TRect(0, 0, 100, 100));

        iDSA->ScreenDevice()->Update();
        }

  4. 在View类的ConstructL方法里加入以下代码:

    CEikonEnv* env = CEikonEnv::Static();
    iDSA = CDirectScreenAccess::NewL(env->WsSession(), *(env->ScreenDevice()), this->Window(), *this);

    iDSA->StartL();
    DrawGraphics();

  5. 在View类中创建以下两个私有方法:

    void Restart(RDirectScreenAccess::TTerminationReasons aReason);
    void AbortNow(RDirectScreenAccess::TTerminationReasons aReason); 

    实现如下:

    void CTestDirectDrawAppView::Restart(RDirectScreenAccess::TTerminationReasons aReason)
        {
        iDSA->StartL();
        DrawGraphics();
        }

    void CTestDirectDrawAppView::AbortNow(RDirectScreenAccess::TTerminationReasons aReason)
        {
        iDSA->Cancel();
        }

    点击此处下载源代码

 

二、分析实现过程

1、普通的绘制过程

image

2、当有系统对话框通知时的绘制过程

image

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值