MFCListBo控件用法介紹_第1頁
MFCListBo控件用法介紹_第2頁
MFCListBo控件用法介紹_第3頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、MFC CListCtrl 使用介紹列表控件可以看作是功能增強的ListBox,它提供了四種風格,而且可以同時顯示一列的多中屬性值。MFC中使用CListCtrl類來封裝列表控件的各種操作。通過調(diào)用?BOOL Create( DWORD dwStyle, const RECT & rect, CWnd* pPare ntWnd,UINT nID );創(chuàng)建一個窗口, dwStyle中可以使用以下一些列表控件的專用風格:? LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT 這四種風格決定控件的外觀,同時只可以選擇其中一種,分別對應:大圖標顯示,小圖 標顯

2、示,列表顯示,詳細報表顯示? LVS_EDITLABELS 結(jié)點的顯示字符可以被編輯,對于報表風格來講可編輯的只為第一列。?LVS_SHOWSELALWA YS在失去焦點時也顯示當前選中的結(jié)點? LVS_SINGLESEL 同時只能選中列表中一項首先你需要設置列表控件所使用的ImageList,如果你使用大圖標顯示風格,你就需要以如下形式調(diào)用:?CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);?如果使用其它三種風格顯示而不想顯示圖標你可以不進行任何設置,否則需要以如下形式調(diào)用:?CImageList* SetIma

3、geList( CImageList* pImageList, LVSIL_SMALL);通過調(diào)用 int InsertItem( int nItem, LPCTSTR lpszItem );可以在列表控件中nItem指明位置插入一項,lpszItem為顯示字符。除LVS_REPORT 風格外其他 先設置列表控件中的列信息。通過調(diào)用 int InsertColumn( int nCol, LPCTSTR IpszColumnHeading, intnFormat , int nWidth, int nSubltem);可以插入列。iCol為列的位置,從零幵始,lpszColumnHeading

4、 為顯示的列名,nFormat為顯示對齊方式,nWidth為顯示寬度,nSubItem為分配給該列的列索引。在有多列的列表控件中就需要為每一項指明其在每一列中的顯示字符,通過調(diào)用?BOOL SetItemText( int nItem, i nt nSubItem, LPTSTR lpszText );可以設置每列的顯示字符。nItem為設置的項的位置,nSubItem為列位置,lpszText為顯示 字符。下面的代碼演示了如何設置多列并插入數(shù)據(jù):m_list.SetlmageList(&mistSmall,LVSIL_SMALL);設置 ImageListm_list.I nsert

5、Colu mn (0,"Col 1",LVCFMT_LEFT,300,0);設置列m_list.I nsertColu mn (1,"Col 2",LVCFMT_LEFT,300,1);m_list.InsertColumn(2,"Col 3",LVCFMT_LEFT,300,2);m_list.I nsertItem(0,"Item 1_1"); 插入行m_list.SetltemText(0,1,"ltem 1_2");設置該行的不同列的顯示字符m_list.SetltemText(0,2,

6、"ltem 1_3");此外CListCtrl還提供了一些函數(shù)用于得到/修改控件的狀態(tài)。?COLORREF GetTextColor( )/BOOL SetTextColor( COLORREF cr ); 用于得到 / 設置顯示的字符顏色。?用于COLORREF GetTextBkColor( )/BOOL SetTextBkColor( COLORREF cr );得到/設置顯示的背景顏色。?void SetItemCo unt( int iCou nt ); 用于得到添加進列表中項的數(shù)量。?BOOL Deleteltem(i nt nltem); 用于刪除某一項,BO

7、OL DeleteAllltems();將刪除所有項。?BOOL SetBklmage(HBITMAP hbm, BOOL fTile , i nt xOffsetPerce nt, i nt yOffsetPercent);用于設置背景位圖。?CStri ng GetItemText( int nItem, i nt nSubItem );用于得到某項的顯示字符。列表控件的消息映射同樣使用ON_NOTIFY宏,形式如同:ON_NOTIFY( wNotifyCode, id, memberFxn ),wNotifyCode 為通知代碼,id 為產(chǎn)生該消息的窗口 ID,memberFxn為處理函

