使用GRID来实现九宫格菜单

1、头文件中声明用到的变量

CAknGrid* iGrid;   

CAknGridM* iGridM;   

TInt iNumOfRows;  

 TInt iNumOfColumns;   

TSize iCellSize;   

TInt iGraphHeight;

2、源文件中的代码

const TInt KNumOfSelectionColumns = 3;

const TInt KNumOfSelectionRows = 3;

const TInt KGraphHeight=32;

_LIT(KMbmPath, "Z://system//apps//GirdTest//GirdTest.mbm");

 _LIT(KItemFormat,"%d/t%S");

 

ConstructL()中实现

 iGrid = new( ELeave ) CAknGrid;

 iGrid->SetContainerWindowL( *this );

 iGridM = new( ELeave ) CAknGridM;  

iGrid->SetModel( iGridM );  

TInt gridFlags = EAknListBoxSelectionGrid;  

iGrid->ConstructL( this, gridFlags);  

CAknGridView::TScrollingType iVerticalScrollingType =

  CAknGridView::EScrollIncrementLineAndLoops;

 CAknGridView::TScrollingType iHorizontalScrollingType =

  CAknGridView::EScrollIncrementLineAndLoops;

 TBool iVerticalOrientation = EFalse;

 TBool iTopToBottom = ETrue;

 TBool iLeftToRight = ETrue;

 iNumOfColumns = KNumOfSelectionColumns;

 iNumOfRows = KNumOfSelectionRows;  

iGraphHeight=KGraphHeight;  

iCellSize.iWidth = ( aRect.iBr.iX - aRect.iTl.iX ) / iNumOfColumns;

 iCellSize.iHeight = ( aRect.iBr.iY - aRect.iTl.iY ) / iNumOfRows;

 iGrid->SetLayoutL( iVerticalOrientation,iLeftToRight, iTopToBottom,   iNumOfRows, iNumOfColumns,iCellSize );

 iGrid->SetPrimaryScrollingType( iVerticalScrollingType );

 iGrid->SetSecondaryScrollingType( iHorizontalScrollingType );

 iGrid->CreateScrollBarFrameL(ETrue);

 iGrid->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);

 AknListBoxLayouts::SetupStandardGrid( *iGrid );

 TInt grWidth = 0;

 TInt txWidth = 0;  

grWidth = iGrid->ColumnWidth();  

txWidth = iGrid->ColumnWidth();

 const CFont* fontText = CCoeEnv::Static()->NormalFont();  

AknListBoxLayouts::SetupFormGfxCell( *iGrid, iGrid->ItemDrawer(),  0, 0, 0, 0, 0,  grWidth, iGraphHeight,   TPoint( 0, 0 ), TPoint( grWidth, iGraphHeight) );  

AknListBoxLayouts::SetupFormTextCell( *iGrid, iGrid->ItemDrawer(),   1, fontText,   215,   0, 0,   iGrid->ItemHeight()-3,   txWidth,   CGraphicsContext::ECenter,   TPoint( 0, iGrid->ItemHeight()-iGraphHeight),   TPoint( iGrid->ColumnWidth(), iGrid->ItemHeight() )   );

 CArrayPtr<CGulIcon>* icons =new ( ELeave ) CAknIconArray(7);

 CleanupStack::PushL( icons );

 icons->AppendL( iEikonEnv->CreateIconL(KMbmPath,EMbmGirdtestContact,EMbmGirdtestContact) );  

icons->AppendL( iEikonEnv->CreateIconL(KMbmPath,EMbmGirdtestCalllog,EMbmGirdtestCalllog) );  icons->AppendL( iEikonEnv->CreateIconL(KMbmPath,EMbmGirdtestConfig,EMbmGirdtestConfig) );

 icons->AppendL( iEikonEnv->CreateIconL(KMbmPath,EMbmGirdtestCallwall,EMbmGirdtestCallwall) );

 icons->AppendL( iEikonEnv->CreateIconL(KMbmPath,EMbmGirdtestFind,EMbmGirdtestFind) );

 icons->AppendL( iEikonEnv->CreateIconL(KMbmPath,EMbmGirdtestBlackcode,EMbmGirdtestBlackcode) );  icons->AppendL( iEikonEnv->CreateIconL(KMbmPath,EMbmGirdtestTodo,EMbmGirdtestTodo) );

 // Sets graphics as ListBox icon.  iGrid->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons );

 CleanupStack::Pop();

 CDesCArray* array = static_cast<CDesCArray*>(iGrid->Model()->ItemTextArray());

 array->Reset();  

TBuf<255> item;  

HBufC* textResource = StringLoader::LoadLC(QTN_CONTACT);  

item.Format(KItemFormat,0,textResource);  

array->AppendL(item);  

CleanupStack::PopAndDestroy();

 textResource = StringLoader::LoadLC(QTN_CALLLOG);  

item.Format(KItemFormat,1,textResource);  

array->AppendL(item);  

CleanupStack::PopAndDestroy();

 textResource = StringLoader::LoadLC(QTN_CONFIG);  

item.Format(KItemFormat,2,textResource);  

array->AppendL(item);  

CleanupStack::PopAndDestroy();

 textResource = StringLoader::LoadLC(QTN_CALLWALL);

item.Format(KItemFormat,3,textResource);  

array->AppendL(item);  

CleanupStack::PopAndDestroy();

 textResource = StringLoader::LoadLC(QTN_FIND);

item.Format(KItemFormat,4,textResource);  

array->AppendL(item);  

CleanupStack::PopAndDestroy();

 textResource = StringLoader::LoadLC(QTN_BLACKCODE);  

item.Format(KItemFormat,5,textResource);  

array->AppendL(item);  

CleanupStack::PopAndDestroy();

 textResource = StringLoader::LoadLC(QTN_TODO);  

item.Format(KItemFormat,6,textResource);  

array->AppendL(item);  

CleanupStack::PopAndDestroy();

 iGrid->HandleItemAdditionL();

4、~CGirdTestContainer()

delete iGrid;

5、SizeChanged()

  if ( iGrid )   {    iGrid->SetRect( Rect() );   }

6、OfferKeyEventL

TKeyResponse CGirdTestContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType )

{  

if (aType!=EEventKey)   

return EKeyWasNotConsumed;

 switch(aKeyEvent.iCode)  

{   

// Forward up and down key press events to the list box  

case EKeyUpArrow:  

case EKeyDownArrow:   

case EKeyLeftArrow:

case EKeyRightArrow:   

return iGrid->OfferKeyEventL( aKeyEvent, aType );     

case EKeyOK:  

{       

TInt nIndex=iGrid->CurrentItemIndex();

 /*****

.......

*****/    

break;   

}  

default:   

break;   

}  

return EKeyWasNotConsumed; 

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值