當前位置:成語大全網 - 書法字典 - VC++列表控件的具體用法示例。

VC++列表控件的具體用法示例。

請復制並粘貼以下內容:快點給我。

1.ListCtrl樣式

LVS圖標:為每個項目顯示壹個大圖標。

LVS_SMALLICON:為每個項目顯示壹個小圖標。

LVS列表:用小圖標顯示項目列表。

LVS _報表:顯示項目詳細信息。

直觀理解:windows資源管理器中,“查看”選項卡下的“大圖標、小圖標、列表、詳細信息”。

-

2.設置listctrl樣式和擴展樣式。

長lStyle

lStyle = GetWindowLong(m _ list . m _ hWnd,GWL _ STYLE);//獲取當前窗口樣式

lStyle & amp= ~ LVS _類型掩碼;//清除顯示模式位

lStyle |= LVS報告;//設置樣式

SetWindowLong(m _ list . m _ hWnd,GWL_STYLE,l STYLE);//設置樣式

DWORD dwStyle = m_list。GetExtendedStyle();

dw style | = LVS _ EX _ FULLROWSELECT;//選擇壹個以高亮顯示整行(僅適用於報表樣式的listctrl)

dw style | = LVS _ EX _ GRIDLINES;//網格線(僅適用於報表樣式的listctrl)

dw style | = LVS _ EX _復選框;//在//項目前生成復選框控件。

m_list。SetExtendedStyle(dw style);//設置擴展樣式

-

插入數據

m_list。insert column(0,“ID”,LVCFMT_LEFT,40);//插入列

m_list。insert column(1,“NAME“,LVCFMT_LEFT,50);

int nRow = m_list。insert item(0,“11“);//插入行

m_list。SetItemText(nRow,1,“Jacky“);//設置數據

-

4.保持項目選中。

選擇“始終以樣式顯示選定內容”,或在上面的第2點中設置“LVS _顯示始終”。

-

5.選中和取消選中壹行。

int nIndex = 0;

//已選擇

m_list。SetItemState(nIndex,LVIS選定|LVIS聚焦,LVIS選定|LVIS聚焦);

//取消選中

m_list。SetItemState(nIndex,0,LVIS _選定| LVIS _聚焦);

-

6.獲取listctrl中所有行的復選框狀態。

m_list。SetExtendedStyle(LVS復選框);

CString字符串;

for(int I = 0;我& ltm_list。GetItemCount();我)

{

if(m _ list。GetItemState(I,LVIS _選定)= = LVIS _選定|| m_list。get check(I))

{

海峽。format(_ T(“第%d行的復選框被選中”),I);

AfxMessageBox(str);

}

}

CString字符串;

strIns =“delete from tmpStatByGround“;

m_pRs。create instance(_ _ uuidof(Recordset));

m _ pRs-& gt;CursorLocation = adUseClient

m _ pRs-& gt;open((LPCTSTR)strIns,vDispatch,adOpenKeyset,

adLockOptimistic,ADC mdunknown);

-

7.獲取listctrl中所有選定行的序列號。

方法1:

CString字符串;

for(int I = 0;我& ltm_list。GetItemCount();我)

{

if(m _ list。GetItemState(I,LVIS _選定)= = LVIS _選定)

{

海峽。format(_ T(“行%d被選中“),I);

AfxMessageBox(str);

}

}

方法二:

位置pos = m_list。GetFirstSelectedItemPosition();

if(pos = = NULL)