8、數(shù),函數(shù)的原型如同 voidOnXXXList(NMHDR* pNMHDR, LRESULT* pResult),其中 pNMHDR 為一數(shù)據(jù)結(jié)構(gòu),在具體使用時需要轉(zhuǎn)換成其他類型的結(jié)構(gòu)。對于列表控件可能取值和對應的數(shù)據(jù)結(jié)構(gòu)為:? LVN_BEGINLABELEDIT在幵始某項編輯字符時發(fā)送,所用結(jié)構(gòu):NMLVDISPINFO? LVN_ENDLABELEDIT 在結(jié)束某項編輯字符時發(fā)送,所用結(jié)構(gòu):NMLVDISPINFO? LVN_GETDISPINFO 在需要得到某項信息時發(fā)送,(如得到某項的顯示字符)所用結(jié)構(gòu):NMLVDISPINFO關于ON_NOTIFY有很多內(nèi)容,將在以后的內(nèi)容中進行詳

9、細講解。LPSTR_TEXTCALLBACK 。在控件顯示該結(jié)點時會通過發(fā)送TVN_GETDISPINFO 來取得所需要的字符,在處理該消息時先將參數(shù)pNMHDR 轉(zhuǎn)換為 LPNMLVDISPINFO,然后填充其中 item.pszText。通過 item中的iltem,iSubltem可以知道當前顯示的為那一項。下面的代碼演示了這種方法:char szOut83="No.1","No.2","No.3"添加結(jié)點m_list.I nsertltem(LPSTR_TEXTCALLBACK,.)m_list.I nsertltem(LPS

10、TR_TEXTCALLBACK,.)處理消息void CPare ntWnd:O nGetDispI nfoList(NMHDR* pNMHDR, LRESULT*pResult)LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;pLVDI->item.pszText二szOutpTVDI->item.iltem;通過 iltem 得到需要顯示的字符在數(shù)組中的位置*pResult = 0;關于編輯某項的顯示字符:(在報表風格中只對第一列有效)首先需要設置列表控件的LVS_EDITLABELS風格,在幵始編輯時該控件將會發(fā)送LVN_BEGINLABE

11、LEDIT ,你可以通過在處理函數(shù)中返回TRUE來取消接下來的編輯,在編輯完成后會發(fā)送 LVN_ENDLABELEDIT ,在處理該消息時需要將 參數(shù)pNMHDR轉(zhuǎn)換為LPNMLVDISPINFO,然后通過其中的item.pszText得到的代碼說明如何處理這些消息:/ 處理消息 LVN_BEGINLABELEDITvoid CPare ntWnd:O nBegi nEditList(NMHDR* pNMHDR, LRESULT* pResult)LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;if(pLVDI->item.iltem=O); 判斷是否

12、取消該操作*pResult = 1;else*pResult = 0;/ 處理消息 LVN_BEGINLABELEDITvoid CPare ntWnd:O nBegi nEditList(NMHDR* pNMHDR, LRESULT* pResult)LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;if(pLVDI->item.pszText=NULL); 判斷是否已經(jīng)取消取消編輯m_list.SetltemText(pLVDI->item.iltem,0,pLVDI->pszText);重置顯示字符*pResult = 0;上面講述的方

13、法所進行的消息映射必須在父窗口中進行(同樣 WM_NOTIFY的所有消息都需要在父窗口中處理)。如何得到當前選中項位置:在列表控件中沒有一個類似于ListBox中GetCurSel()的函數(shù),但是可以通過調(diào)用GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);得到選中項位置。下面是一些例子作者:lixiaosan?時間:04/06/2006以下未經(jīng)說明,listctrl默認view風格為report 相關類及處理函數(shù)MFC : CListCtrl 類SDK :以 “ ListView_開頭的一些宏。女口ListViewnsertColumn1. CListCt

14、rl 風格? LVS_ICON: 為每個item顯示大圖標?? LVS_SMALLICON: 為每個item顯示小圖標?? LVS_LIST: 顯示一列帶有小圖標的item? LVS_REPORT:顯示 item 詳細資料?直觀的理解:windows資源管理器, 查看”標簽下的 大圖標,小圖標, 列表,詳細資料”2. 設置listctrl風格及擴展風格? LONG lStyle;? lStyle. = GetWi ndowLo ng(mist.m_hWnd, GWL_ST YLE);/獲取當前窗口 style? lStyle. &二LVS_TYPEMASK; /清除顯示方式位?? IS

