CListCtrl控件中InsertItem和SetItemText函数

来源:互联网 发布:linux设置pst时区 编辑:程序博客网 时间:2024/06/03 05:07

ps:之前一直使用的是int InsertItem( const LVITEM* pItem );
这种形式,在做转换的时候,因为我得到的字符串类型,要赋给pItem.pszText,这是一个LPTSTR类型的数据,但是每次我赋值之后都会变成乱码,还是需要确认一下。

 

本人初次用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();