您的位置:首页 > 其它

CListCtrl控件的使用

2014-05-15 11:28 197 查看
1.动态生成列表控件。

在资源页面里,点击列表控件,然后在需要放置列表的地方拖拉就可以生成一个列表,查看它的属性->样式,可以设置它的样式,例如图标,小图标,列表,报告,单个选择,自动排列,没有标签换行,编辑标签 等等。

这种方法是静态生成列表控件,程序运行时列表就已经生成了,如果我们需要动态生成列表控件,让列表在我需要他生成的时候才生成,就要用CListCtrl::Create函数。

BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );

其中参数dwStyle用来确定列表控制的风格;rect用来确定列表控制的大小和位置;pParentWnd用来确定列表控制的父窗口,通常是一个对话框;nID用来确定列表控制的标识。其中列表控制的风格可以是下列值的组合:

LVS_ALIGNLEFT 用来确定表项的大小图标以左对齐方式显示;

  LVS_ALIGNTOP 用来确定表项的大小图标以顶对齐方式显示;

  LVS_AUTOARRANGE 用来确定表项的大小图标以自动排列方式显示;

  LVS_EDITLABELS 设置表项文本可以编辑,父窗口必须设有LVN_ENDLABELEDIT风格;

  LVS_ICON 用来确定大图标的显示方式;

  LVS_LIST 用来确定列表方式显示;

  LVS_NOCOLUMNHEADER 用来确定在详细资料方式时不显示列表头;

  LVS_NOLABELWRAP 用来确定以单行方式显示图标的文本项;

  LVS_NOSCROLL 用来屏蔽滚动条;

  LVS_NOSORTHEADER 用来确定列表头不能用作按钮功能;

  LVS_OWNERDRAWFIXED 在详细列表方式时允许自绘窗口;

  LVS_REPORT 用来确定以详细资料即报告方式显示;

  LVS_SHAREIMAGELISTS用来确定共享图像列表方式;

  LVS_SHOWSELALWAYS 用来确定一直显示被选中表项方式;

  LVS_SINGLESEL 用来确定在某一时刻只能有一项被选中;

  LVS_SMALLICON 用来确定小图标显示方式;

  LVS_SORTASCENDING 用来确定表项排序时是基于表项文本的升序方式;

  LVS_SORTDESCENDING 用来确定表项排序时是基于表项文本的降序方式;

以上的风格其实就是静态生成列表控件时 “属性->样式” 标签里的内容。如果列表控件创建完之后我们需要修改他的样式,就可以用GetWindowLong来获取CListCtrl已有的样式,然后用SetWindowLong来修改样式。



2.设置扩展样式。

除了上面的哪些基本样式,CListctrl还有更多的扩展样式,如果我们要添加或删除扩展样式,就不是像基本样式那样用SetWindowLong了,CListctrl提供了一个函数CListCtrl::SetExtendedStyle,这个函数可以添加或删除扩展样式,相应的要获得CListctrl的扩展样式,应该使用CListCtrl::GetExtendedStyle,而不是GetWindowLong。

DWORD SetExtendedStyle( DWORD dwNewStyle );

DWORD dwNewStyle 就是你要设置的样式咯,可以是以下值的组合(抄别人的不知道完不完整):

CListCtrl控件的扩展样式

LVS_EX_GRIDLINES //绘制表格线

LVS_EX_SUBITEMIMAGES//子项目图标列表

LVS_EX_CHECKBOXES //带复选框

LVS_EX_TRACKSELECT //自动换行

LVS_EX_HEADERDRAGDROP//报表头可以拖拽

LVS_EX_FULLROWSELECT //选择整行

LVS_EX_ONECLICKACTIVATE//单击激活

LVS_EX_TWOCLICKACTIVATE//双击激活

LVS_EX_FLATSB//扁平滚动条

LVS_EX_REGIONAL

LVS_EX_INFOTIP

LVS_EX_UNDERLINEHOT

LVS_EX_UNDERLINECOLD

LVS_EX_MULTIWORKAREAS//多工作区



3.添加列 与 删除列

列表控件创建好之后,就要为他添加列了,使用CListCtrl::InsertColumn函数为它添加列。要删除一列,使用CListCtrl::DeleteColumn函数。