15、tyle.|= LVS_REPORT; / 設置 style? SetWindowLong(mst.m_hWnd, GWL_STYLE, lStyle);/設置 style? DWORD dwStyle. = mst.GetExte ndedStyle();? dwStyle.|= LVS_EX_FULLROWSELECT;選中某行使整行高亮(只適用與 report 風格的 listctrl)? dwStyle.|= LVS_EX_GRIDLINES;網(wǎng)格線(只適用與 report 風格的listctrl) ? dwStyle.|= LVS_EX_CHECKBOXES;/item 前生成 ch

16、eckbox 控件? m_list.SetExte ndedStyle(dwStyle); /設置擴展風格?注:listview 的 style 請查閱 msdn?/wceshellui5/html/wce50lrflistviewstyles.asp3. 插入數(shù)據(jù)? m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );/ 插入列? m_list.I nsertColu mn( 1, "NAME", LVCFMT_LEFT, 50 );? int nRow = mst.Insertltem(0,插入行” );/

17、? m_list.SetltemText( nRow, 1,“ ja 設置數(shù)據(jù)4. 一直選中item選中style中的Show selection always ,或者在上面第 2點中設置 LVS_SHOWSELALWA YS5. 選中和取消選中一行? int nln dex = 0;? /選中?? m_list.SetltemState( nln dex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);? /取消選中?? m_list.SetItemState( nln dex, 0, LVIS_SELECTED|LVIS_F

18、OCUSED);6. 得到listctrl中所有行的checkbox 的狀態(tài)? m_list.SetExte ndedStyle(LVS_EX_CHECKBOXES);? CStri ng str;? for(i nt i=0; i<m_list.GetItemCou nt(); i+)? ? if( m_list.GetItemState(i, LVIS_SELECTED)=LVIS_SELECTED | mst.GetCheck(i)? ? str.Format(_T(" 第%d 行的 checkbox 為選中狀態(tài)"),i);? AfxMessageBox(str

19、);? ? 7. 得到listctrl中所有選中行的序號?方法一:?? CStri ng str;? for(i nt i=0; i<m_list.GetltemCou nt(); i+)? ? if( m_list.GetltemState(i, LVIS_SELECTED)=LVIS_SELECTED )? str.Format(_T("選中了第 %d 行"),i);? AfxMessageBox(str);? ? ?方法二:?? POSITION pos = mst.GetFirstSelectedltemPositio n();? if (pos = NULL

20、)? TRACE0("No items were selected!n");? else? ? while (pos)? ? int nItem = m_list.GetNextSelectedltem(pos);? TRACE1("Item %d was selected!n", n Item);? / you could do your own process ing on nItem here? ? ? 8. 得到item的信息? TCHAR szBuf1024;? LVITEM lvi;? lvi.iItem = nItemI ndex;? Iv

21、i.iSubltem = 0;? lvi.mask = LVIF_TEXT;? lvi.pszText = szBuf;? Ivi.cchTextMax = 1024;? mst.GetItem(&l vi);?關于得到設置item的狀態(tài),還可以參考 msdn文章?? Q173242: Use Masks to Set/Get Item States in CListCtrl?9. 得到listctrl的所有列的header字符串內(nèi)容? LVCOLUMN Ivcol;? char str256;? int? nColNum;? CString strColumnName4;假如有 4

22、列? n ColNum = 0;? lvcol.mask = LVCF_TEXT;? lvcol.pszText = str;? Ivcol.cchTextMax = 256;? while(m_list.GetColu mn(n ColNum, & Ivcol)? ? strColu mnN ame nColNum = lvcol.pszText;? n ColNum+;? 10. 使listctrl中一項可見,即滾動滾動條? m_list.EnsureVisible(i, FALSE);11. 得到listctrl列數(shù)? int nHeadNum = m_list.GetHeade

23、rCtrl()->GetltemCou nt();12. 刪除所有列?方法一:?? while ( mst.DeleteColu mn (0)?因為你刪除了第一列后,后面的列會依次向上移動。?方法二:?? int n Colu mns = 4;? for (i nt i=n Colum ns-1; i>=0; i-)? m_list.DeleteColumn (i);13. 得到單擊的listctrl的行列號? 添加listctrl控件的NM_CLICK消息相應函數(shù)?? void CTest6Dlg:O nClickList1(NMHDR* pNMHDR, LRESULT* pRe

24、sult)? ? / 方法一:? /*? DWORD dwPos = GetMessagePos();? CPoi nt poi nt( LOWORD(dwPos), HIWORD(dwPos) );? mst.Scree nToClie nt(&poi nt);? LVHITTESTINFO Ivin fo;? Ivin fo.pt = poi nt;? Ivin fo.flags = LVHT_ABOVE;?int nItem = m_list.SubltemHitTest(&lvinfo);? if(nItem != -1)? ? CStri ng strtemp;? s

25、trtemp.Format(” 單擊的是第 %d 行第 %d 列",lvinfo.iltem,lvi nfo.iSubltem);? AfxMessageBox(strtemp);? ? */? / 方法二:? /*? NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;? if(pNMListView->iltem != -1)? ? CStri ng strtemp;? strtemp.Format("單擊的是第 %d 行第 %d 列",? pNMListView->iItem, pNMListView-

26、>iSubltem);? AfxMessageBox(strtemp);? ? */? *pResult = 0;? 14. 判斷是否點擊在 listctrl的checkbox 上? 添加listctrl控件的NM_CLICK消息相應函數(shù)?? void CTest6Dlg:O nClickList1(NMHDR* pNMHDR, LRESULT* pResult)? ? DWORD dwPos = GetMessagePos();? CPoi nt poi nt( LOWORD(dwPos), HIWORD(dwPos) );? mst.Scree nToClie nt(&poi

27、 nt);? LVHITTESTINFO Ivin fo;? Ivin fo.pt = poi nt;? Ivin fo.flags = LVHT_ABOVE;? UINT nFlag;? int nItem = m_list.HitTest(point, &nFlag);? /判斷是否點在checkbox上? if(n Flag = LVHT_ONITEMSTATEICON)? AfxMessageBox(" 點在 listctrl 的 checkbox 上");? ? *pResult = 0;? 15. 右鍵點擊listctrl的item 彈出菜單? 添加li

28、stctrl控件的NM_RCLICK 消息相應函數(shù)?? void CTest6Dlg:O nRclickList1(NMHDR* pNMHDR, LRESULT* pResult)? ? NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;? if(pNMListView->iltem != -1)? ? DWORD dwPos = GetMessagePos();? CPoi nt point( LOWORD(dwPos), HIWORD(dwPos) );? CMenu menu;? VERIF Y( menu .LoadMe nu( ID

29、R_MENU1 ) );? CMe nu* popup = men u.GetSubMe nu(O);? ASSERT( popup != NULL );? popup->TrackPopupMe nu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, poi nt.x, poi nt.y, this );? ? *pResult = 0;?16. item切換焦點時(包括用鍵盤和鼠標切換item時),狀態(tài)的一些變化順序? 添加listctrl控件的LVN_ITEMCHANGED 消息相應函數(shù)?? void CTest6Dlg:O nl temcha ngedList1(

30、NMHDR* pNMHDR, LRESULT* pResult)? ? NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;? / TODO: Add your control notification han dler code here? ? CStri ng sTemp;? if(pNMListView->uOldState & LVIS_FOCUSED)= LVIS_FOCUSED &&? (pNMListView->uNewState & LVIS_FOCUSED) = 0)? ? sTemp.F

31、ormat("%d losted focus",pNMListView->iltem);? ? else if(pNMListView->uOldState & LVIS_FOCUSED) = 0 &&? ? (pNMListView->uNewState & LVIS_FOCUSED)= LVIS_FOCUSED)? sTemp.Format("%d got focus",pNMListView->iltem);? ? if(pNMListView->uOldState & LVIS

32、_SELECTED)= LVIS_SELECTED &&? (pNMListView->uNewState & LVIS_SELECTED) = 0)? ? sTemp.Format("%d losted selected",pNMListView->iltem);? ? else if(pNMListView->uOldState & LVIS_SELECTED) = 0 &&? ? (pNMListView->uNewState & LVIS_SELECTED)= LVIS_SELECTED

