Symbian 上ListBox 使用示例

1. ListBox 的2种使用模式

      A. 有一种是通过资源来加载ListItem,这种方式不用我们手动添加字符串

 

      B. 第2种是可以动态生成ListItem。本文就主要说明第2种的使用方式.

 

2. 示例说明

  由于我使用的是小图标单行Item样式的ListBox,所以我们需要用到一些图标。

 

我把每行图标设置成相同了。因为我们要用到图标。首先要用到位图资源。首先在mmp文件中定义如下的

 

START BITMAP      images.mbm
HEADER
TARGETPATH        /system/apps/demo002
SOURCEPATH        ../bitmaps
SOURCE            c12  listbox_icon.bmp
END

 

我猜测 symbian 应该是把位图资源统一生成在一个XXX.mbm的文件中,当然我们程序本身的图标却在AIF文件中。 从SOURCE 那行开始,就是我们要用到的图片的文件, c12 (应该表示12色深的),1(应该表示黑白图)。

 

 

3 . 具体代码

 

 void Cdemo002Container::ConstructL(const TRect& aRect)
 {


 CreateWindowL(); // 创建窗口
 
 iListBox = new (ELeave)CAknSingleGraphicHeadingStyleListBox() ; // C++构造

/*  2阶段构造,如果是采用 B 方式的代码,才需要 2阶段构造。如果是采用A方式 ,则不需要2阶段

  

*   构造, 只需另外用TReadResource从资源中加载 我们定义的LISTBOX

 

*/

 

 iListBox->ConstructL(this); // 2阶段构造(  A模式不需要 )
 

iListBox->SetContainerWindowL(*this) ; //设置自己的容器窗口
 
 iListBox->CreateScrollBarFrameL(ETrue); //创建滚动条


 iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn,
   CEikScrollBarFrame::EOn ) ; // 开启其滚动的特性
 
 CDesCArray* itemList  = new (ELeave) CDesCArrayFlat(3) ; //创建字符串数组
 
 _LIT(KListItemFormat,"%d/t%S/t%S/t") ; //为ListItem准备好数据格式
 TBuf<32> item ;
 
 //添加字符串到数组中去。
 item.Format(KListItemFormat,0,&(_L("head1")),&(_L("Item1"))) ;
 itemList->AppendL(item) ;
 
 item.Format(KListItemFormat,1,&(_L("head2")),&(_L("Item2"))) ;
 itemList->AppendL(item) ;
 
 item.Format(KListItemFormat,2,&(_L("head3")),&(_L("Item3"))) ;
 itemList->AppendL(item) ;

 

// 把字串添加到ListBox中(MVC ,Model管理我们的数据)

 iListBox->Model()->SetItemTextArray(itemList);

 

// 这句是让字符串被LISTBOX的Model接管,所以我们不用删除 itemList对象
 iListBox->Model()->SetOwnershipType(ELbmOwnsItemArray);
 
 //创建图标指针容器数组
 CArrayPtr<CGulIcon>* iconList = new (ELeave) CAknIconArray(3);
 

//压入清除栈
 CleanupStack::PushL(iconList);
 

//我们的图标存放的位置
 _LIT(KIconFileName,"//system//apps//demo002//images.mbm");

 

//加入图标到我们的图标数组中
 iconList->AppendL(iEikonEnv->CreateIconL(KIconFileName,EMbmImagesListBoxIcon));
 iconList->AppendL(iEikonEnv->CreateIconL(KIconFileName,EMbmImagesListBoxIcon));
 iconList->AppendL(iEikonEnv->CreateIconL(KIconFileName,EMbmImagesListBoxIcon));
 

// 将我们的图标添加到ListBox中
 iListBox->ItemDrawer()->ColumnData()->SetIconArray(iconList);
 

//弹出刚入栈的iconList
 CleanupStack::Pop() ;
 

//更新LISTBOX
 iListBox->HandleItemAdditionL() ; //update listbox
 

//设置LISTBOX控件的区域,没有这句,我们看不到listbox,嘿嘿
 iListBox->SetRect(aRect);
 SetRect(aRect);
 
 
 
 ActivateL();
 }

 

4 .

  总的来说。字符串 和图标 分别添加 到Model,和ItemDrawer中。

 

好像LISTBOX可以设置自己的ItemDrawer,这意味着我们可以自己来绘制listitem项。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值