CListCtrl使用技巧大全_第1頁
CListCtrl使用技巧大全_第2頁
CListCtrl使用技巧大全_第3頁
CListCtrl使用技巧大全_第4頁
CListCtrl使用技巧大全_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學習與交流CListCtrl使用技巧大全.精品文檔.CListCtrl使用技巧 1. CListCtrl 風格22. 設置listctrl 風格及擴展風格23. 插入數(shù)據(jù)34. 一直選中item35. 選中和取消選中一行36. 得到listctrl中所有行的checkbox的狀態(tài)37. 得到listctrl中所有選中行的序號48. 得到item的信息49. 得到listctrl的所有列的header字符串內(nèi)容510. 使listctrl中一項可見,即滾動滾動條511. 得到listctrl列數(shù)612. 刪除所有列613. 得到單擊的listctrl的行

2、列號614. 判斷是否點擊在listctrl的checkbox上715. 右鍵點擊listctrl的item彈出菜單816. item切換焦點時(包括用鍵盤和鼠標切換item時),狀態(tài)的一些變化順序817. 得到另一個進程里的listctrl控件的item內(nèi)容918. 選中l(wèi)istview中的item1019. 如何在CListView中使用CListCtrl的派生類1020. listctrl的subitem添加圖標1021. 在CListCtrl顯示文件,并根據(jù)文件類型來顯示圖標1022. listctrl內(nèi)容進行大數(shù)據(jù)量更新時,避免閃爍1323. listctrl排序1324. 在lis

3、tctrl中選中某個item時動態(tài)改變其icon或bitmap1425. 在添加item后,再InsertColumn()后導致整列數(shù)據(jù)移動的問題1426. 關(guān)于listctrl第一列始終居左的問題1427. 鎖定column header的拖動1428. 如何隱藏clistctrl的列1529. listctrl進行大數(shù)據(jù)量操作時,使用virtual list1530. 關(guān)于item只能顯示259個字符的問題1531. 響應在listctrl的column header上的鼠標右鍵單擊1532. 類似于windows資源管理器的listview1633. 在ListCtrl中OnTimer只

4、響應兩次的問題1634. 以下為一些為實現(xiàn)各種自定義功能的listctrl派生類16以下未經(jīng)說明,listctrl默認view 風格為report1. CListCtrl 風格 LVS_ICON: 為每個item顯示大圖標 LVS_SMALLICON: 為每個item顯示小圖標 LVS_LIST: 顯示一列帶有小圖標的item LVS_REPORT: 顯示item詳細資料 直觀的理解:windows資源管理器,“查看”標簽下的“大圖標,小圖標,列表,詳細資料”2. 設置listctrl 風格及擴展風格 LONG lStyle; lStyle = GetWindowLong(m_list.m_h

5、Wnd, GWL_STYLE);/獲取當前窗口style lStyle &= LVS_TYPEMASK; /清除顯示方式位 lStyle |= LVS_REPORT; /設置style SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);/設置style DWORD dwStyle = m_list.GetExtendedStyle(); dwStyle |= LVS_EX_FULLROWSELECT;/選中某行使整行高亮(只適用與report風格的listctrl) dwStyle |= LVS_EX_GRIDLINES;/網(wǎng)格線(只適用與repo

6、rt風格的listctrl) dwStyle |= LVS_EX_CHECKBOXES;/item前生成checkbox控件 m_list.SetExtendedStyle(dwStyle); /設置擴展風格 注:listview的style請查閱msdn 3. 插入數(shù)據(jù) m_list.InsertColumn( 0, ID, LVCFMT_LEFT, 40 );/插入列 m_list.InsertColumn( 1, NAME, LVCFMT_LEFT, 50 ); int nRow = m_list.InsertItem(0, “11”);/插入行 m_list.SetItemText(n

7、Row, 1, “jacky”);/設置數(shù)據(jù)4. 一直選中item 選中style中的Show selection always,或者在上面第2點中設置LVS_SHOWSELALWAYS5. 選中和取消選中一行 int nIndex = 0; /選中 m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED); /取消選中 m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);6. 得到listctrl中所有行的checkb

