• 关于 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 的键

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

  • 相关阅读:
    移动平台开发需要的记录(续)
    移动平台开发需要的记录
    Chrome浏览器被劫持
    记录一个GO安装问题
    记录开发环境配置 MySql(5.7.17)+EF6.x+VS2017(15.7.1)
    win7(x64)下安装cocos2d并编译安卓项目
    Xocde一次版本升级遇到的问题 (Code Sign Error)
    【转】SqlServer将没有log文件的数据库文件附加到服务器中
    [转]IIS6.0迁移至IIS7.0
    重置VS设置
  • 原文地址:https://www.cnblogs.com/zziss/p/2029724.html
Copyright © 2020-2023  润新知