1、CListCtrl控件本人初次用CListCtrl控件的时候,对于 InsertItem和SetrtItemtext两个函数的作用始终不是太懂,比如如果不先调用InsertItem这个函数,后面的InsertItemtext函数写了,也不起作用.查了MSDN,也没有收获,经过有人点拔,才恍然大悟.今天将经验说一下,希望有共同爱好者少走弯路. InsertItem在MSDN中的函数原型如下 int InsertItem( const LVITEM* pItem ); int InsertItem( int nItem, LPCTSTR lpszItem ); int InsertItem( in
2、t nItem, LPCTSTR lpszItem, int nImage ); int InsertItem( UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam ); 一般我们用的比较多的时第2种和第三种,其中第三种时建立一个带有头标的项 要调用第三个,可以先声明一个CImageList对象m_ImageList.Create(16,16,true,2,2);m_ImageList.Add(theApp.LoadIcon(IDR_MAINFRAME)
3、;m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);这样,控件中的每一行的开头就有一个应用程序图标 现在转入正题,先介绍一下INSERTITEM个个参数的意义 nItem: 控件中行的索引 lpszItem : 控件头的名字 . SettItemtext函数的原型 BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText ); *注意这个函数中的参数nItem就是INSERTITEM中的NITEM, 也就是说InsertItem是向控件声请一行来放数据,记住只是声请,那么方数据的工作就
4、又SETITEMTEXT来实现 举例如下: CListCtrl m_listctrl; m_listctrl = new ClistCtrl(); m_listctrl.Creae(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS ,bigRect,this,IDC_LIST1 ); m_listctrl.InsertItem(0,01); m_SetItemtext(0,1,1); m_SetItemtext(0,2,2); 至于要添多少多少个数据,就由你的控件由多少列了 获得可以这样的道 int columns= m_listc
5、tr.GetHeaderCtrl()-GetItemCount(); 获得可以这样的道 int rows= m_listctrl.GetItemCount(); 下面附一个本人学习的实例/ DataView.cpp : implementation of the CDataView class/#include stdafx.h#include Data.h#include DataDoc.h#include DataView.h#include EditDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THI
6、S_FILE = _FILE_;#endif/ CDataViewIMPLEMENT_DYNCREATE(CDataView, CView)BEGIN_MESSAGE_MAP(CDataView, CView)/AFX_MSG_MAP(CDataView)ON_COMMAND(IDM_USER, OnUser)ON_COMMAND(IDM_UP, OnUp)ON_COMMAND(IDM_DOWN, OnDown)ON_COMMAND(IDM_EDIT, OnEdit)ON_COMMAND(IDM_ADD, OnAdd)ON_COMMAND(IDM_DELETE, OnDelete)ON_COM
7、MAND(IDM_SAVE, OnSave)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1)ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclk
8、List1)ON_NOTIFY(NM_KILLFOCUS, IDC_LIST1, OnKillfocusList1)END_MESSAGE_MAP()/ CDataView construction/destructionCDataView:CDataView()/ TODO: add construction code here m_nIndex = -1;CDataView:CDataView()BOOL CDataView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by
9、modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CDataView drawingvoid CDataView:OnDraw(CDC* pDC)CDataDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here/ CDataView printingBOOL CDataView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationret
10、urn DoPreparePrinting(pInfo);void CDataView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CDataView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CDataView diagnostics#ifdef _DEBUGvoid CDataView:Assert
11、Valid() constCView:AssertValid();void CDataView:Dump(CDumpContext& dc) constCView:Dump(dc);CDataDoc* CDataView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CDataDoc);return (CDataDoc*)m_pDocument;#endif /_DEBUG/ CDataView message handlersvoid CDataView:OnIniti
12、alUpdate() CView:OnInitialUpdate();/ TODO: Add your specialized code here and/or call the base class CDC *dc = GetDC();CRect rect;this-GetClientRect(&rect); CString str = 加载数据库资源到列表中;CSize sz = dc-GetTextExtent(str);rect.right = sz.cx;rect.bottom = sz.cy;CStatic *state = new CStatic;state-Create(str
13、,WS_CHILD,rect,this); state-ShowWindow(SW_SHOW); this-ReleaseDC(dc);InitListCtrl(rect);m_ImageList.Create(16,16,true,2,2);m_ImageList.Add(theApp.LoadIcon(IDR_MAINFRAME);void CDataView:InitListCtrl(CRect rect)CRect bigRect;this-GetClientRect(&bigRect);bigRect.top = rect.bottom;m_ListCtrl.Create(WS_CH
14、ILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS ,bigRect,this,IDC_LIST1);/m_ListCtrl.Insert(0,用户名);/m_ListCtrl.InsertItem(1,密码);CFont *m_pFont = new CFont();m_pFont-CreateFont(20, / nHeight 0, / nWidth 0, / nEscapement 0, / nOrientation FW_NORMAL, / nWeight FALSE, / bItalic FALSE, / bUnderline 0,
15、 / cStrikeOut DEFAULT_CHARSET, / nCharSet OUT_DEFAULT_PRECIS, / nOutPrecision CLIP_DEFAULT_PRECIS, / nClipPrecision DEFAULT_QUALITY, / nQuality DEFAULT_PITCH | FF_SWISS, / nPitchAndFamily Arial); m_ListCtrl.SetFont(m_pFont); m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);m_ListCtrl.SetExtendedSty
16、le(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);m_ListCtrl.SetBkColor(RGB(247,247,255); m_ListCtrl.SetTextColor(RGB(0,0,255); m_ListCtrl.SetTextBkColor(RGB(247,247,255);m_ListCtrl.InsertColumn(0,ID,LVCFMT_LEFT,100,-1);m_ListCtrl.InsertColumn(1,用户名,LVCFMT_LEFT,100,-1);m_ListCtrl.InsertColumn(2,密码,LVCFMT_LE
17、FT,200,-1);m_ListCtrl.InsertItem(0,01);m_ListCtrl.SetItemText(0,1,chetnao);m_ListCtrl.SetItemText(0,2,921984); m_ListCtrl.InsertItem(1,02);m_ListCtrl.SetItemText(1,1,mada);m_ListCtrl.SetItemText(1,2,345678);m_ListCtrl.InsertItem(2,03);m_ListCtrl.SetItemText(2,1,luoxian);m_ListCtrl.SetItemText(2,2,98
18、7654);extern CDataApp theApp;void CDataView:OnUser() / TODO: Add your command handler code here _RecordsetPtr m_pRecordset;try m_pRecordset = theApp.m_pConnection-Execute(select * from user12,NULL,adCmdText);catch(_com_error e) AfxMessageBox(e.ErrorMessage(); AfxMessageBox(e.Description(); CString s
19、tr; str.Format(%ld,e.Error); AfxMessageBox(str); return;if(m_pRecordset-BOF) MessageBox(表中无记录); return;else int len = m_ListCtrl.GetHeaderCtrl()-GetItemCount(); while(!m_pRecordset-adoEOF) m_ListCtrl.InsertItem(2,(_bstr_t)m_pRecordset-GetCollect(ID); m_ListCtrl.InsertItem(1,(_bstr_t)m_pRecordset-Get
20、Collect(username); m_ListCtrl.InsertItem(0,(_bstr_t)m_pRecordset-GetCollect(password); /*for(int i=0;iGetCollect(ID); m_ListCtrl.SetItemText(i,1,(_bstr_t)m_pRecordset-GetCollect(username); m_ListCtrl.SetItemText(i,2,(_bstr_t)m_pRecordset-GetCollect(password); */ m_pRecordset-MoveNext(); void CDataVi
21、ew:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition(); m_nIndex = m_ListCtrl.GetNextSelectedItem(pos);void CDataView:OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition(); m_nIndex = m_ListCtrl.GetNe
22、xtSelectedItem(pos); CEditDlg dlg;dlg.m_strNo = m_ListCtrl.GetItemText(m_nIndex,0);dlg.m_strName = m_ListCtrl.GetItemText(m_nIndex,1);dlg.m_strPassword = m_ListCtrl.GetItemText(m_nIndex,2); if(IDOK = dlg.DoModal() m_ListCtrl.SetItemText(m_nIndex,0,dlg.m_strNo); m_ListCtrl.SetItemText(m_nIndex,1,dlg.
23、m_strName); m_ListCtrl.SetItemText(m_nIndex,2,dlg.m_strPassword);*pResult = 0;void CDataView:OnUp() / TODO: Add your command handler code here m_ListCtrl.SetFocus();if(m_nIndex = -1) MessageBox(请选择一行!); return ;if(m_nIndex = 0) MessageBox(你选中的行已经时顶行!); return ;CString strNo,strName,strPassword;strNo
24、 = m_ListCtrl.GetItemText(m_nIndex,0);strName = m_ListCtrl.GetItemText(m_nIndex,1);strPassword = m_ListCtrl.GetItemText(m_nIndex,2);m_ListCtrl.DeleteItem(m_nIndex);m_ListCtrl.InsertItem(m_nIndex-1,strNo);m_ListCtrl.SetItemText(m_nIndex-1,1,strName); m_ListCtrl.SetItemText(m_nIndex-1,2,strPassword);
25、m_nIndex-;m_ListCtrl.SetItemState(m_nIndex,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED);void CDataView:OnKillfocusList1(NMHDR* pNMHDR, LRESULT* pResult)m_nIndex = -1;void CDataView:OnDown() / TODO: Add your command handler code herem_ListCtrl.SetFocus(); if(m_nIndex = -1) MessageBox(请选择一行!); return ;if(m_nIndex = m_ListCtrl.GetItemCount()-1) MessageBox(已经时最后一行!); return ;CString strNo,strName,strPassword;strNo = m_ListCtrl.GetItemText(m_nIndex,0);strName = m_ListCtrl.GetItemText(m_nIndex,1);strPassword = m_ListCtrl.GetItemText(m_nIndex,2);m_ListCtrl.DeleteItem(m_nI
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1