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
网上找了很多例子,没有能成功的,这篇文章传的比较广,希望有所帮助