Symbian列表框(CEikListBox)使用说明

列表框是S60平台最重要的界面元素之一,本章重点研究列表框的外观、用途及其使用方法 一.列表框的分类 CEikListBox类是所以的列表框的基类,由它派生出CEikTextListBox 类和CAknGrid类。严格的讲,CAknPopupList类和CAknSettingItemList类并不是列表框类,但
列表框是S60平台最重要的界面元素之一,本章重点研究列表框的外观、用途及其使用方法

一.列表框的分类

CEikListBox类是所以的列表框的基类,由它派生出CEikTextListBox 类和CAknGrid类。严格的讲,CAknPopupList类和CAknSettingItemList类并不是列表框类,但是他们使用了列表框类。 本节将列表框粗略的分为四类。

 

 

分类

 

 

说明

 

普通列表框

 

CEikTextListBox

 

这是使用最广泛的列表框,提供一维竖向列表。

 

网格

 

CaknGrid

 

提供了二维的列表,用于紧凑的方式显示数据,支持多选功能

 

弹出式列表框

 

CaknPopupList

 

底部弹出菜单的竖向列表

 

设置项列表框

 

CaknSettingItemList

 

竖向列表,各个表项的值可以调节,主要设置属性

二、普通列表框

普通列表框继承自CEikTextListBox,根据继承关系又可以分为两类

1.分栏式列表框

   分栏式列表框继承CEikColumnListBox,有如下特点:

   每个列表项占一行,这里的行不是由宽度区分,而是由显示的内容是否分行区分。

   每个列表项分成若干栏,各栏显示文本、数字和图标等分栏列表框,以字符串作为数据。

2.格式化单元列表框

   格式化单元列表框指继承CEikFormattedCellListBox,特点如下:

   每个列表项未必只占一行

   每个列表项是由若干个单元构成,各单元可以显示文本、数字、时间和图标

格式化单元格列表框又可以分为三类:

双行列表框(继承AknListBoxLinesTemplate<CEikFormattedCellListBox>)。

设置式列表框(继承CEikSettingListBox).

弹出菜单式列表框(继承AknPopupListEmpty<CEikFormattedCellListBox>).

三、普通列表框开发

创建普通列表框的顺序。

1.声明列表框 2.创建列表框 3.加载列表框 4.设置图标   5.创建滚动条

1.声明列表框:

列表框对象通常作为容器控件(Container Control)的子控件,因此一般将它声明为容器控件类的成员变量,例如

...

CAknXXXListBox *iListBox; //CAknXXXListBox 可以使前面介绍的任一特定列表框类

...

此为,为了声明更加通用,可以将上面的iListBox声明为基类的对象指针,如:

...

CEikColumnListBox* iListBox; //分栏列表框

 

...

或者:

...

CEikFormattedCellListBox* iListBox ; //格式化单元列表框

...

2.创建列表框

第一种方法:利用资源创建,例如

...

RESOURCE LISTBOX r_mylist_listbox

{

     flags = EAknListBoxSelectionList; //选择列表框类型

}

如果在创建列表框的同时要加载一些预定义的数据,可以再资源中添加列表框数组,例如:

...

RESOURCE LISTBOX r_mylist_listbox

{

    flags = EAknListBoxSelectionList; //选择列表框类型

   array_id = r_mylist_listbox_array; //列表项数组

}

RESOURCE ARRAY r_mylist_listbox_array //列表项数组

{

   items=

            {

                    LBUF{txt=qtn_mylist_listbox_array_item1;},

                   LBUF{txt=qtn_mylist_listbox_array_item2;},

                  LBUF{txt=qtn_mylist_listbox_array_item3;},

            };

}

...

其中txt=qtn_mylist_listbox_array_item1等是在本地化文件(.loc文件)中定义的字符串,例如:

...

#define txt=qtn_mylist_listbox_array_item1 "/tItem1"

...

然后可以再代码中通过下面的方法创建列表框:

...

