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);

發佈了42 篇原創文章 · 獲贊 7 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章