CListCtrl组件的使用

 CListCtrl组件的使用 

作者:骄傲的猫

1. 创建CListCtrl

在对话框窗体中创建的话,只要用资源编辑器在Dialog资源上添加一个CListCtrl就可以了,这里不作详述。这里主要将一下如何在非对话框窗体中使用CListCtrl类提供的Create函数创建对象。

这种情况创建对象一般分为两步,第一步构造CListCtrl类的对象,第二步调用对象的Create函数在程序界面上创建可视化组件(该方法一般在OnInitialUpdate或OnCreate事件中调用)。下面我们来看一下Create函数的原型。

virtual BOOL Create(
    DWORD           dwStyle,
    const RECT&    rect,
    CWnd*              pParentWnd,
    UINT                 nID
);
第一个参数dwStyle指定了创建的ListCtrl的样式,具体有哪些可选样式可以查看SDK的文档。

第二个参数rect指定创建的ListCtrl的大小和位置。

第三个参数pParentWnd指定创建的ListCtrl的父窗体。

第四个参数nID指定创建的ListCtrl的ID值。

 如果Create函数调用成功则返回TRUE(非零),否则返回FALSE(零)

 

2. 添加显示列(Column)

如果创建的ListCtrl具有LVS_REPORT样式,则可以显示多列数据,则一节我们将讲解如何为CListCtrl组件添加列。

添加列使用CListCtrl对象的成员函数InsertColumn,该函数有两种重载形式,下面让我们看一下他们的原型。

int InsertColumn(
            int nCol, 
            const LVCOLUMN* pColumn
);

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

 参数nCol指定创建的新列的index。

参数pColumn指向一个LVCOLUMN结构体,该结构体包含创建的新列的属性。

参数lpszColumnHeading指定列名。

参数nFormat 指定列的对齐方式,它的值可以是LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_CENTER之一。

参数nWidth指定列宽。

参数nSubItem指定与改列关联的子项的index。

LVCOLUMN结构的定义如下:

typedef struct _LVCOLUMN { 
    UINT mask; 
    int fmt; 
    int cx; 
    LPTSTR pszText; 
    int cchTextMax; 
    int iSubItem; 
#if (_WIN32_IE >= 0x0300)
    int iImage;
    int iOrder;
#endif
} LVCOLUMN, *LPLVCOLUMN; 

mask成员指定该结构提可以指定哪些成员有效:
           LVCF_FMT:               fmt成员有效
           LVCF_IMAGE:           iImage成员有效
           LVCF_ORDER:        iOrder成员有效
           LVCF_SUBITEM:     iSubItem成员有效
           LVCF_TEXT:             pszText成员有效
           LVCF_WIDTH:         cx成员有效

fmt成员指定列表头的对齐方式

cx指定列宽

pszText指定显示的列表头

cchTextMax指定pszText指向的缓存的大小,如果不返回列的信息,该成员可以忽略

iSubItem与列关联的subitem的index

iImage与CListCtrl关联的CImageList对象用一个图象的index。

iOrder该列显示在第几列。

 下面是在CListCtrl中插入列的示例代码。

	LVCOLUMN  col;
	col.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT | LVCF_ORDER;
	col.fmt =  LVCFMT_LEFT;
	col.cx = 75;
	col.pszText = _T("File Name");
	col.iOrder = 2;
	m_pListCtr.InsertColumn(0, &col);
	
	col.fmt = LVCFMT_RIGHT;
	col.cx = 50;
	col.pszText = _T("Finished");
	col.iOrder = 0;
	m_pListCtr.InsertColumn(1, &col);

	col.cx = 50;
	col.pszText = _T("Size");
	col.iOrder = 3;
	m_pListCtr.InsertColumn(2, &col);

	col.cx = 50;
	col.pszText = _T("Speed");
	col.iOrder = 1;
	m_pListCtr.InsertColumn(3, &col);

 

3. 添加显示行(Item)

CListCtrl中用InsertItem添加行,并用SetItem为该Item设置子项(SubItem)。首先让我们看一下InsertItem函数,它的的原型如下。

int InsertItem(
   const LVITEM* pItem 
);
int InsertItem(
   int nItem,
   LPCTSTR lpszItem 
);
int InsertItem(
   int nItem,
   LPCTSTR lpszItem,
   int nImage 
);

 从上面的代码可以看出InsertItem用到了一个结构体LVITEM,在该结构体中保存将要创建的Item的属性,LVITEM的定义如下。

typedef struct _LVITEM { 
  UINT mask; 
  int iItem; 
  int iSubItem; 
  UINT state; 
  UINT stateMask; 
  LPTSTR pszText; 
  int cchTextMax; 
  int iImage; 
  LPARAM lParam;
  #if (_WIN32_IE >= 0x0300)
    int iIndent;
  #endif
    int iGroupId;
} LVITEM; 
 

mask成员同LVCOLUMN中的mask成员功能相同,我们用它来指定在LVITEM中哪些成员是有效的。
iItem指定新建的Item的index。
iSubItem指定新建的Item在一列上对应的SubItem的Index。
pszText指定该Item显示的内容
iImage指定该Item显示的图片

 

示例
LVITEM lvi;
lvi.mask = LVIF_TEXT;

lvi.iItem = 0;
lvi.iSubItem = 0;
lvi.pszText = _T("Hell.zip");
int i = m_pListCtr.InsertItem(&lvi);

m_pListCtr.SetItemText(i, 1, _T("50%"));
m_pListCtr.SetItemText(i, 2, _T("100M"));
m_pListCtr.SetItemText(i, 3, _T("40K/S"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值