📄 ndgrid.cpp
字号:
#include "NDGrid.h"
//构造函数
CNDGrid::CNDGrid()
{
iTextArray = NULL;
iIconArray = NULL;
iIndex = 0;
iGridNum = 0;
iStart = 0;
}
void CNDGrid::ConstructL(CDesC16ArrayFlat* aTextArray,RPointerArray<CFbsBitmap>* aIconArray)
{
iTextArray = aTextArray;
iIconArray = aIconArray;
}
//析构函数
CNDGrid::~CNDGrid()
{
}
//设置文本数组
void CNDGrid::SetTextArray(CDesC16ArrayFlat* aArray)
{
iTextArray = aArray;
}
//设置Icon图标数组
void CNDGrid::SetIconArray(RPointerArray<CFbsBitmap>* aArray)
{
iIconArray = aArray;
}
//设置Grid数
void CNDGrid::SetGridNum(TInt aNum)
{
iGridNum = aNum;
SetRowAndCol();
}
void CNDGrid::SetRowAndCol()
{
if(iGridNum<=3)
{
iCol = 1;
iRow = iGridNum;
}
else if(iGridNum<=6)
{
iCol = 2;
iRow = iGridNum/2;
}
else
{
iCol = 3;
iRow = 3;
}
}
//绘制Grid在指定GC上
void CNDGrid::Draw(CWindowGc &aGc)
{
TRect rect;
TInt x = iIndex%3;
TInt y = iIndex/3;
rect.SetRect(1+x*58,1+y*46,58+x*58,50+y*46);
aGc.SetBrushColor(TRgb(0xdfcfca));
aGc.DrawRect(rect);
TInt row = 0;
if(iGridNum%3==0)
{
row = iGridNum/3;
}
else
{
row = iGridNum/3+1;
}
TInt col = 3;
TInt num = 0;
for(TInt i=0;i<3;i++)
{
num = iStart+i*3;
for(TInt j=0;(j<col) && (num<iGridNum);j++)
{
rect.SetRect(10+58*j,2+48*i,48+58*j,36+48*i);
aGc.DrawBitmap(rect,(*iIconArray)[iStart+i*3+j]);
aGc.DrawText((*iTextArray)[iStart+i*3+j],TPoint(12+58*j,48+48*i));
num++;
}
if(num==iGridNum)
{
break;
}
}
}
//获取当前选中索引
TInt CNDGrid::Selected()
{
return (iIndex+iStart);
}
//按键处理
TKeyResponse CNDGrid::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType)
{
if(aKeyEvent.iCode == EKeyDownArrow && aType == EEventKey)
{
if(iIndex/3==2)
{
iStart += 3;
if((iIndex+iStart+1)>iGridNum)
{
if( (iIndex+iStart+1-iIndex%3)>iGridNum)
{
iIndex = iIndex%3;
iStart = 0;
}
else
{
iIndex = iGridNum-iStart-1;
}
}
}
else
{
iIndex +=3;
if((iIndex+iStart+1)>iGridNum)
{
if(iGridNum%3==0 || (iIndex+iStart-2)==iGridNum)
{
iIndex = iIndex%3;
iStart = 0;
}
else
{
iIndex = iGridNum-iStart-1;
}
}
}
}
else if(aKeyEvent.iCode == EKeyUpArrow && aType == EEventKey)
{
if(iIndex/3==0)
{
iStart -= 3;
if(iStart<0)
{
if(iGridNum>6)
{
iStart = iGridNum-(iGridNum-1)%3-7;
}
else
{
iStart = 0;
}
iIndex += 6;
if((iIndex+iStart+1)>iGridNum)
{
iIndex = (iGridNum-1)%3 + 6;
}
}
}
else
{
iIndex -= 3;
}
}
else if(aKeyEvent.iCode == EKeyLeftArrow && aType == EEventKey)
{
if(iIndex == 0)
{
if(iStart == 0)
{
if(iGridNum>6)
{
iStart = iGridNum - (iGridNum-1)%3 - 7;
iIndex = (iGridNum-1)%3+6;
}
else
{
iIndex = iGridNum-1;
}
}
else
{
iStart -=3;
iIndex += 2;
}
}
else
{
iIndex--;
}
}
else if(aKeyEvent.iCode == EKeyRightArrow && aType == EEventKey)
{
if((iIndex + iStart + 1) == iGridNum)
{
iIndex = iStart = 0;
}
else if(iIndex == 8)
{
iIndex -= 2;
iStart +=3;
}
else
{
iIndex ++;
}
}
return EKeyWasConsumed;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -