使用GRID来实现九宫格菜单

来源:互联网 发布:anaconda安装caffe 编辑:程序博客网 时间:2024/05/18 03:04

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; 

}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/stonesl/archive/2008/06/23/2577686.aspx

 

网上找了很多例子,没有能成功的,这篇文章传的比较广,希望有所帮助

原创粉丝点击