列表视图控件(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. |