最近做一个小项目用到CListCtrl控件中InsertItem和SettItemtext函数这两个函数,用了好大劲才明白,希望以后少走弯路内容如下:
InsertItem在MSDN中的函数原型如下
int InsertItem( const LVITEM* pItem );
int InsertItem( int nItem, LPCTSTR lpszItem );
int InsertItem( int nItem, LPCTSTR lpszItem, int nImage );
int InsertItem( UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam );
一般我们用的比较多的时第2种和第三种,其中第三种时建立一个带有头标的项
nItem: 控件中行的索引
lpszItem : 控件头的名字
***********************************************************
SettItemtext函数的原型
BOOL SetItemText( int nItem, int nSubItem, LPCTSTR lpszText ); |
Index of the item whose text is to be set.
Index of the subitem, or zero to set the item label.
Pointer to a string that contains the new item text.
Nonzero if successful; otherwise zero.
****************************************************
下面用实例讲解InsertItem和SettItemtext函数的用法
Crecordset m_rsUserInfo;//数据集
.......
CListCtrl Users;
do
{
a=Users.GetItemCount();
Users.InsertItem(a,UserId);//在第a行的第一列插入UserId
// 此时Users.GetItemCount()的值是一而不是0因为一行已插入了
Users.SetItemText(a,USER_NAME_COL_ID,UserName);//设置第a行的USER_NAME_COL_ID列text为UserName;
/* Users.SetItemText(a,USER_NAME_COL_ID+1,L"test1");
Users.SetItemText(a,USER_NAME_COL_ID+2,L"test2");*/
m_rsUserInfo.MoveNext();
}while(!m_rsUserInfo.IsEOF());
上面代码以很清晰了即
a=Users.GetItemCount();
Users.InsertItem(a,UserId);//插入一行(第a行),在第a行的第一列插入UserId
Users.SetItemText(a,USER_NAME_COL_ID,UserName);//设置第a行的USER_NAME_COL_ID列text为UserName;
特别注意Users.InsertItem(a,UserId)之后Users.GetItemCount()的值增加1.
我曾这样用(*************嘿嘿*********用错了):
Users.InsertItem(Users.GetItemCount(),UserId);//在第a行的第一列插入UserId
Users.SetItemText(Users.GetItemCount(),USER_NAME_COL_ID,UserName);//设置第a行的USER_NAME_COL_ID列text为UserName;