TRACE0(“未選擇任何項目!\ n ");

其他

{

當(位置)

{

int nItem = m_list。GetNextSelectedItem(pos);

TRACE1(“已選擇項目%d!\n“,nItem);

//妳可以在nItem上自行處理

}

}

-

8.獲取項目信息

TCHAR SZ buf【1024】;

LVITEM lvi

lvi.iItem = nItemIndex

lvi。isubitem = 0;

lvi.mask = LVIF _ TEXT

lvi.pszText = szBuf

lvi . cchtextmax = 1024;

m_list。GetItem(& amp;lvi);

-

9.獲取listctrl所有列的標題字符串內容。

LVCOLUMN lvcol

char string【256】;

int nColNum

CString str column name【4】;//如果有4列

nColNum = 0;

lvcol . mask = LVCF _ TEXT;

lvcol.pszText = str

lvcol.cchTextMax = 256

while(m _ list。GetColumn(nColNum & amp;lvcol)

{

strColumnName【ncol num】= lvcol . psztext;

nColNum

}

-

10.使listctrl中的壹項可見,即滾動滾動條

m_list。ensure visible(I,FALSE);

-

11.獲取listctrl列號。

int nHeadNum = m_list。GetHeaderCtrl()-& gt;GetItemCount();

-

12.刪除所有列

方法1:

while(m _ list。刪除列(0))

因為刪除第壹列後,後續的列將依次上移。

方法二:

int nColumns = 4;

for(int I = nColumns-1;我& gt=0;我-)

m_list。刪除列(I);

-

13.獲取單擊的listctrl的列號。

添加listctrl控件的NM_CLICK消息對應函數。

void ctest 6 DLG::onclick list 1(nmh dr * pNMHDR,LRESULT* pResult)

{

//方法1:

/*

DWORD dw pos = GetMessagePos();

CPoint(低字(dwPos),高字(dwPos));

m_list。screento client(& amp;點);

LVHITTESTINFO lvinfo

lvinfo.pt = point

lvinfo.flags = LVHT _ ABOVE

int nItem = m_list。子項測試(& amplvinfo);

if(nItem!= -1)

{

CString strtemp

Strtemp。Format(“您點擊了第%d行第%d列“,lvinfo.iItem,lvinfo . isubitem);

AfxMessageBox(strtemp);

}

*/

//方法二:

/*

NM _ LISTVIEW * pNMListView =(NM _ LISTVIEW *)pNMHDR;

if(pNMListView-& gt;項目!= -1)

{

CString strtemp

Strtemp。Format(“您點擊了第%d行第%d列“,

pNMListView-& gt;iItem,pNMListView-& gt;iSubItem);

AfxMessageBox(strtemp);

}

*/

* pResult = 0;

}

-

14.判斷是否點擊listctrl的復選框。

添加listctrl控件的NM_CLICK消息對應函數。

void ctest 6 DLG::onclick list 1(nmh dr * pNMHDR,LRESULT* pResult)

{

DWORD dw pos = GetMessagePos();

CPoint(低字(dwPos),高字(dwPos));

m_list。screento client(& amp;點);

LVHITTESTINFO lvinfo

lvinfo.pt = point

lvinfo.flags = LVHT _ ABOVE

UINT nFlag

int nItem = m_list。擊球(點& ampnFlag);

//判斷是否點擊復選框。

if(nFlag = = LVHT _ ONITEMSTATEICON)

{

AfxMessageBox(“指向listctrl的復選框“);

}

* pResult = 0;

}

-

15.右鍵單擊listctrl的項目彈出菜單。

添加listctrl控件的NM_RCLICK消息的相應函數。

void ctest 6 DLG::onclicklist 1(nmh dr * pNMHDR,LRESULT* pResult)

{

NM _ LISTVIEW * pNMListView =(NM _ LISTVIEW *)pNMHDR;

if(pNMListView-& gt;項目!= -1)

{

DWORD dw pos = GetMessagePos();

CPoint(低字(dwPos),高字(dwPos));

CMenu菜單;

驗證(菜單。LoadMenu(IDR _ m ENU1));

CMenu* popup =菜單。get submenu(0);

斷言(彈出!= NULL);

彈出菜單-& gt;trackpoppupmenu(TPM _ left align | TPM _ right button,point.x,point.y,this);

}

* pResult = 0;

}

-

16.項目項目切換焦點(包括用鍵盤和鼠標切換項目時),有些項目會改變狀態序列。

在listctrl控件中添加LVN_ITEMCHANGED消息的相應函數。

void ctest 6 DLG::onitemchangedlist 1(nmh dr * pNMHDR,LRESULT* pResult)

{

NM _ LISTVIEW * pNMListView =(NM _ LISTVIEW *)pNMHDR;

// TODO:在此添加控件通知處理程序代碼

CString sTemp

if((pNMListView-& gt;uOldState & ampLVIS聚焦)= LVIS聚焦& amp& amp

(pNMListView-& gt;聯合國新聞狀態與報道。LVIS焦點)= 0)

{

sTemp。格式(“%d個丟失的焦點”,pNMListView-& gt;iItem);

}

else if((pNMListView-& gt;uOldState & ampLVIS聚焦)= 0 & amp& amp

(pNMListView-& gt;聯合國新聞狀態與報道。聚焦LVIS)=聚焦LVIS)

{

sTemp。格式(“%d獲得焦點”,pNMListView-& gt;iItem);

}

if((pNMListView-& gt;uOldState & ampLVIS選定的)= LVIS選定的& amp& amp

(pNMListView-& gt;聯合國新聞狀態與報道。LVIS _選定的)= 0)

{

sTemp。格式(“%d個丟失的選定項”,pNMListView-& gt;iItem);

}

else if((pNMListView-& gt;uOldState & ampLVIS選定的)= 0 & amp& amp

(pNMListView-& gt;聯合國新聞狀態與報道。LVIS選定的)= LVIS選定的)

{

sTemp。格式(“選擇了%d個“),pNMListView-& gt;iItem);

}

* pResult = 0;

}

-

17.listctrl的子項添加圖標

註意:在用SetItem設置其他項之前,先用InsertItem()插入壹行的第壹列。

m_list。SetExtendedStyle(LVS _ EX _ subiteimages);

m_userlist。SetItem(..);

-

18.在CListCtrl中顯示文件,並根據文件類型顯示圖標。

網上找到的代碼,自己試著修改的,分享壹下。

步驟1:將列表中的圖像列表設置為系統圖像列表。

BOOL setsystem imagelist(clist ctrl & amp;列表)

{

HIMAGELIST himlSmall

HIMAGELIST himlLarge

SHFILEINFO sfi

char csys dir【MAX _ PATH】;

CString strBuf

memset(csy sdir,0,MAX _ PATH);

getwindowsdirect(cSysDir,MAX _ PATH);

strBuf = cSysDir

// SHGetFileInfo:

//如果uFlags包含SHGFI_SYSICONINDEX,則返回值是

//包含大圖標圖像的圖像列表。

//如果SHGFI_SYSICONINDEX中包含SHGFI_SMALLICON,則返回值

//是包含小圖標圖像的圖像列表的句柄。

//

himlSmall =(hima gelist)SHGetFileInfo((LPCSTR)cSysDir,

0,

& ampsfi,

sizeof(SHFILEINFO),

SHGFI _ sysicon index | SHGFI _ small icon);

himallarge =(hima gelist)SHGetFileInfo((LPCSTR)cSysDir,

0,

& ampsfi,

sizeof(SHFILEINFO),

SHGFI _ sysicon index | SHGFI _ large icon);

if(himlSmall & amp;& amphimlLarge)

{

*發送消息(list.m_hWnd,LVM_SETIMAGELIST,

(WPARAM)LVSIL _ SMALL,(LPARAM)himlSmall);

*發送消息(list.m_hWnd,LVM_SETIMAGELIST,

(WPARAM)LVSIL _ NORMAL,(LPARAM)him llarge);

}

返回TRUE

}

第二步:將指定的文件添加到列表中,同時獲取文件的圖標索引,並將圖標添加到列表中。

int geticondex(LPCTSTR lpszPath,BOOL bIsDir,BOOL b selected);//轉發語句

void AddFiles(clist ctrl & amp;list,LPCTSTR lpszFileName,BOOL bAddToDocument)

{

int nIcon = geticondex(lpsz filename,FALSE,TRUE);

CString strSize

CFileFind文件查找;

//獲取文件大小

if(文件查找。find file(lpsz filename))

{

文件查找。FindNextFile();

strSize。格式(“%d”,文件查找。GetLength());

}

其他

strSize =“0“;

//拆分路徑和文件名

CString str filename = lpsz filename;

CString strPath

int nPos = strFileName。reverse find(‘\ \‘);

如果(nPos!= -1)

{

strPath = strFileName。左(NPO);

strFileName = strFileName。mid(NPO 1);

}

//插入列表

int nItem = list。GetItemCount();

//列表。insert item(nItem,strFileName,nIcon);

//列表。SetItemText(nItem,1,strSize);

//

//您可以根據實際需要在這裏修改代碼。

//

}

-

19.listctrl內容應該用大量數據更新以避免閃爍。

m_list。set redraw(FALSE);

//更新內容

m_list。set redraw(TRUE);

m_list。invalidate();

m_list。update window();

20.清除ListCtrl以重新初始化:

//刪除所有行

m_ctrllist。DeleteAllItems();

//刪除所有列

int iColCount = m_ctrllist。GetHeaderCtrl()-& gt;GetItemCount();

//方法1

//原理:刪除第壹列後,其他列向前移動。

while(m _ ctrl list。delete column(0));

//方法2

for(int I = 0;我& ltiColCount我)

{

m_ctrllist。刪除列(0);

}

//方法3

for(int I = icol count-1;我& gt= 0;我-)

{

m_ctrllist。刪除列(I);

}