本人初次用CListCtrl控件的时候,对于InsertItem和SetrtItemtext两个函数的作用始终不是太懂,比如如果不先调用InsertItem这个函数,后面的InsertItemtext函数写了,也不起作用.查了MSDN,也没有收获,经过有人点拔,才恍然大悟.今天将经验说一下,希望有共同爱好者少走弯路.
InsertItem在MSDN中的函数原型如下
int
InsertItem(
const
LVITEM*
pItem
);
int InsertItem( int
nItem
, LPCTSTR
lpszItem
);
int InsertItem( int
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));
m_ListCtrl.SetImageList(&m_ImageList,LVSIL_SMALL);
这样,控件中的每一行的开头就有一个应用程序图标
现在转入正题,先介绍一下INSERTITEM个个参数的意义
nItem: 控件中行的索引
lpszItem
:
控件头的名字
.........................................................................................................................................................................................................
SettItemtext函数的原型
BOOL
SetItemText(
int
nItem
,
int
nSubItem
,
LPTSTR
lpszText
);
******************注意这个函数中的参数
nItem就是INSERTITEM中的NITEM,
也就是说InsertItem是向控件声请一行来放数据,记住只是声请,那么方数据的工作就又SETITEMTEXT来实现
举例如下:
CListCtrl m_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");
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
至于要添多少多少个数据,就由你的控件由多少列了
获得可以这样的道 int columns=
m_listctr.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_FILE
static char THIS_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
// Standard printing
commands
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()
/////////////////////////////////////////////////////////////////////////////
//
CDataView construction/destruction
CDataView::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 modifying
// the CREATESTRUCT
cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
//
CDataView drawing
void CDataView::OnDraw(CDC* pDC)
{
CDataDoc* pDoc =
GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native
data here
}
/////////////////////////////////////////////////////////////////////////////
//
CDataView printing
BOOL CDataView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default
preparation
return DoPreparePrinting(pInfo);
}
void CDataView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo*
/*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDataView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo*
/*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
//
CDataView diagnostics
#ifdef _DEBUG
void CDataView::AssertValid()
const
{
CView::AssertValid();
}
void CDataView::Dump(CDumpContext& dc)
const
{
CView::Dump(dc);
}
CDataDoc* CDataView::GetDocument() // non-debug version is
inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDataDoc)));
return
(CDataDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
//
CDataView message handlers
void CDataView::OnInitialUpdate()
{
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,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_CHILD|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, // 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");
}
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
str;
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->GetCollect("username"));
m_ListCtrl.InsertItem(0,(_bstr_t)m_pRecordset->GetCollect("password"));
/*for(int
i=0;i<len;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();
}
}
}
void
CDataView::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.GetNextSelectedItem(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.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 =
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);
}
void CDataView::OnKillfocusList1(NMHDR* pNMHDR, LRESULT*
pResult)
{
m_nIndex = -1;
}
void CDataView::OnDown()
{
//
TODO: Add your command handler code here
m_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_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);
}
void CDataView::OnEdit()
{
// TODO: Add your command handler code
here
POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
m_nIndex = m_ListCtrl.GetNextSelectedItem(pos);
if(m_nIndex ==
-1)
{
MessageBox("请选择一行!");
return ;
}
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.SetRedraw(false);
m_ListCtrl.DeleteItem(m_nIndex);
m_ListCtrl.InsertItem(m_nIndex,dlg.m_strNo);
m_ListCtrl.SetItemText(m_nIndex,1,dlg.m_strName);
m_ListCtrl.SetItemText(m_nIndex,2,dlg.m_strPassword);
m_ListCtrl.SetRedraw(true);
}
}
void CDataView::OnAdd()
{
// TODO: Add your command handler code
here
CEditDlg dlg;
if(dlg.DoModal() == IDOK)
{
int
count=m_ListCtrl.InsertItem(m_ListCtrl.GetItemCount(),dlg.m_strNo);
m_ListCtrl.SetItemText(count,1,dlg.m_strName);
m_ListCtrl.SetItemText(count,2,dlg.m_strPassword);
}
}
void CDataView::OnDelete()
{
// TODO: Add your command handler code
here
if(m_nIndex == -1)
{
MessageBox("请选择一行!");
return
;
}
m_ListCtrl.DeleteItem(m_nIndex);
UINT flag =
LVIS_SELECTED|LVIS_FOCUSED;
m_ListCtrl.SetItemState(m_nIndex-1, flag,
flag);
}
void CDataView::OnSave()
{
// TODO: Add your command handler code
here
CFile
f;
if(f.Open("save.txt",CFile::modeCreate|CFile::modeWrite,NULL))
{
CString
str="ID号/t/tusername/t/tpassword/r/n";
f.Write(str,strlen(str)+1);
for(int
i=0;i<m_ListCtrl.GetItemCount();i++)
{
str=m_ListCtrl.GetItemText(i,0)+"/t/t"+m_ListCtrl.GetItemText(i,1)+
"/t/t"+m_ListCtrl.GetItemText(i,2)+"/r/n";
f.Write(str,strlen(str)+1);
}
f.Close();
MessageBox("保存成功!");
}
else
{
MessageBox("保存失败!");
}
}
分享到:
相关推荐
CListCtrl控件使用方法总结
CListCtrl控件基本用法
visual c++改变CListCtrl控件中滚动条的颜色
实现CListCtrl控件的Item项拖拽效果,本源码对应的博客链接为:http://blog.csdn.net/d704791892/article/details/22600075
包含19个CListCtrl控件相关代码,可以实现控件的各类编辑与操作方式,可以为你提供借鉴!
MFC,CListCtrl控件的详细使用方法
VC 界面clistctrl控件的重绘 适合初学者
clistctrl控件中添加复选框,编辑框,按钮,combox控件,时间控件;
CListCtrl控件背景颜色网格色彩,用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色,或者需要改变一下行高和字体大小,CListCtrl要改变这些并不是很方便。本文将介绍如何...
该资源主要是讲述使用VS2012 MFC的CListCtrl(列表)控件加载类似于QQ界面的图片与文字数据.主要通过CListCtrl::InsertColumn、InsertItem、SetItemText向列表插入数据,CImageList插入BMP图片或ICON图标.是博客文章...
在CListCtrl控件中的第一列添加图片
CListCtrl控件的简单使用,和登录过程实现
VC++ CListCtrl 控件 行高 编辑通过
关于MFC中ClistCtrl控件的使用,带图标的列表显示,有icon和report两种模式的例子
CListCtrl控件 自动(多页)打印,导出到Excel-通用控件 在VC++6.0下编译通过,绝对可用,无错误 打印过程自动,会根据CListCtrl控件内容自动(多页)打印 有详细的注释 可以不修改直接使用
将CListCtrl控件中的数据保存到EXCEL中.doc
CListCtrl控件使用示例!!!很受用
非常好用的扩展风格的Clistctrl控件,VC6.0和VS2005实例,附可重用类库
本资源讲述如何在VC++的CListCtrl控件中多选择项的删除