int InsertColumn( int nCol, LPCTSTR lpszColumnHeading,
int nFormat = LVCFMT_LEFT, int nWidth = -1, intnSubItem =
-1 );

iCol:为列的位置,从零开始

lpszColumnHeading:为显示的列名

nFormat:为显示对齐方式

nWidth:为显示宽度

nSubItem:为分配给该列的列索引。这个参数有什么作用至今不懂,希望懂的朋友告诉我。

例如:

InsertColumn(3,"所在区域",LVCFMT_LEFT,60);

即添加一个名字为“所在区域”的列,名字靠左排列,列的长度为60,这个列是第四列(从0开始算)。



4.添加行 与 删除行。

添加行即是添加记录咯,一行就是一条记录。使用CListCtrl::InsertItem函数来添加行。要删除一行,使用CListCtrl::DeleteItem函数,注意,如果你删除的行不是最后一行,那么删除后下面的行会自动上移填补删除行的空间。要删除全部行,使用CListCtrl::DeleteAllItems。

int InsertItem( int nItem, LPCTSTR lpszItem );

nItem :行的索引,从0开始计算。

lpszItem :行的名称,一般为0或者""(即不需要为行添加名称)。如果为他赋值一个字符串,实际效果是该字符串 会成为该行的第一列的内容。

例如 InsertItem( 5, 0) 即在行索引5的位置添加一行(即是第六行)。



5.设置某行某列的内容 与 获取某行某列的内容。

如果要设置某行某列的内容。使用CListCtrl::SetItemText函数。

BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );

nItem :行的索引,从0开始。

nSubItem :列的索引,从0开始。

lpszText :要填充的内容。

例如 SetItemText(6,3,"hello"); 即设置第7行,第4列的内容为“hello”。



相反地,如果我们要提取某行某列的内容,使用CListCtrl::GetItemText函数。

CString GetItemText( int nItem, int nSubItem )
const;

nItem :行的索引,从0开始。

nSubItem :列的索引,从0开始。

例如 CString text; text=GetItemText(6,3); 提取第7行,第4列的内容并赋给text。



6.获取一列的属性和设置一列的属性。

如果要获取某列的属性,譬如说某列的列名、列的长度。就要用CListCtrl::GetColumn函数。

BOOL GetColumn( int nCol, LVCOLUMN* pColumn )
const;

nCol :列的索引,从0开始。

pColumn :指向LVCOLUMN结构体的指针。该LVCOLUMN结构体就是用来保存得到的列属性信息的。

LVCOLUMN结构体有一个成员变量 mask ,你必须为这个变量赋值,用来指定你要获取什么属性,譬如说你要获取某列的长度,你就必须为mask赋值LVCF_WIDTH,如果你要获取某列的列名,就必须为mask赋值LVCF_TEXT。从MSDN中还有这样的描述:If the mask member
specifies the LVCF_TEXT value, the pszText member must contain the address of the buffer that receives the item text and the cchTextMax member
must specify the size of the buffer.

意思是说如果你要获取的属性是列名,就必须为LVCOLUMN结构体的pszText变量指定一个buf的地址,这个buf用来接收列名,还要为LVCOLUMN结构体的cchTextMax变量指定这个buf的大小。

下面的例子表示要获取第3列的列名和列长度:

LVCOLUMN lvc;

lvc.mask=LVCF_WIDTH | LVCF_TEXT;

char name[20];

lvc.pszText=name;

lvc.cchTextMax=20;

m_listctrl.GetColumn(2,&lvc);

成功获取属性信息的话长度就保存在LVCOLUMN lvc的cx变量里,列名就保存在char name[20]里,当然你也可以从LVCOLUMN lvc的pszText变量里得到列名,因为pszText变量保存了char name[20]的首地址。

如果要设置某列的属性,就要用CListCtrl::SetColumn函数。

BOOL SetColumn( int nCol, const LVCOLUMN* pColumn );

参数意思和GetColumn一样,而SetColumn里的pColumn 参数保存了你将要设置的属性。下面的例子表示把第四列的列长度设置为50,列名设置为“销量”:

LVCOLUMN lvc;

lvc.mask=LVCF_WIDTH | LVCF_TEXT; //同样的,你要设置什么属性,就要先给mask变量赋值响应的标志。

lvc.pszText="销量";

lvc.cx=50;

m_listctrl.SetColumn(3,&lvc);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: