vc 为什么我用m_list.SetItemText(1, 0, "KKK")设置列表内容
一是 CListCtrl 要设置为 Report 视图 (属性View)
二是要提前设置好列,如图,我估计是第一个原因
m_lst.InsertColumn(0,
"学号"
, LVCFMT_LEFT, 100);
m_lst.InsertColumn(1,
"姓名"
, LVCFMT_LEFT, 90);
该函数CListCtr::InsertItem一般和CListCtr::SetItemText一起使用。
list.InsertItem(0,"主数据");
插入数据"主数据"到第一行的主项,你可以认为是第一列。
list.SetItemText(0,1,"子数据");
将第一行第二列(1表示第二列)设置为“子数据”。
给你个例子。。。
m_list.InsertColumn(0,"Col 1");
m_list.InsertColumn(1,"Col 2");
m_list.InsertColumn(2,"Col 3");
m_list.InsertColumn(3,"Col 4");
m_list.InsertItem(0,"row1",0);
CString stemp ="";
for(int i =0;i<4;i++)
{
stemp.Format("row 0 %d",i);
m_list.SetItemText(0,i,stemp);
}
m_list.InsertItem(0,"row befor prev",0);
m_list.InsertItem(2,"row after prev",0);
注意InsertItem的第一个参数
结果因该是这样的
row befor prev
row1 row01 row02 row03 row04
row after prev
CListCtrl控件中InsertItem和SetItemText函数
本人初次用CListCtrl控件的时候,对于 InsertItem和SetItemText两个函数的作用始终不是太懂,比如如果不先调用InsertItem这个函数,后面的SetItemText函数写了,也不起作用.查了MSDN,也没有收获,经过有人点拔,才恍然大悟.今天将经验说一下,希望有共同爱好者少走弯路.
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种和第三种,其中第三种时建立一个带有头标的项
要调用第三个,可以先声明一个CImageList对象
m_ImageList.Create(16,16,true,2,2);
m_ImageList.Add(theApp.LoadIcon(IDR_MAINFRAME));
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
这样,控件中的每一行的开头就有一个应用程序图标
现在转入正题,先介绍一下InsertItem个个参数的意义
nItem: 控件中行的索引
lpszItem : 控件头的名字
.........................................................................................................................................................................................................
SetItemText函数的原型
BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );
******************注意这个函数中的参数nItem就是INSERTITEM中的NITEM,
也就是说InsertItem是向控件 声请一行 来放数据,记住只是声请,那么方数据的工作就又SETITEMTEXT来实现
举例如下:
CListCtrl m_listctrl;
m_listctrl = new ClistCtrl();
m_listctrl.Creae(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS
,bigRect,this,IDC_LIST1
);
m_listctrl.InsertItem(0,"01");
m_SetItemtext(0,1,"1");
m_SetItemtext(0,2,"2");
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
至于要添多少多少个数据,就由你的控件由多少列了
获得可以这样的道 int columns= m_listctr.GetHeaderCtrl()->GetItemCount();
获得可以这样的道 int rows= m_listctrl.GetItemCount();