天天看點

CListCtrl控件中InsertItem和SetItemText函數

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();

繼續閱讀