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

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

 

 

你可能感兴趣的:(Symbian)