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