8、ox的狀態(tài) m_list.SetExtendedStyle(LVS_EX_CHECKBOXES); CString str; for(int i=0; im_list.GetItemCount(); i+) if( m_list.GetItemState(i, LVIS_SELECTED) = LVIS_SELECTED | m_list.GetCheck(i) str.Format(_T(第%d行的checkbox為選中狀態(tài)), i); AfxMessageBox(str); 7. 得到listctrl中所有選中行的序號 方法一: CString str; for(int i=0; iGet

9、ItemCount();12. 刪除所有列 方法一: while ( m_list.DeleteColumn (0) 因為你刪除了第一列后,后面的列會依次向上移動。 方法二: int nColumns = 4; for (int i=nColumns-1; i=0; i) m_list.DeleteColumn (i);13. 得到單擊的listctrl的行列號 添加listctrl控件的NM_CLICK消息相應函數(shù) void CTest6Dlg:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) / 方法一: /* DWORD dwPos = GetM

10、essagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); m_list.ScreenToClient(&point); LVHITTESTINFO lvinfo; lvinfo.pt = point; lvinfo.flags = LVHT_ABOVE; int nItem = m_list.SubItemHitTest(&lvinfo); if(nItem != -1) CString strtemp; strtemp.Format(單擊的是第%d行第%d列, lvinfo.iItem, lvinfo.iSubItem); AfxM

11、essageBox(strtemp); */ / 方法二: /* NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView-iItem != -1) CString strtemp; strtemp.Format(單擊的是第%d行第%d列, pNMListView-iItem, pNMListView-iSubItem); AfxMessageBox(strtemp); */ *pResult = 0; 14. 判斷是否點擊在listctrl的checkbox上 添加listctrl控件的NM_CLICK消息相應函數(shù) voi

12、d CTest6Dlg:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) DWORD dwPos = GetMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); m_list.ScreenToClient(&point); LVHITTESTINFO lvinfo; lvinfo.pt = point; lvinfo.flags = LVHT_ABOVE; UINT nFlag; int nItem = m_list.HitTest(point, &nFlag); /判斷是否點在chec

13、kbox上 if(nFlag = LVHT_ONITEMSTATEICON) AfxMessageBox(點在listctrl的checkbox上); *pResult = 0; 15. 右鍵點擊listctrl的item彈出菜單 添加listctrl控件的NM_RCLICK消息相應函數(shù) void CTest6Dlg:OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView-iItem != -1) DWORD dwPos = Ge

14、tMessagePos(); CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); CMenu menu; VERIFY( menu.LoadMenu( IDR_MENU1 ) ); CMenu* popup = menu.GetSubMenu(0); ASSERT( popup != NULL ); popup-TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this ); *pResult = 0; 16. item切換焦點時(包括用鍵盤和鼠標切換item時),狀態(tài)的一

15、些變化順序 添加listctrl控件的LVN_ITEMCHANGED消息相應函數(shù) void CTest6Dlg:OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; / TODO: Add your control notification handler code here CString sTemp; if(pNMListView-uOldState & LVIS_FOCUSED) = LVIS_FOCUSED & (pNMListView-u

16、NewState & LVIS_FOCUSED) = 0) sTemp.Format(%d losted focus,pNMListView-iItem); else if(pNMListView-uOldState & LVIS_FOCUSED) = 0 & (pNMListView-uNewState & LVIS_FOCUSED) = LVIS_FOCUSED) sTemp.Format(%d got focus,pNMListView-iItem); if(pNMListView-uOldState & LVIS_SELECTED) = LVIS_SELECTED & (pNMList

17、View-uNewState & LVIS_SELECTED) = 0) sTemp.Format(%d losted selected,pNMListView-iItem); else if(pNMListView-uOldState & LVIS_SELECTED) = 0 & (pNMListView-uNewState & LVIS_SELECTED) = LVIS_SELECTED) sTemp.Format(%d got selected,pNMListView-iItem); *pResult = 0; 17. 得到另一個進程里的listctrl控件的item內(nèi)容18. 選中l(wèi)i