33、)? ? sTemp.Format("%d got selected",pNMListView->iltem);? ? *pResult = 0;? 17. 得到另一個進程里的listctrl控件的item內(nèi)容18. 選中 listview 中的 itemQ131284: How To Select a Listview Item Programmatically?19. 如何在 CListView 中使用CListCtrl的派生類20. listctrl 的 subitem 添加圖標? m_list.SetExte ndedStyle(LVS_EX_SUBITEMI

34、MAGES);? m_list.Setltem(.); / 具體參數(shù)請參考 msdn?網(wǎng)上找到的代碼,share? BOOL CTest6Dlg:O nln itDialog()? ? CDialog:O nln itDialog();? HIMAGELIST himlSmall;? HIMAGELIST himlLarge;? SHFILEINFO sfi;? char cSysDirMAX_PATH;? CStri ng strBuf;? memset(cSysDir, 0, MAX_PATH);? GetWi ndowsDirectory(cSysDir, MAX_PATH);? str

35、Buf = cSysDir;? spri ntf(cSysDir, "%s", strBuf.Left(strBuf.Fi nd("")+1);? himlSmall = (HIMAGELIST)SHGetFileI nfo (LPCSTR)cSysDir,? &sfi,? sizeof(SHFILEINFO),? SHGFI_S YSICONINDEX | SHGFI_SMALLICON );? himlLarge = (HIMAGELIST)SHGetFileI nfo(LPCSTR)cSysDir,? &sfi,? siZeof(S

36、HFILEINFO),? SHGFI_S YSICONINDEX | SHGFI_LARGEICON);? if (himlSmall && himlLarge)? ? :Se ndMessage(mst.m_hWnd, LVM_SETIMAGELIST,? ? (WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);? :Se ndMessage(mst.m_hWnd, LVM_SETIMAGELIST,? ? (WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);?-? ? return TRUE; / return TR

37、UE unless you set the focus to a con trol? ? void CTest6Dlg:AddFiles(LPCTSTR lpszFileName, BOOL bAddToDocume nt)? ? int nlcon 二 GetIco nln dex (l pszFileName, FALSE, FALSE);? CStri ng strSize;? CFileFind filefind;? / get file size? if (fiiefind.FindFile(lpszFileName)? ? filefi nd.Fi ndNextFile();? s

38、trSize.Format("%d", filefind.GetLength();? ? else? strSize = "0"? / split path and file name? CStri ng strFileName = lpszFileName;? CString strPath;? int n Pos = strFileName.ReverseFi nd('');? if (n Pos != -1)? ? strPath = strFileName.Left (n Pos);? strFileName = strFileN

39、ame.Mid( nPos + 1);? ? / i nsert to list? int nItem = m_list.GetltemCou nt();? m_list.I nsertltem( nltem, strFileName, nIc on);? m_list.SetltemText(nItem, 1, strSize);? m_list.SetltemText(nItem, 2, strFileName.Right(3);? m_list.SetItemText( nltem, 3, strPath);? ? int CTest6Dlg:Getlco nln dex(LPCTSTR

40、 lpszPath, BOOL blsDir, BOOL bSelected)? ? SHFILEINFO sfi;? memset(&sfi, 0, sizeof(sfi);? if (blsDir)? ? SHGetFile In fo(lpszPath,? FILE_ATTRIBUTE_DIRECTOR Y,? &sfi,? sizeof(sfi),? SHGFI_SMALLICON |SHGFI_S YSICONINDEX |? SHGFI_USEFILEATTRIBUTES |(bSelected ?SHGFI_OPENICON : 0);? return sfi.i

41、lco n;? ? else? ? SHGetFile Info (lpszPath,? FILE_ATTRIBUTE_NORMAL,? &sfi,? sizeof(sfi),? SHGFI_SMALLICON |SHGFI_S YSICONINDEX |? SHGFI_USEFILEATTRIBUTES | (bSelected SHGFI_OPENICON : 0);? return? sfi.iIcon;? ? retur n -1;? 轉(zhuǎn)自:VC CListCtrl的使用完全指南2008-04-12 14:46創(chuàng)建圖形列表并和 CListCtrl關聯(lián):?mm age_list.

42、Create(IDB_CALLER2, 16, 10, RGB(192,192, 192);?mm age_list.SetBkColor( GetSysColor( COLOR_WINDOW ) );? m_caller_list.SetlmageList( &mm age_list, LVSIL_SMALL);為報表添加4列:?? char *szColumn="昵稱","IP 地址","登陸時間","狀態(tài)"? int widths=100,98,70,55;? LV_COLUMN lvc;? Ivc.

43、mask二LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;? Ivc.fmt二LVCFMT_LEFT;? for(int i=0;i<4;i+) / 插入各列? Ivc.pszText二szColu mn i;? lvc.cx=widthsi;? Ivc.iSubltem二i;?m_caller_list .In sertColu mn (i,&lvc);? 為報表添加兩項,以附加方式添加:?char* data4;?data0="所有人"?data3="在線"?data2二new char;?CTim

44、e now二CTime:GetCurre ntTime();? CStri ng temp = now.Format("%H:%M:%S");? data2=temp.GetBuffer(1);?LV_ITEM lvi;?Ivi.mask二LVIF_TEXT|LVIFM AGE|LVIF_PARAM;?lvi.iSubltem=O;?lvi.pszText=(char *)data0;?lvi.iImage = 0;?lvi.iItem=0;?m_caller_list.I nsertItem (&lvi);?for (i nt j=0;j<4;j+) m_c

45、aller_list.SetltemText(co un t,j,dataj);?coun t+;?lvi.iImage = 1;?lvi.iItem=co un t;?m_caller_list.I nsertItem (&lvi);?data0="cherami"?for (int n=0;n<4;n+) m_caller_list.SetltemText(count,n,datan);?coun t+;設置報表的樣式?選中一整行:?m_l ist_ctrl.SetExte ndedStyle( m_l ist_ctrl.GetExte ndedStyle

46、()|LVS_EX_FULLR OWSELECT);?繪制表格:?m_l ist_ctrl.SetExte ndedStyle( m_l ist_ctrl.GetExte ndedStyle()|LVS_EX_GRIDL INES);?帶復選框:?m_l ist_ctrl.SetExte ndedStyle(m _list_ctrl.GetExte ndedStyle()|LVS_EX_CHEC KBOXES);?自動切換:?m_l ist_ctrl.SetExte ndedStyle(m _list_ctrl.GetExte ndedStyle()|LVS_EX_TRAC KSELECT);

47、選定一行:? 設置 CListCtrl 的 Show selection always 選項 SetltemState (il ndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED)?選中一個或多個項目時,會發(fā)送LVN_ITEMCHANGED 消息,可以使用?GetSelectedCount()方法得到被選定的項的數(shù)目。點擊列頭的消息響應:?ON_NOTIF Y(HDN_ITEMCLICKW, 0, Resp on seFu nc)?消息,需要自己添加?或者:?ON_NOTIFY(LVN_COLUMNCLICK, ID_you

48、rCtrl, ResponseFunc)向?qū)砑?前者后響應,后者先響應響應函數(shù):?Respo nseFu nc(NMHDR *pNMHDR, LRESULT *pResult)雙擊CListCtrl中的ITEM的消息是及消息函數(shù):?ON_NOTIF Y(NM_DBLCLK, ID_yourCtrl, Respo nseFu nc)單擊ITEM的消息響應:?ON_NOTIF Y(NM_CLICK, ID_yourCtrl, Resp on seFu nc)?Resp on seFu nc(NMHDR *pNMHDR, LRESULT *pResult)HDN_ITEMCLICK? 就是 Hea

49、der control Notify message for mouse left clickon the Header con trol!?而 HDN_ITEMCLICK 是當 List View 中存在一個 Header Contrl 時,Header Ctrl通知父窗口 List View 的!CListCtrl 中的 Item 被選中觸發(fā) LBN_SELCHANGE(通過 WM_COMMAND)消息!刪除CListCtrl中選定的項:?POSITION pos;?int nln dex;for(; pos= GetFirstSelectedItemPositio n();)?nIn dex = GetNextSelectedltem(pos);?Deleteltem( nln dex);?在ListCtrl中進行排序?列表控件(CListCtrl )的頂部有一排按鈕,用戶可以通過選擇不同的列來對記錄 進行排序。但是 CListCtrl并沒有自動排序的功能,我們需要自己添加一個用于 排序的回調(diào)函數(shù)來比較兩個數(shù)據(jù)的大小,此外還需要響應排序按鈕被點擊的消 息。下面講述一下具體的做法。CListCtrl提供了用于排序的函數(shù),函數(shù)原型為:BOOLCListCtrl:Sortltems( PFNLVCOMPARE pfn

溫馨提示

  • 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

提交評論