列表視圖控件(List Control)
列表視圖控件是一種非常常用的控件,在需要以報表形式顯示數據時,列表控件通常是最好的選擇,許多專用的數據報表控件,也是在它的基礎上派生而來。與樹視圖類似,列表控件可以由多個子項目組成,並且支持大圖標、小圖標、列表和報表4種方式顯示信息,如圖1所示。
圖1 列表視圖的4種顯示方式
列表視圖包含一個項目列表,而其中每個項目由圖標、項目名稱和多個子項組成,每一個子項所包含的項目的數目必須相同,屬性相同的每個子項顯示在同一個列中。列表視圖控件有兩個重要的數據結構LVCOLUMN和LVITEM。LVCOLUMN用於定義報表方式下的“列”的結構;LVITEM用於定義“項”的結構。這兩個結構的定義及說明如下:
typedef struct _LVCOLUMN { UINT mask; //說明此結構中哪些成員是有效的 int fmt; //列的對齊方式 int cx; //列的初始寬度 LPTSTR pszText; //列的標題 int cchTextMax; //pszText所指向的緩沖區的大小 int iSubItem; //與列關聯的子項的索引值,從0開始 int iImage; //與列關聯的圖像列表中指定圖像的索引值 int iOrder; //第幾列,0代表最左一列 } LVCOLUMN, FAR *LPLVCOLUMN; typedef struct _LVITEM { UINT mask; //說明LVITEM結構中哪些成員有效 int iItem; //項目的索引值(可以視為行號)從0開始 int iSubItem; //子項的索引值(可以視為列號)從0開始 UINT state; //子項的狀態 UINT stateMask; //狀態有效的屏蔽位 LPTSTR pszText; //主項或子項的名稱 int cchTextMax; //pszText所指向的緩沖區大小 int iImage; //關聯圖像列表中指定圖像的索引值 LPARAM lParam; //程序定義的32位參數 int iIndent; //表示圖像位置縮進的單位 } LVITEM, FAR *LPLVITEM;
列表項常用的屬性如下:
View指定程序運行后列表視圖控件最初顯示的方式,可以設置為Icon(大圖標)、SmallIcon(小圖標)、List(列表)或Report(報表);
Single selection表示每次只能選中一個項;
Auto arrange使得項目在Icon和Small Icon顯示方式下能夠自動排序;
Edit Labels表示可以編輯項目的卷標;
No column header表示取消控件所有列的標題。
mask //標明列表框單元項有的特性Set of flags that specify which members of this structure contain data to be set or which members are being requested. This can be one or more of the following flags:
| LVIF_TEXT | The pszText member is valid or must be filled in. |
| LVIF_IMAGE | The iImage member is valid or must be filled in. |
| LVIF_INDENT | The iIndent member is valid or must be filled in. |
| LVIF_NORECOMPUTE | The control will not generate LVN_GETDISPINFO to retrieve text information if it receives a LVM_GETITEM message. Instead, the pszText member will contain LPSTR_TEXTCALLBACK. |
| LVIF_PARAM | The lParam member is valid or must be filled in. |
| LVIF_STATE | The state member is valid or must be filled in. |
| LVIF_DI_SETITEM | The operating system should store the requested list item information and not ask for it again. This flag is used only with the LVN_GETDISPINFO notification message. |