18、stview中的item Q131284: How To Select a Listview Item Programmatically19. 如何在CListView中使用CListCtrl的派生類20. listctrl的subitem添加圖標 m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES); m_list.SetItem(.); /具體參數(shù)請參考msdn21. 在CListCtrl顯示文件,并根據(jù)文件類型來顯示圖標 網(wǎng)上找到的代碼,share BOOL CTest6Dlg:OnInitDialog() CDialog:OnInitDialog(

19、); HIMAGELIST himlSmall; HIMAGELIST himlLarge; SHFILEINFO sfi; char cSysDirMAX_PATH; CString strBuf; memset(cSysDir, 0, MAX_PATH); GetWindowsDirectory(cSysDir, MAX_PATH); strBuf = cSysDir; sprintf(cSysDir, %s, strBuf.Left(strBuf.Find()+1); himlSmall = (HIMAGELIST)SHGetFileInfo (LPCSTR)cSysDir, 0, &s

20、fi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON ); himlLarge = (HIMAGELIST)SHGetFileInfo(LPCSTR)cSysDir, 0, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON); if (himlSmall & himlLarge) :SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST, (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);

21、:SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST, (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge); return TRUE; / return TRUE unless you set the focus to a control void CTest6Dlg:AddFiles(LPCTSTR lpszFileName, BOOL bAddToDocument) int nIcon = GetIconIndex(lpszFileName, FALSE, FALSE); CString strSize; CFileFind

22、 filefind; / get file size if (filefind.FindFile(lpszFileName) filefind.FindNextFile(); strSize.Format(%d, filefind.GetLength(); else strSize = 0; / split path and filename CString strFileName = lpszFileName; CString strPath; int nPos = strFileName.ReverseFind(); if (nPos != -1) strPath = strFileNam

23、e.Left(nPos); strFileName = strFileName.Mid(nPos + 1); / insert to list int nItem = m_list.GetItemCount(); m_list.InsertItem(nItem, strFileName, nIcon); m_list.SetItemText(nItem, 1, strSize); m_list.SetItemText(nItem, 2, strFileName.Right(3); m_list.SetItemText(nItem, 3, strPath); int CTest6Dlg:GetI

24、conIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected) SHFILEINFO sfi; memset(&sfi, 0, sizeof(sfi); if (bIsDir) SHGetFileInfo(lpszPath, FILE_ATTRIBUTE_DIRECTORY, &sfi, sizeof(sfi), SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES |(bSelected ? SHGFI_OPENICON : 0); return sfi.iIcon; el

25、se SHGetFileInfo (lpszPath, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_SMALLICON | SHGFI_SYSICONINDEX | SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0); return sfi.iIcon; return -1; 22. listctrl內(nèi)容進行大數(shù)據(jù)量更新時,避免閃爍 m_list.SetRedraw(FALSE); /更新內(nèi)容 m_list.SetRedraw(TRUE); m_list.Invalidate(

26、); m_list.UpdateWindow(); 或者參考 23. listctrl排序 Q250614:How To Sort Items in a CListCtrl in Report View24. 在listctrl中選中某個item時動態(tài)改變其icon或bitmapQ141834: How to change the icon or the bitmap of a CListCtrl item in Visual C+25. 在添加item后,再InsertColumn()后導致整列數(shù)據(jù)移動的問題Q151897: CListCtrl:InsertColumn() Causes Column Data to Shift 26. 關(guān)于listctrl第一列始終居左的問題解決辦法:把第一列當一個虛列,從第二列開始插入列及數(shù)據(jù),最后刪除第一列。 具體解釋參閱 27. 鎖定column header的拖動28. 如何隱藏clistctrl的列 把需隱藏的列的寬度設為0,然后檢測當該列為隱藏列時,用上面第27點的鎖定column 的拖動來實現(xiàn)29. listctrl進

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論