1. 基本風(fēng)格設置
(1)函數: ModifyStyle( )
(2)重要參數: LVS_ICON // 大圖標
LVS_SMALLICON // 小圖標
LVS_LIST // 列表
LVS_REPORT // 報表
也正是因此,防止用戶(hù)出錯, 微軟干脆把LVS_ICON, LVS_SMALLICON, LVS_LIST, LVS_REPORT這些都不設置成位標志,因此不能疊加.同時(shí)還設置了一個(gè)多余的掩碼:LVS_TYPEMASK.它是用來(lái)屏蔽的.
(5) 舉例:
如果我們要判斷一個(gè)CListCtrl的風(fēng)格:
DWORD dwStyle = m_listctrl.GetStyle( );
// 判斷是否大圖標樣式
If ( dwStyle & LVS_ICON )
…….
這種寫(xiě)法是錯誤的.正確的寫(xiě)法涉及到掩碼:
DWORD dwStyle = m_listctrl.GetStyle( ) & LVS_TYPEMASK;
If ( dwStyle = = LVS_ICON)
…….
同理,我們在改變風(fēng)格時(shí),應該這樣寫(xiě):
ModifyStyle( LVS_TYPEMASK, LVS_ICON);
(2) 重要參數:
LVS_EX_FULLROWSELECT //選中某行使整行高亮(只用于報表風(fēng)格)
LVS_EX_GRIDLINES //網(wǎng)格線(xiàn)(只適用與報表風(fēng)格)
LVS_EX_CHECKBOXES //設置checkbox狀態(tài)
(3)舉例
DWORD dwStyle = GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;
dwStyle |= LVS_EX_GRIDLINES;
SetExtendedStyle(dwStyle);
3.其他風(fēng)格設置:
函數: SetTextColor ( ) // 設置文字顏色
SetBkColor ( ) // 設置邊框顏色
SetTextBkColor ( ) // 設置文字背景顏色
可以給大圖標風(fēng)格和小圖標風(fēng)格設置圖標:
HICON icon=AfxGetApp()->LoadIcon(IDI_ICON1);
m_icon.Add(icon);
m_listctrl.SetImageList(&m_icon,LVSIL_SMALL);//小圖標
m_listctrl.SetImageList(&m_icon,LVSIL_NORMAL)// 大圖標
5.插入一列
m_listctrl.InsertColumn(0,”哈哈”,LVCFMT_LEFT,80);
其中: 0是索引項,”哈哈”是列標題,LVCFMT_LEFT是顯示方式(靠左),80表示列的寬
6.插入一行
m_listctrl.InsertItem(0, “
m_listctrl.SetItemText( 0,1, “
m_ listctrl.SetItemText(0,2, “
7.得到所有的行數
m_listctrl.GetItemCount( ) ;
8.得到所有的列數
m_listctrl.GetHeaderCtrl().GetItemCount( ) ;
9.得到被單擊的項的行列號
void Cmylist::OnClick(NMHDR* pNMHDR, LRESULT* pResult) //單擊消息
{
NM_LISTVIEW *info=(NM_LISTVIEW*)pNMHDR;
selectedIndex=info->iItem; // 行號
selectedsub=info->iSubItem; // 列號
}
(Cmylist為CListCtrl的派生類(lèi),以selectedIndex和selectedsub為接口,方便使用)
10.得到被單擊的列頭索引號
void Cmylist::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
selectedField=pNMListView->iSubItem;//列頭號
}
同上,也是以selectedField為接口,方便用戶(hù)調用
11.選中或者取消一行
plistctrl->SetItemState(index,LVIS_SELECTED,LVIS_SELECTED);//選中一行
plistctrl->SetItemState(index,0,LVIS_SELECTED);//取消一行
DWORD style=plistctrl->GetItemState(index,LVIS_SELECTED);//獲得選中信息
12.獲得被選中的多行
POSITION p=m_listctrl.GetFirstSelectedItemPosition();// 得到第一次選中的位置
while(p)
{
int index=m_listctrl.GetNextSelectedItem(p);
…
}
13.刪除一行或者一列
m_listctrl.DeleteItem( index );
m_listctrl.DeleteColumn(index);
14.刪除多行或者多列
注意要從后面開(kāi)始刪起,比如,如果我想刪除第一行和第二行,應該:
m_listctrl.DeleteItem(1);
m_listctrl.DeleteItem(0);
而不能:
m_listctrl.DeleteItem(0);
如果用for循環(huán),應該遞減:
For(int k=m_listctrl.GetItemCount( );k>=-1;k++)
m_listctrl.DeleteItem(k);
這就是刪除所有行,當然也可以用CListCtrl::DeleteAllItems
15 根據索引號得到某一列的信息
HDITEM hdi;
TCHAR lpBuffer[256];
hdi.mask = HDI_TEXT;
hdi.pszText = lpBuffer;
hdi.cchTextMax = 256;
plistctrl->GetHeaderCtrl()->GetItem(index, &hdi);
CString str=hdi.pszText;
聯(lián)系客服