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 的键
先这样吧,具体原因还是没有找到,但是问题没有了