CListCtrl控件.docx
《CListCtrl控件.docx》由会员分享,可在线阅读,更多相关《CListCtrl控件.docx(10页珍藏版)》请在冰豆网上搜索。
![CListCtrl控件.docx](https://file1.bdocx.com/fileroot1/2022-11/24/95f04dcf-adc8-4aec-a1d0-eb3058654281/95f04dcf-adc8-4aec-a1d0-eb30586542811.gif)
CListCtrl控件
本人初次用CListCtrl控件的时候,对于InsertItem和SetrtItemtext两个函数的作用始终不是太懂,比如如果不先调用InsertItem这个函数,后面的InsertItemtext函数写了,也不起作用.查了MSDN,也没有收获,经过有人点拔,才恍然大悟.今天将经验说一下,希望有共同爱好者少走弯路.
InsertItem在MSDN中的函数原型如下
intInsertItem(constLVITEM*pItem);
intInsertItem(intnItem,LPCTSTRlpszItem);
intInsertItem(intnItem,LPCTSTRlpszItem,intnImage);
intInsertItem(UINTnMask,intnItem,LPCTSTRlpszItem,UINTnState,UINTnStateMask,intnImage,LPARAMlParam);
一般我们用的比较多的时第2种和第三种,其中第三种时建立一个带有头标的项
要调用第三个,可以先声明一个CImageList对象
m_ImageList.Create(16,16,true,2,2);
m_ImageList.Add(theApp.LoadIcon(IDR_MAINFRAME));
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
这样,控件中的每一行的开头就有一个应用程序图标
现在转入正题,先介绍一下INSERTITEM个个参数的意义
nItem:
控件中行的索引
lpszItem:
控件头的名字
.........................................................................................................................................................................................................
SettItemtext函数的原型
BOOLSetItemText(intnItem,intnSubItem,LPTSTRlpszText);
******************注意这个函数中的参数nItem就是INSERTITEM中的NITEM,
也就是说InsertItem是向控件声请一行来放数据,记住只是声请,那么方数据的工作就又SETITEMTEXT来实现
举例如下:
CListCtrlm_listctrl;
m_listctrl=newClistCtrl();
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");
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
至于要添多少多少个数据,就由你的控件由多少列了
获得可以这样的道intcolumns=m_listctr.GetHeaderCtrl()->GetItemCount();
获得可以这样的道int rows=m_listctrl.GetItemCount();
下面附一个本人学习的实例
//DataView.cpp:
implementationoftheCDataViewclass
//
#include"stdafx.h"
#include"Data.h"
#include"DataDoc.h"
#include"DataView.h"
#include"EditDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CDataView
IMPLEMENT_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_COMMAND(IDM_SAVE,OnSave)
//}}AFX_MSG_MAP
//Standardprintingcommands
ON_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,OnDblclkList1)
ON_NOTIFY(NM_KILLFOCUS,IDC_LIST1,OnKillfocusList1)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CDataViewconstruction/destruction
CDataView:
:
CDataView()
{
//TODO:
addconstructioncodehere
m_nIndex=-1;
}
CDataView:
:
~CDataView()
{
}
BOOLCDataView:
:
PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnCView:
:
PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
//CDataViewdrawing
voidCDataView:
:
OnDraw(CDC*pDC)
{
CDataDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
}
/////////////////////////////////////////////////////////////////////////////
//CDataViewprinting
BOOLCDataView:
:
OnPreparePrinting(CPrintInfo*pInfo)
{
//defaultpreparation
returnDoPreparePrinting(pInfo);
}
voidCDataView:
:
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addextrainitializationbeforeprinting
}
voidCDataView:
:
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addcleanupafterprinting
}
/////////////////////////////////////////////////////////////////////////////
//CDataViewdiagnostics
#ifdef_DEBUG
voidCDataView:
:
AssertValid()const
{
CView:
:
AssertValid();
}
voidCDataView:
:
Dump(CDumpContext&dc)const
{
CView:
:
Dump(dc);
}
CDataDoc*CDataView:
:
GetDocument()//non-debugversionisinline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDataDoc)));
return(CDataDoc*)m_pDocument;
}
#endif//_DEBUG
/////////////////////////////////////////////////////////////////////////////
//CDataViewmessagehandlers
voidCDataView:
:
OnInitialUpdate()
{
CView:
:
OnInitialUpdate();
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
CDC*dc=GetDC();
CRectrect;
this->GetClientRect(&rect);
CStringstr="加载数据库资源到列表中";
CSizesz=dc->GetTextExtent(str);
rect.right=sz.cx;
rect.bottom=sz.cy;
CStatic*state=newCStatic;
state->Create(str,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));
}
voidCDataView:
:
InitListCtrl(CRectrect)
{
CRectbigRect;
this->GetClientRect(&bigRect);
bigRect.top=rect.bottom;
m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS
,bigRect,this,IDC_LIST1);
//m_ListCtrl.Insert(0,"用户名");
//m_ListCtrl.InsertItem(1,"密码");
CFont*m_pFont=newCFont();
m_pFont->CreateFont(20, //nHeight
0, //nWidth
0, //nEscapement
0, //nOrientation
FW_NORMAL, //nWeight
FALSE, //bItalic
FALSE, //bUnderline
0, //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.SetExtendedStyle(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_LEFT,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,"987654");
}
externCDataApptheApp;
voidCDataView:
:
OnUser()
{
//TODO:
Addyourcommandhandlercodehere
_RecordsetPtrm_pRecordset;
try
{
m_pRecordset=theApp.m_pConnection->Execute("select*fromuser12",NULL,adCmdText);
}
catch(_com_errore)
{
AfxMessageBox(e.ErrorMessage());
AfxMessageBox(e.Description());
CStringstr;
str.Format("%ld",e.Error);
AfxMessageBox(str);
return;
}
if(m_pRecordset->BOF)
{
MessageBox("表中无记录");
return;
}
else
{
intlen=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->GetCollect("username"));
m_ListCtrl.InsertItem(0,(_bstr_t)m_pRecordset->GetCollect("password"));
/*for(inti=0;i {
m_ListCtrl.SetItemText(i,0,(_bstr_t)m_pRecordset->GetCollect("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();
}
}
}
voidCDataView:
:
OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)
{
POSITIONpos=m_ListCtrl.GetFirstSelectedItemPosition();
m_nIndex=m_ListCtrl.GetNextSelectedItem(pos);
}
voidCDataView:
:
OnDblclkList1(NMHDR*pNMHDR,LRESULT*pResult)
{
POSITIONpos=m_ListCtrl.GetFirstSelectedItemPosition();
m_nIndex=m_ListCtrl.GetNextSelectedItem(pos);
CEditDlgdlg;
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.m_strName);
m_ListCtrl.SetItemText(m_nIndex,2,dlg.m_strPassword);
}
*pResult=0;
}
voidCDataView:
:
OnUp()
{
//TODO:
Addyourcommandhandlercodehere
m_ListCtrl.SetFocus();
if(m_nIndex==-1)
{
MessageBox("请选择一行!
");
return;
}
if(m_nIndex==0)
{
MessageBox("你选中的行已经时顶行!
");
return;
}
CStringstrNo,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_nIndex);
m_ListCtrl.InsertItem(m_nIndex-1,strNo);
m_ListCtrl.SetItemText(m_nIndex-1,1,strName);
m_ListCtrl.SetItemText(m_nIndex-1,2,strPassword);
m_nIndex--;
m_ListCtrl.SetItemState(m_nIndex,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED);
}
voidCDataView:
:
OnKillfocusList1(NMHDR*pNMHDR,LRESULT*pResult)
{
m_nIndex=-1;
}
voidCDataView:
:
OnDown()
{
//TODO:
Addyourcommandhandlercodehere
m_ListCtrl.SetFocus();
if(m_nIndex==-1)
{
MessageBox("请选择一行!
");
return;
}
if(m_nIndex==m_ListCtrl.GetItemCount()-1)
{
MessageBox("已经时最后一行!
");
return;
}
CStringstrNo,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