iListBox = new(ELeave) CAknXXXListBox; //CAknXXXListBox是前面介绍的任一特定列表框

iListBox->SetContainerWindowL(*this);

TInt resourceId = R_YMLIST_LSITBOX; //resourceId 是前面定义的列表框资源的标识

TResourceReader reader;

CEikonEnv::Static()->CreateResourceReaderLC(reader,resourceId);

iListBox->ConstructFormResourceL(reader); //创建列表框

CleanupStack::PopAndDestroy();

...

第二种方法:使用代码动态创建,这种方法不用预先自定义资源。

...

iListBox = new(ELeave) CAknXXXXListBox;

iListBox->SetContainerWindowL(*this);

TInt flags = EAknListBoxSelectionList;

iListBox->ConstructL(this,flags);

...

3.加载列表项

在创建了列表框之后,可以在代码中动态地为它添加一些列表项作为初始值。这需要用到列表框模型类。首先获取模型对象中的描述符数组,然后最加格式化的描述符(字符串):

...

CTextListBoxModel* model = iListBox->Model; //获取模型对象

CDesCArray* array = static_cast<CDesCArray*>(model->ItemTextArray()); //获取描述符数组

_LIT(KItemFormat,"/tItem%d"); //定义格式串

TBuf<32>item;

fot(TInt i = 1;i<9;i++)

{

   item.Format(KItemFormat(),i); //生成格式化的字符串,i的值会取代格式串中的%d

   array->AppenL(item);//追加字符串

}

...

4.设置图标

如果想在列表项中显示图标,则必须为列表框创建图标。应用程序一般通过.mbm文件提供位图,例如:

...

 

CGullIcon* icon = env->CreateIconL(filename,EmbmMylistG1,EMbmMylistGm1); //创建图标

icons->AppendL(icon); //追加图标

CleanupStack::Pop(icons);

CleanupStack::PopAndDestroy(filename);

//设置分栏列表框的图标数组,设置后列表框拥有该数组

iListBox->ItemDrawer()->ColumnData()->SetIconArray(icons);

//如果是格式化的单元格式框,必须使用下面的语句设置

//iListBox->ItemDrawer()->FormattedCellData()->SetIconArray(icons);

...

格式化字符串引用的序号是图标在数组中的下标,多选列表框必须拥有两个标记图标,其中表示选中状态的图标必须是图标数组的第一个元素,表示未选中状态的图标必须是图标数组的第二个元素。

注意:SDK提供的工具bmconv可以将一张或多张位图文件压缩成一个多位图文件。直接使用bmconv生成多位图文件操作起来很不方便,因为这里用.mmp文件中使用START BITMAP定义多位图文件。代码如下:

START BITMAP MySeleList.mbm

//TARGETPATH

HEADER

SOURCEPATH ../data

SOURCE C12 Star.bmp

SOURCE 2 StarMask.bmp

END

每个START BITMAP ...END 代码定义了一个多位图文件,文件名在START BITMAP后指定,而且后缀名.mbm。

TARGETPATH用于指定多位图文件的存放位置,一般不指定此参数。默认将生成的.mbm文件生成到“/system/apps/myselelist/”目录中。

HEADER表示在生成多位图文件的同时也生成相应的.mbg文件,该文件生成到SDK根目录“/epoc32/include”中。

SOURCEPATH用于指定.bmp文件所在目录,可以用相对目录

SOURCE用于指定位图文件及其属性,如果有“c”表示该位图是彩色,此时后面的数字表示位图的色深;没有“c”表示是灰度位图,后边的数字代表灰度。

可以在dos下用abld build wins udeb来编译生成。

5.创建滚动条

当列表项很多时有可能一屏显示不了,最好为列表框创建滚动条。

...

iListBox->CreateScrollBarFrameL(ETrue);

iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);

//自动显示竖向滚动条

...

CEikonEnv* env = CEikonEnv::Static();

CArrayPtr<CGullcon>* icons = new(ELeave)CAknIconArray(3); //创建图标数组

CleanupStack::PushL(icons);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值