在使用CListCtrl控件Report顯示風格時,需要設置列標題信息,否則不能向控件中添加數據信息,編輯列標題需要
使用InsertColumn方法:
m_ListCtrl.InsertColumn(0, "姓名", LVCFMT_LEFT, 150, 0);
m_ListCtrl.InsertColumn(1, "聯系電話", LVCFMT_LEFT, 150, 1);
函數功能:在報告模式下插入一列
函數原型:int InsertColumn(int nCol, const LVCOLUMN* pColumn)
int InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1);
參數: nCol表示要插入列的列號。
pColumn 為新建列屬性的LVCOLUMN結構的地址。
對於第二種函數重載,參數lpszcolumnHeading 為列標題的字符串的地址,所以可以使用一個字符串,比如 "姓名"。
nFormat 指定列對齊方式的整數,缺省值是左對齊。它可以為下列值之一:LVCFMT_LEFT,LVCFMT_RIGHT或LVCFMT_CENTER。
nWidth 以像素為單位的列寬。缺省值為-1,表示沒有設置列寬。
nSubItem 與列相關聯的子項的索引。缺省值為-1,表示沒有子項與列相關。
為CListCtrl控件添加行:
在CListCtrl控件中添加信息時不能直接向控件中添加列信息,需要先為控件添加行,使用InsertItem方法:
m_ListCtrl.InsertItem(0, "");
函數原型:
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 );
其中,nItem是控件中行的索引 、lpszItem是控件頭的名字。
一般我們用的比較多的是第二種和第三種,其中第三種是建立一個帶有頭標的項。
用於MFC中
CListCtrl控件加入列表項
參數:
第一個參數是節點名
第二個參數是樹節點未選中時使用的圖標下標
第三個參數是樹節點選中時使用的圖標下標,
第四個參數是本節點的父節點,第二、三個參數都是針對樹的圖像列表而言的。CImageList* SetImageList( CImageList * pImageList, int nImageListType );給樹插入圖像列表.
為CListCtrl控件添加數據:
通過SetItemText方法可以為任意行的任意列添加數據:
m_ListCtrl.SetItemText(0, 0, "Name");
m_ListCtrl.SetItemText(0, 1, "123456");
設置CListCtrl控件的擴展風格:
使用SetExtendedStyle函數可以設置CListCtrl控件的擴展風格,如顯示方式,畫出網格線等:
m_ListCtrl.SetExtendedStyle(
LVS_EX_FLATSB // 扁平風格滾動
| LVS_EX_FULLROWSELECT // 允許正航選中
| LVS_EX_HEADERDRAGDROP // 允許標題拖拽
| LVS_EX_ONECLICKACTIVEATE // 高亮顯示
| LVS_EX_GRIDLINES // 畫出網格線
);
單擊CListCtrl控件列標題進行排序:
在使用CListCtrl控件的Report顯示風格時,要實現單擊列標題進行排序需要在控件的LVN_COLUMNCLICK消息的處理函數中添加SortItem函數:
// Sort the item in reverse alphabetical order.
static int CALLBACK
MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the list view control.
// The lParam of an item is just its index.
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString strItem2 = pListCtrl->GetItemText(lParam2, 0);
return strcmp(strItem2, strItem1);
}
void snip_CListCtrl_SortItems()
{
// The pointer to my list view control.
extern CListCtrl* pmyListCtrl;
// Sort the list view items using my callback procedure.
pmyListCtrl->SortItems(MyCompareProc, (LPARAM) pmyListCtrl);
}
