zoukankan      html  css  js  c++  java
  • 关于 symbian 全屏及自绘 cba 的总结

    symbian 全屏,网上找了找,好多,但好多也不是我要的效果,我要的全屏是可以保留 statusPane 或去掉 statusPane ,但要显示出自己绘制的 cba 来。

    网上说的都不能满足我要的效果,后来找到一兄弟的文章,具体在哪我也忘了,当时只是把代码拿过来了

    代码如下:

    void CMainContainer::HandleResourceChange( TInt aType )
     {
     const TRect& appRect = ((CAknViewAppUi*)iEikonEnv->AppUi())->ApplicationRect();
     TRect clRect = ((CAknViewAppUi*)iEikonEnv->AppUi())->ClientRect();
     TPoint p = clRect.iTl;
     TRect CustomRect(p , TSize(appRect.Width(), appRect.Height()- clRect.iTl.iY) );//- clRect.iTl.iY
     CCoeControl::HandleResourceChange( aType );
     SetRect( CustomRect);
     this->DrawNow();
     }

    就是这个,然后我

    CEikButtonGroupContainer::Current()->MakeVisible(EFalse);

    隐藏 cba ,嗯,效果有了,自己绘制的 cba 出来了,系统的没有了

    开始给 cba 添加事件,上网看了看,得知 cba 的按键是EStdKeyDevice0,EStdKeyDevice1,好,我就在 自绘的 cba 中添加下面的代码

    TKeyResponse CCbaButton::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
     {
     /*
      * 获取当前 view 的 menuBar
      */
     TVwsViewId aViewId;
     ((CAknViewAppUi*)iEikonEnv->AppUi())->GetActiveViewId(aViewId);
     CAknView* view = ((CAknViewAppUi*)iEikonEnv->AppUi())->View(aViewId.iViewUid);
     iMenu = view->MenuBar();
     TKeyResponse ret = EKeyWasNotConsumed;
     switch (aKeyEvent.iScanCode)
      {
      case EStdKeyDevice0://EKeyCBA1: EStdKeyDevice0
       {
       if (iCmdIdLeft==KNullCmdId) break;
       if (iCmdIdLeft == EAknSoftkeyOptions)
        iMenu->TryDisplayMenuBarWithoutFepMenusL();
       else
        view->HandleCommandL(iCmdIdLeft);
       ret = EKeyWasConsumed;
       break;
       }
      case EStdKeyDevice1://165 EKeyCBA2:
       {
       if (iCmdIdRight==KNullCmdId) break;
       if (iCmdIdRight == EAknSoftkeyOptions)
        iMenu->TryDisplayMenuBarWithoutFepMenusL();
       else
        view->HandleCommandL(iCmdIdRight);
       ret = EKeyWasConsumed;
       break;
       }
      default:
       ;
      }
     return ret;
     }

    然后在 container 中调用这个 cba 的 OfferKeyEventL,但我在点击 左右键 时系统会执行两次,实在是搞不明白,测试了好长时间也没有找到解决办法

    后来就试着 让 cba 显示出来,去掉这句:

    CEikButtonGroupContainer::Current()->MakeVisible(EFalse);

    系统的 cba 还是没有显示出来,问题来了,这个原来不起作用的,嘿嘿,我又把上面 处理按键的代码去掉,运行程序,嘿,好了,左右按键还是之前给 cba 的键

    先这样吧,具体原因还是没有找到,但是问题没有了

  • 相关阅读:
    RPD Volume 168 Issue 4 March 2016 评论1
    初步接触CERNVM
    java中重载与重写的区别
    第三节 java 函数
    第二节 java流程控制(循环结构)
    第二节 java流程控制(判断结构+选择结构)
    JAVA 对象引用,以及对象赋值
    Java学习笔记整理第一章 java基本数据类型、修饰符、运算符
    plantuml的使用
    力扣 第210题
  • 原文地址:https://www.cnblogs.com/zziss/p/2029724.html
Copyright © 2011-2022 走看看