Symbian ListBox 常用技巧
2010-03-17 21:06:00 来源:WEB开发网TBuf<120> buf;
buf.Append(_L(" "));
buf.Append(pAppui->iNameArray[i]->GetName()->Des());
buf.Append(_L(" 0"));
iListBoxArray->Delete(i);
iListBoxArray->InsertL(i,buf);
}
}
iListBox->DrawNow();//设置完成后,记得一定要重绘
}
TKeyResponse CSingleListBoxContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode
aType)
{
//响应上下左右键
if (iListBox)
return iListBox->OfferKeyEventL (aKeyEvent, aType);
else
return EKeyWasNotConsumed;
}
//得到当将用户选中的项
TInt CSingleListBoxContainer::GetListBoxIndex()
{
if(iListBox)
{
return iListBox->CurrentItemIndex();
}
return 0;
}
不过有一种方法是可行的,只是比较麻烦,那就是自己去实现ListBox,以及它的ItemDrawer。在网上看到的代码我试了一下,还行。方法如下。
第一步作一个自己的ItemDrawer:
class CCustomListItemDrawer: public CListItemDrawer
...{
public:
CCustomListItemDrawer(const CEikTextListBox& aListBox);
~CCustomListItemDrawer();
private:
virtual void DrawActualItem(TInt aItemIndex, const TRect& aActualItemRect,
TBool aItemIsCurrent, TBool aViewIsEmphasized, TBool aViewIsDimmed,
TBool aItemIsSelected) const;
public:
void SetIconArray(CArrayPtr
TSize MaxIconSize() const;
private:
void DeleteIconArray();
void CalculateMaxIconSize();
private:
const CEikTextListBox& iListBox;
CArrayPtr
TSize iMaxIconSize;
};
实现的代码中最重要的就是那个DrawActualItem方法负责具体的绘制工作,从它的参数表中足够得到绘制所需的信息,剩下的事情就是用SystemGc去绘制。
更多精彩
赞助商链接