00 CCtrlList控件概述

Post date: 2012/4/5 上午 09:03:30

1、CListCtrl控件概述

CListCtrl控件封装了“列表控件”的功能,它显示了一个关于item(有一个图标和一个标签组成)的集合。除了图标和标签外,每一个item还可以在图标和标签右边以列的方式显示其他信息。该控件可用于windows95/98和window nt 3.51及以后的操作系统上运行的程序的设计。

2、视图类别

该控件可以按四中方式显示它包含的内容,称为“视图”

1)、Icon view

每一个item以一个实际大小(32*32像素)的下面带标签的图标体现。用户可以拖动item到视图窗口的任一地方。

2)、Small icon view

每一格item以一个小的(16*16像素)、右边带标签的图标体现。用户可以拖动item到视图窗口的任一地方。

3)、List view

每一格item以一个小的(16*16像素)、右边带标签的图标体现。Items在列里面且不可以拖动。

4)、Report view

每一个item显示在自己的行中,附加的信息以列的方式显示在该行的右边。最左边的列包含小的图标和标签,后面并排的列显示应用程序安排的子信息。一个列头控件(CHeadCtrl 类)对每一列进行说明。

3、视图风格

CListCtrl当前的style决定了当前视图的情况。除了标准的风格,还支持大量的扩展风格。下面列出style及其说明:

1)标准风格

LVS_ALIGNLEFT:在小图标和图标视图中,表项(items)向左对齐(如果有10个item,从上往下到底部后再另开一列排列)

LVS_ALIGNMASK: 决定控件当前靠齐方式。

LVS_ALIGNTOP :在小图标和图标视图中,表项(items)向顶端对其(从如果有10个item,从左往右到右边后在另开一杭排列)。

LVS_AUTOARRANGE :图标自动保持小图标和图标视图。

LVS_EDITLABELS :Item的文本可以嵌入编辑。父窗口处理通知消息: LVN_ENDLABELEDIT

LVS_ICON :指定Icon类别的视图。

LVS_LIST :指定list类别的视图。

LVS_NOCOLUMNHEADER:在report类别的视图中不显示列头,report类别默认是显示列头的。

LVS_NOLABELWRAP :在icon视图中,Item的文本在单行显示。Icon视图下可能多行。

LVS_NOSCROLL :屏蔽滚动条,所有item必须在客户区内。该风格与list和report视图不兼容。

LVS_NOSORTHEADER :列头没有按钮功能。在report视图中,点击列头不执行操作时候(比如排序),可以使用该风格。

LVS_OWNERDATA :指定一个虚拟的ListView, 由用户自己管理Item数据。(see List-View Controls Overview)

Version 4.70. This style specifies a virtual list-view control. For more information about this list control style, see List-View Controls Overview.

LVS_OWNERDRAWFIXED :允许自画(仅详细资料模式)

The owner window can paint items in report view. The list-view control sends a WM_DRAWITEM message to paint each item; it does not send separate messages for each subitem. The iItemData member of the DRAWITEMSTRUCT structure contains the item data for the specified list-view item.

LVS_REPORT :该风格决定一个report视图,当对ClistCtrl使用该风格时候,第一列总是左对齐。你不能使用LVCFMNT_RIGHT改变列的对齐方式。

LVS_SHAREIMAGELISTS :在视图控件销毁时,不删除与之关联的imagelist控件。该风格可以使多个listctrl使用同样的imagelist。

LVS_SHOWSELALWAYS :使listctrl控件一直处于选中状态,即使该控件没有焦点。

LVS_SINGLESEL :在同一时间只有一个item可以被选择,默认情况下是可以有多个items被选择的。

LVS_SMALLICON :该风格指定小图标视图类别。

LVS_SORTASCENDING :item索引基于item的文本升序排列。

LVS_SORTDESCENDING :item索引基于item的文本降序排列。

LVS_TYPEMASK :决定控件当前窗口风格(是否屏蔽设置的 视图类别如:LVS_ICON)。可以确定当前视图的窗口风格。

LVS_TYPESTYLEMASK :决定窗口风格,控制item对齐方式和头显示以及其它行为。

修改风格的例子1:

ModifyStyle(LVS_TYPEMASK,LVS_ICON);//图标

ModifyStyle(LVS_TYPEMASK,LVS_SMALLICON);//小图标

ModifyStyle(LVS_TYPEMASK,LVS_LIST);//列表

修改风格的例子2:

//GWL_STYLE 获得原有风格

DWORD dwStyle = ::GetWindowLong(m_report.m_hWnd, GWL_STYLE);

dwStyle &= ~(LVS_TYPEMASK);

//设置新风格

SetWindowLong(m_report.m_hWnd, GWL_STYLE,dwStyle|LVS_REPORT|LVS_NOCOLUMNHEADER

| LVS_NOLABELWRAP| LVS_EDITLABELS); //

备注:

对于LVS_SORTASCENDING和LVS_SORTDESCENDING 风格,表项(item)的索引基于表项的文本分别进行升序和降序排列。由于LVS_LIST和LVS_REPORT风格的视图根据索引以相同的方式排列显示,索引这两个类别的视图的排序结果能立即体现给用户。关于LVS_ICON 和LVS_SMALLICON这两个视图不使用索引决定icons的位置,所以它们排序结果不能体现给用户。

你可以使用LVS_TYPEMASK风格从视图列表类别中获得当前列表的类别。

你可以使用LVS_ALIGNMASK风格获得视图列表当前靠齐方式。

你可以使用LVS_TYPESTYLEMASK风格获得对齐方式(LVS_ALIGNTOP 、LVS_ALIGNLEFT)和头显示和行为(LVS_NOCOLUMNHEADER、LVS_NOSORTHEADER)的的风格。

List-View控件的风格被扩展了,要使用这些新风格,可以通过

LVM_SetExtendedListViewStyle消息或者

ListView_SetExtendedListViewStyle 宏和

ListView_SetExtendedListViewStyleEx宏 中的一个。