十四、列表控件(List Control)
以列表的形式显示一组信息,显示每个包含图标(列表视图中)和标签的收集。除图标和标签外,每一项还能有显示在图标和标签的右边的列中的信息。
· LVS_ALIGNLEFT 在图标和小图标视图中指定项左对齐。
· LVS_ALIGNTOP 在图标和小图标视图中指定项在控件的顶端对齐。
· LVS_AUTOARRANGE 在图标或小图标视图中指定图标自动保持对齐。
· LVS_EDITABELS 允许项文本能够适本地进行编辑。父窗口必须运行了LVN_ENDLABLEDIT通知消息。
· LVS_ICON 指定为图标视图。
· LVS_LIST 指定为列表视图。
· LVS_NOCOLUMNHEADER 指定在报表视图中不显示列标题。缺省时,在报表视图中列有标题。
· LVS_NOLABELWRAP 在图标视图的单行中显示项文本,缺省时,在图标视图中项文本有可能被遮住。
· LVS_NOSCROLL 不允许滚动,所有项都必须在客户可视的区域内。
· LVS_NOSORTHEADER 指定列标题不象按钮那样工作。这种风格是有用的,例如,当在报表视图中单击列标题,将不会带来例如排序那样的动作。
· LVS_OWNERDRAWFIXED 在报表视图中允许所有者窗口为项着色。列表视图控件发送一条WM_DRAWITWM 消息来为每一项着色;但它不为每一子项发送独立的消息。DRAWITEMSTRUCT结构中的itemDate成员则包含了指定列表视图项的项数据。
· LVS_REPORT 指定报表视图。
· LVS_SHAREIMAGELISTS 指定控件没有归属于它的图象列表的所有权(也就是说,当控件被销毁后,图象列表不会被销毁)。该风格能够是同一个图象列表用于多个列表视图控件中。
· LVS_SHOWSELALWAYS 总是显示选择框,即使任何控件都没有焦点。
· LVS_SINGLESEL 允许每次只能选择一个项。缺省时,同时能选择多项。
· LVS_SMALLICON 指定为小图标视图。
· LVS_SORTASCENDING 使项按照项文本的升序方式排列。
· LVS_SORTDESCENDING 使项按照项文本的降序方式排列。
LVS_ICON; 大图标
LVS_SMALLICON; 小图标
LVS_LIST; 列表
LVS_REPORT;详细信息
1、创建列表控件的控件型变量或者使用GetDlgItem()函数获取控件的句柄。
CListCtrl m_list;
2、初始化标题栏,如果是详细信息,需要在对话框初始化的时候添加列表标题。
m_list.ModifyStyle(LVS_TYPEMASK,LVS_REPORT);
m_list.InsertColumn(0,_T("第一列"),LVCFMT_LEFT,120);
m_list.InsertColumn(1, _T("第二列"), LVCFMT_LEFT, 120);
3、也可以向列表框中的显示中添加图标。
(1)创建图片列表CImageList m_illarge;
(2)加载位图,将位图添加到图片列表当中
m_illarge.Create(IDB_BIG,32,1,RGB(255,0,255));
m_ilSmall.Create(IDB_SMALLDOC, 16, 1, RGB(255, 0, 255));
m_list.SetImageList(&m_illarge,LVSIL_NORMAL);
m_list.SetImageList(&m_ilSmall, LVSIL_SMALL);
4、向列表控件添加值
void C列表控件Dlg::OnBnClickedAdd()
{
// TODO: 在此添加控件通知处理程序代码
int nCount = m_list.GetItemCount();
CString str;
str.Format(_T("第%d行,第一列"),nCount+1);
m_list.InsertItem(nCount,str,0);//0这个参数就代表插入的图片列表中的索引
str.Format(_T("第%d行,第二列"), nCount + 1);
m_list.SetItemText(nCount, 1, str);
}
5、删除列表中的值
void C列表控件Dlg::OnBnClickedDel()
{
// TODO: 在此添加控件通知处理程序代码
int nCount = m_list.GetItemCount();
for (int i = nCount; i >= 0; i--)
{
if (m_list.GetItemState(i,LVIS_SELECTED) == LVIS_SELECTED)
{
m_list.DeleteItem(i);
}
}
}