CListCtrl控件中InsertItem和SetItemText函数及CTreeCtrl::SetItemText

如果不先调用InsertItem这个函数,后面的SetItemText函数写了,也不起作用。

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

listctrl 设置风格

//获得原有风格
DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);
dwStyle &= ~(LVS_TYPEMASK);
dwStyle &= ~(LVS_EDITLABELS);
//设置新风格
SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,dwStyle, |LVS_REPORT | LVS_NOLABELWRAP | LVS_SHOWSELALWAYS);
//设置扩展风格
DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES;
ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles, styles );

其中LVS_EX_FULLROWSELECT 就是前面说得整行选中
LVS_EX_GRIDLINES 网格线(只适用与report风格的listctrl)
LVS_EX_CHECKBOXES 前面加个checkbox
pListCtrl->SetExtendedStyle( m_listctrl.GetExtendedStyle() | LVS_EX_SUBITEMIMAGES);

 

 

你可能感兴趣的:(vc知识集锦)