MFC中ListControl控件的使用分类

合集下载

CListCtrl用法

CListCtrl用法

CListCtrl用法一、CListCtrl在MFC中共有四种view可供选择,每种view用不同的方式显示列表的内容。

· 图标视图(Icon view)每一项以全尺寸图标(32×32像素)出现,下面有一个标签。

用户可在列表视图窗口拖动项到任意位置。

· 小图标视图(Small icon view)视图每一项以小图标(16×16像素)出现,右边有一个标签。

用户可在列表视图窗口拖动项到任意位置。

· 列表视图(List view)每一项以小图标出现,下面有一个标签。

项按列排列,不能拖动到列表视图窗口的任何位置。

· 报表视图(Report view)每一项在本行上出现,右边有排列成列的附加信息。

最左边的列包含小图标和标签,下一列包含应用指定的子项。

二、使用List Control控件有两种方法。

1.在对话框体上添加,直接从工具箱里点List Control拖拉即可,在属性里view项设置视图类型。

CListCtrl *pMyList;pMyList = (CListCtrl*)GetDlgItem(IDC_LIST);2.无对话框体,直接显示在程序初始视图窗口里面。

这时,如果基于CListView的类,声明变量,然后调用CListView类里的成员函数GetListCtrl()。

CListCtrl *pMyList;pMyList = &GetListCtrl();pMyList->ModifyStyle(0,LVS_ICON);//设置为视图类型三、其它设置。

如显示样式、位置、背景等。

设置显示样式:网格,选中时整行高亮pMyList->SetExtendedStyle( LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES );如要固定每列不能用鼠标拖动,添加如下代码:CHeaderCtrl* pHeaderCtrl = (CHeaderCtrl*)pMyList->GetHeaderCtrl();pHeaderCtrl->EnableWindow( FALSE ) ;四、之后可以插入行、列。

ListControl控件技巧总汇

ListControl控件技巧总汇

ListControl控件技巧总汇一、基本使用1. 创建List Control控件:使用CListCtrl类的Create函数来创建List Control控件,并指定样式。

2. 设置List Control控件的样式:使用SetExtendedStyle函数来设置List Control控件的扩展样式,例如设置带有网格线、可以选择多行等等。

3. 添加列表项:使用InsertItem函数来添加列表项,可以指定列表项的文本和图标等属性。

4. 设置列标题:使用InsertColumn函数来设置列标题,可以指定列的索引、宽度、文本等属性。

二、列表项操作1. 删除列表项:使用DeleteItem函数来删除指定索引的列表项。

2. 修改列表项:使用SetItemText函数来修改指定索引的列表项的文本。

3. 获取列表项:使用GetItemText函数来获取指定索引的列表项的文本。

4. 设置列表项属性:使用SetItemData函数来设置列表项的用户数据,可以将数据与列表项关联起来。

三、列操作1. 删除列:使用DeleteColumn函数来删除指定索引的列。

2. 移动列:使用SetColumnOrderArray函数来移动列的顺序。

3. 调整列宽:使用SetColumnWidth函数来调整列的宽度。

四、列表样式修改1. 修改行高:使用SetItemHeight函数来修改列表项的行高。

2. 修改列宽:使用SetColumnWidth函数来修改列的宽度。

3.绘制单元格背景:使用NM_CUSTOMDRAW消息来绘制列表项的背景,可以自定义背景色或者绘制图标。

五、排序功能1. 启用排序:使用EnableHeaderSorting函数来启用列表项的排序功能。

2.排序回调:使用排序回调函数来自定义排序的规则。

3. 刷新列表:使用SortItems函数来刷新列表,使得排序生效。

六、自定义绘制1.自定义绘制列表项:使用NM_CUSTOMDRAW消息来自定义绘制列表项的外观,例如修改字体、颜色等。

mfc listcontrol 控件使用总结整理

mfc listcontrol 控件使用总结整理

mfc listcontrol 控件使用总结整理MFC List Control控件是MFC框架中的一个常用控件,用于显示和管理列表数据。

以下是对MFC List Control控件使用的一些总结整理:1. 创建控件:通过在对话框资源中添加List Control控件进行创建,或者在代码中使用Create()函数动态创建。

2. 设置风格:可以通过代码设置控件的风格,如设置单选模式、多选模式、网格线等。

3. 设置列头:通过调用InsertColumn()函数来设置控件的列头,可以设置列标题、宽度等属性。

4. 添加项:可以通过调用InsertItem()函数来添加行(项),可以设置每个项的数据、图标等属性。

5. 设置子项:通过调用SetItemText()函数来设置每个项的子项的文本内容。

6. 获取选定项:可以通过调用GetNextItem()函数来获取当前选中项的索引,然后可以通过GetItemText()函数来获取选中项的内容。

7. 删除项:可以通过调用DeleteItem()函数来删除指定的项。

8. 排序:可以通过调用SortItems()函数来对List Control控件的内容进行排序。

9. 自定义绘制:可以通过重写OnCustomDraw()函数来实现对List Control控件的自定义绘制,如改变项的背景颜色、文本颜色等。

10. 列表视图:可以通过设置控件的样式为列表视图,来实现更复杂的数据展示和交互功能,如拖拽、排序、编辑等。

需要注意的是,MFC List Control控件的使用需要注意内存释放和资源管理,例如在动态创建控件时需要手动调用DeleteObject()函数来释放资源。

另外,对于大量数据的操作,可以考虑使用虚拟列表实现数据的延迟加载,以提高性能和响应速度。

MFC中ListCtrl的用法

MFC中ListCtrl的用法

MFC中ListCtrl的用法MFC中的列表视图控件CListCtrl2010-04-21 10:06一、在Windows应用程序中添加ListControl控件的几种方法1、在对话框中添加控件:创建对话框应用程序,在资源视图中添加对话框。

如下图所示,在控件工具条中选择ListControl控件添加到对话框中,并调整控件尺寸。

在ListControl控件的属性页中设置控件样式(Styles)和扩展样式等。

为了显示详细数据信息,可以设置控件的显示风格为报表视图(Report)。

为了在对话框中使用控件,需要在ClassWizard中为对话框类添加控件成员变量,如下图所示:执行以上操作后,系统自动添加了一个ClistControl对象,并与ListControl 控件资源关联,相关代码如下:// ListDialogDlg.h : header file......public:CListCtrl m_cListCtrl;......// ListDialogDlg.cpp : implementation file......void CListDialogDlg::DoDataExchange(CDataExchange* pDX) {CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CListDialogDlg)DDX_Control(pDX, IDC_LIST_CTRL, m_cListCtrl);//}}AFX_DATA_MAP}......因为本例只为演示在对话框中添加ListControl控件,所以只在对话框初始化消息函数中添加了以下显示控件的示例代码(代码含义请参照MSDN文献):BOOL CListDialogDlg::OnInitDialog(){CDialog::OnInitDialog();......// TODO: Add extra initialization hereDWORD exstyle = m_cListCtrl.GetExtendedStyle();m_cListCtrl.SetExtendedStyle(exstyle | LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES |LVS_EX_CHECKBOXES | WS_EX_STATICEDGE );CRect rect;m_cListCtrl.GetClientRect(&rect);int nColInterval = rect.Width()/5;m_cListCtrl.InsertColumn(0, _T("Item Name"), LVCFMT_LEFT, nColInterval*3);m_cListCtrl.InsertColumn(1, _T("Value"), LVCFMT_LEFT, nColInterval); m_cListCtrl.InsertColumn(2, _T("Time"), LVCFMT_LEFT,rect.Width()-4*nColInterval);m_cListCtrl.InsertItem(0,"name");m_cListCtrl.SetItemText(0,1,"value");m_cListCtrl.SetItemText(0,2,"time");......return TRUE; // return TRUE unless you set the focus to a control}2、在单文档视图中自行添加ListControl控件:创建单文档应用程序,如下图所示为视图类添加CListCtrl对象成员变量:如下图所示,在资源视图中打开String Table资源,在右键菜单中选择new string,为将要创建的ListControl控件添加资源编号:为创建和显示控件,在视图的初始化消息函数中添加如下代码:void CAddListView::OnInitialUpdate(){CView::OnInitialUpdate();// TODO: Add your specialized code here and/or call the base classm_cListCtrl.Create( LVS_REPORT,CRect(0,0,800,600),this,IDC_ LISTCTRL);m_cListCtrl.ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS|L VS_SORTASCEND ING);//m_cListCtrl.SendMessage(LVM_SETEXTENDEDLISTVIEWST YLE,0,LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECK BOXES);m_cListCtrl.ShowWindow(SW_SHOW);CRect rect;m_cListCtrl.GetClientRect(&rect);int nColInterval = rect.Width()/5;m_cListCtrl.InsertColumn(0, _T("Item Name"), LVCFMT_LEFT, nColInterval*3);m_cListCtrl.InsertColumn(1, _T("Value"), LVCFMT_LEFT, nColInterval); m_cListCtrl.InsertColumn(2, _T("Time"), LVCFMT_LEFT,rect.Width()-4*nColInterval);m_cListCtrl.InsertItem(0,"name");m_cListCtrl.SetItemText(0,1,"value");m_cListCtrl.SetItemText(0,2,"time");}3、在ListView视图中显示ListControl控件:创建单文档应用程序,如下图所示,在选择窗口视图类型时,选择CListView视图:在视图类的初始化消息函数中添加如下显示控件的代码:void CTestlistView::OnInitialUpdate(){CListView::OnInitialUpdate();CDC* dc = GetDC();TEXTMETRIC tm;dc->GetTextMetrics(&tm);GetListCtrl().ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALW AYS|LVS_SORTASCE NDING);GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTY LE,0,LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECK BOXES|LVS_EX_TRACKS ELECT);GetListCtrl().InsertColumn(0,"Name",LVCFMT_LEFT,30*tm.tm AveCharWidth, 0);GetListCtrl().InsertColumn(1,"Comment",LVCFMT_LEFT,70*t m.tmAveCharWid th,1);// TODO: You may populate your ListView with items by directly accessing // its list control through a call to GetListCtrl().}二、为ListControl控件添加消息处理函数1、关于ListControl控件消息在ListControl控件中有以下消息(通知)可以发送:NM_CLICK、NM_DBLCLK、NM_RCLICK、LVN_COLUMNCLICK、HDN_ITEMCLICK等。

mfc中listcontrol控件

mfc中listcontrol控件

MFC中ListControl控件介绍MFC(Microsoft Foundation Class)是一种用于开发Windows桌面应用程序的C++框架。

在MFC中,ListControl是一种常用的控件,用于以列表形式显示数据。

本文将介绍MFC中的ListControl控件,包括其基本功能、使用方法以及常见应用场景。

ListControl的基本功能ListControl控件通常用于显示大量数据,并提供滚动、排序和编辑等功能。

它可以容纳多列的数据,在每个单元格中显示文本、图标或其他类型的数据。

ListControl的创建与添加数据在MFC中,创建ListControl控件的方法如下: 1. 在对话框资源中添加一个ListControl控件; 2. 使用Class Wizard添加一个ListControl成员变量,保存对该控件的引用。

ListControl中的数据可以通过以下方式添加: 1. 使用InsertItem函数添加新的行; 2. 使用SetItemText函数设置每个单元格的文本。

ListControl的基本操作ListControl提供了一系列方法和消息来处理用户交互,并对列表数据进行操作。

以下是一些常见的基本操作: - 添加数据:使用InsertItem和SetItemText函数添加新行和设置单元格数据; - 删除数据:使用DeleteItem函数删除选定行; - 编辑数据:使用EditLabel函数编辑选定行的文本; - 排序数据:使用SortItems函数按列排序列表项; - 选择数据:使用SetItemState函数设置选中行; - 获取数据:使用GetItemText函数获取指定行和列的文本数据。

ListControl的高级功能除了基本功能外,ListControl还提供了一些高级功能,可以增强用户体验和数据展示效果:ListControl可以以图标形式显示数据,并提供多种视图模式,如大图标、小图标和列表视图。

mfc list control简单使用说明

mfc list control简单使用说明

mfc list control简单使用说明MFC(Microsoft Foundation Classes)是Microsoft提供的一个C++面向对象的应用程序框架,用于开发Windows应用程序。

MFC的List Control是其中一个常用的控件,用于展示和管理数据列表。

使用MFC List Control之前,需要先创建一个对话框或视图类,并在资源编辑器中添加一个List Control控件。

我们可以通过以下几个步骤简单地使用MFC List Control控件:1. 设置列标头:使用InsertColumn函数,我们可以设置List Control的列标头。

例如,如果我们想要一个包含“姓名”和“年龄”的列表,可以这样做:```cppm_listCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(1, _T("年龄"), LVCFMT_LEFT, 100);```2. 添加数据项:使用InsertItem函数,我们可以在List Control中添加数据项。

每个数据项将代表列表中一行的数据。

例如,我们可以这样添加一个名为“张三”,年龄为25的数据项:```cppint nIndex = m_listCtrl.InsertItem(0, _T("张三"));m_listCtrl.SetItemText(nIndex, 1, _T("25"));```3. 更改数据项内容:使用SetItemText函数,我们可以修改List Control中数据项的内容。

例如,如果我们想修改“张三”的年龄为30,可以使用以下代码:```cppm_listCtrl.SetItemText(nIndex, 1, _T("30"));```4. 删除数据项:使用DeleteItem函数,我们可以删除List Control中的数据项。

MFC ListControl控件用法

MFC ListControl控件用法

M F C L i s t C o n t r o l控件用法------------------------------------------作者xxxx------------------------------------------日期xxxxMFC ListControl控件用法开发环境:visual studio 20081、新建一个基于对话框的MFC应用程序。

在对话框上拖放一个listcontrol控件和一个button控件,给listcontrol控件添加一个名为m_StoreItems的变量。

添加button的点击响应函数。

void CDepartmentStoreDlg::OnBnClickedNewitem(){// TODO: 在此添加控件通知处理程序代码srand((unsigned)time(NULL));TCHAR strNumber[20];//这里不要定义为char或者CString类型,不然后面 lvItem.pszText会报错。

int number1 = rand() % 100;int number2 = rand() % 100;wsprintf(strNumber,_T("%d-%d"), number1, number2);LVITEM lvItem;lvItem.mask = LVIF_TEXT;lvItem.iItem = 0;lvItem.iSubItem = 0;lvItem.pszText = strNumber;m_StoreItems.InsertItem(&lvItem);}运行效果如下,效果相当于listbox控件,就是一个列表,一行一行的:现在设置为报表视图,显示成表格形式。

在初始化函数里添加:BOOL CDepartmentStoreDlg::OnInitDialog(){CDialog::OnInitDialog();// TODO: 在此添加额外的初始化代码m_StoreItems.SetView(LVS_REPORT);//如果在属性里面设置了listview的view是report,这里就没必要了,默认的是iconLVCOLUMN lvColumn;lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; //掩码设置了fmt值、显示列标题和指定宽度lvColumn.fmt = LVCFMT_LEFT; //设置作对其模式lvColumn.cx = 120; //设置标题的宽度为120个像素lvColumn.pszText = _T("Full Name"); //设置标题(列名)m_StoreItems.InsertColumn(0, &lvColumn); //添加列,索引为0 lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 100;lvColumn.pszText = _T("Profession");m_StoreItems.InsertColumn(1, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 80;lvColumn.pszText = _T("Fav Sport");m_StoreItems.InsertColumn(2, &lvColumn);lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT;lvColumn.cx = 75;lvColumn.pszText = _T("Hobby");m_StoreItems.InsertColumn(3, &lvColumn);}下面给报表添加点实际的内容。

list control控件 用法

list control控件 用法

list control控件用法
List 控件是Visual Basic中的一种新的控件,可以把项目以列表的
形式显示出来,可以把相同的项目放在一起,它的提供了四种形式的列表:普通列表框、树形列表框、多项选择列表框和选项卡列表框。

1、普通列表框:此列表框用于显示项目列表,可以在列表中单独选
择一项,或者按住Shift或Ctrl键实现多项选择:
2、树形列表框:此列表框可以用来显示树形结构的数据,可以在节
点展开并选择里面的某一项:
3、多项选择列表框:可以把列表框选择模式由普通模式切换成多项
选择模式,即允许用户在列表框中选择多个项目:
4、选项卡列表框:列表框也可以以选项卡为基础,使用此类列表框
可以在每一个选项卡上显示不同的项目,用户可以点击其中任意一个选项
卡来选择项目:
使用List控件,需要在程序中设置列表中的项目,即:通过使用AddItem 方法向列表控件中添加项目,可以把要列出的所有条目添加到
List控件中。

添加内容的方法也很简单:在List控件的内部把输入的字
符串按照“项目1,项目2”的形式添加进去即可。

ListControl控件的使用方法

ListControl控件的使用方法

ListControl控件的使用方法列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。

MFC中使用CListCtrl类来封装列表控件的各种操作。

通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:LVS_ICON ,LVS_SMALLICON ,LVS_LIST, LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。

LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点LVS_SINGLESEL 同时只能选中列表中一项首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);int InsertItem( int nItem, LPCTSTR lpszItem ); 插入行nItem:指明插入位置lpszItem:为显示字符。

除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。

int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem); 插入列iCol:为列的位置,从零开始lpszColumnHeading:为显示的列名nFormat:为显示对齐方式nWidth:为显示宽度nSubItem:为分配给该列的列索引。

listcontrol控件用法

listcontrol控件用法

listcontrol控件用法List Control控件是一个可用于显示和管理数据的Windows控件。

它提供了一种在列表中显示多个项目和对项目进行操作的方式。

以下是关于List Control控件的用法的详细解释。

一、List Control控件的基本用法2. 设置样式:通过设置控件的样式,可以控制List Control的外观和行为。

比如可以选择单选或多选模式,设置是否显示网格线等。

3. 添加列:使用InsertColumn函数可以添加列,每个列表项可以有多个列。

可以设置列的宽度、标题、对齐方式等属性。

4. 添加项:使用InsertItem函数可以向List Control控件中添加项。

可以设置每个列对应的文本、图标、状态等。

6. 删除项:使用DeleteItem函数可以删除选定的项。

7. 排序:可以通过SortItems函数对列表项进行排序,根据指定的列和排序方式进行排序。

8. 选择项:可以通过SetItemState函数设置列表项的选中状态,可以选择单个或多个项。

9. 获取项的数据:使用GetItemText函数可以获取列表项的文本值,也可以使用GetItemData函数获取项的附加数据。

二、List Control控件的高级用法1. 图标视图:通过设置控件的样式为LVS_ICON,可以在List Control中显示项目的图标。

可以使用SetImageList函数来设置图标显示时使用的图像列表。

2. 详细视图:通过设置控件的样式为LVS_REPORT,可以在List Control中以表格形式显示项目的详细信息。

可以使用SetExtendedStyle 函数设置列表的扩展样式。

3. 多选模式:通过设置控件的样式为LVS_MULTIPLESEL,可以启用多选模式。

可以使用GetSelectedCount和GetSelectedItem函数获取选中的项。

4. 拖放操作:通过处理控件的通知消息,可以实现拖放操作。

mfc中listcontrol用法

mfc中listcontrol用法

mfc中listcontrol用法MFC中的List Control是一种典型的列表框控件,它可以显示多列数据,并具备排序、选择、编辑等功能。

这篇文章将会阐述MFC中List Control的用法,以帮助读者更好地理解和运用这个控件。

一、创建List Control在MFC中,可以使用控件向导创建List Control,具体步骤如下:1. 打开Visual Studio;2. 创建一个MFC应用程序;3. 在创建对话框的过程中,添加一个List Control控件;4. 在对话框的OnInitDialog函数中,添加以下代码:CListCtrl* pListCtrl =(CListCtrl*)GetDlgItem(IDC_LIST1);pListCtrl->InsertColumn(0, _T("列1"), LVCFMT_LEFT, 60);pListCtrl->InsertColumn(1, _T("列2"), LVCFMT_LEFT, 100);pListCtrl->InsertColumn(2, _T("列3"), LVCFMT_LEFT, 100);pListCtrl->InsertItem(0, _T("第一行"));pListCtrl->SetItemText(0, 1, _T("第一行第二列"));pListCtrl->SetItemText(0, 2, _T("第一行第三列"));二、添加数据在创建好List Control之后,就可以通过以下代码添加数据:CListCtrl* pListCtrl =(CListCtrl*)GetDlgItem(IDC_LIST1);CString strText;strText = _T("第二行");int nRow = pListCtrl->InsertItem(1, strText);strText = _T("第二行第二列");pListCtrl->SetItemText(nRow, 1, strText);strText = _T("第二行第三列");pListCtrl->SetItemText(nRow, 2, strText);三、排序List Control可以通过自带的“排序”功能,对列表中的数据进行排序。

MFC中ListTab控件及ListControl控件使用

MFC中ListTab控件及ListControl控件使用

MFC中ListTab控件及ListControl控件使用在MFC中,List Tab控件和List Control控件是常用于显示列表数
据的控件。

本篇文章将详细介绍如何使用这两个控件。

一、List Tab控件
1. 在资源视图中,从工具箱中拖动一个TabControl控件到对话框上。

二、List Control控件
1. 在资源视图中,从工具箱中拖动一个List Control控件到对话框上。

2. 调整List Control控件的大小和位置,使其适应对话框的需要。

3. 在主对话框类中,添加一个成员变量,用于引用List Control控件。

可以使用Wizard中的成员变量向导自动生成相应的代码。

4. 在主对话框类的OnInitDialog(函数中,使用
ListCtrl.InsertColumn(函数添加列,并使用ListCtrl.InsertItem(函
数和ListCtrl.SetItemText(函数向List Control控件中插入数据和设
置每个单元格的内容。

7. 在主对话框类中的响应函数中,可以使用
ListCtrl.GetSelectionMark(函数获取当前选中的项的索引,使用ListCtrl.GetItemText(函数获取指定项指定列的文本内容。

总结:。

mfc中listcontrol控件

mfc中listcontrol控件

mfc中listcontrol控件MFC中的ListControl控件是一种用于显示和编辑列表数据的控件,它也被称为ListView控件。

该控件可以在列表中显示多行数据,并且可以根据需要进行排序、过滤和搜索等操作。

在本文中,我们将介绍MFC中的ListControl控件的一些基本使用方法和注意事项。

首先,我们需要在MFC应用程序的资源视图中添加一个ListControl控件。

方法是右键单击资源视图中的对话框文件,并选择“添加控件”选项。

然后在控件选项卡中选择“列表视图”,并在对话框中添加一个ListControl控件。

我们还可以在属性中更改控件的样式、列标题和显示方式等。

接下来,我们需要在代码中获取对ListControl控件的引用,并设置它的属性和数据。

在对话框类的头文件中,我们可以声明一个ListControl控件变量,如下所示:CListCtrl m_ListCtrl;在OnInitDialog方法中,我们可以通过以下代码获取ListControl控件的引用:m_ListCtrl = GetDlgItem(IDC_LIST_CONTROL);然后,我们可以设置控件的样式、列标题和显示方式,如下所示:m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES);m_ListCtrl.InsertColumn(0, _T("ID"), LVCFMT_LEFT, 100);m_ListCtrl.InsertColumn(1, _T("Name"), LVCFMT_LEFT, 150);m_ListCtrl.InsertColumn(2, _T("Age"), LVCFMT_LEFT, 100);m_ListCtrl.InsertColumn(3, _T("Gender"), LVCFMT_LEFT, 100);接下来,我们可以将数据添加到ListControl控件中。

VCMFC之ListCtrl控件使用经验总结

VCMFC之ListCtrl控件使用经验总结

VCMFC之ListCtrl控件使用经验总结本文将从创建ListCtrl控件、数据的插入、删除和修改、列表项的选择和排序等方面,总结一些经验和注意事项。

一、创建ListCtrl控件创建ListCtrl控件的方法有很多,下面介绍两种常用的方法。

2. 动态创建ListCtrl控件:可以通过CListCtrl类的Create函数来动态创建ListCtrl控件。

例如:```cppCListCtrl m_listCtrl;m_listCtrl.Create(WS_CHILD , WS_VISIBLE , LVS_REPORT, CRect(0, 0, 500, 300), this, IDC_LIST_CTRL);```此外,还可以通过控件向导创建ListCtrl控件,控件向导在创建ListCtrl控件时会生成相关的代码。

二、数据的插入、删除和修改1.插入数据:可以使用InsertItem函数向ListCtrl控件中插入新的项。

例如:```cppm_listCtrl.InsertItem(0, _T("Item 1"));2.删除数据:可以使用DeleteItem函数删除ListCtrl控件中的其中一项。

例如:```cppm_listCtrl.DeleteItem(0);```3.修改数据:可以通过SetItemText函数修改ListCtrl控件中其中一项的文字。

例如:```cppm_listCtrl.SetItemText(0, 1, _T("Modified Item"));```三、列表项的选择和排序1.列表项的选择:可以使用GetNextItem函数和SetItemState函数来获取和设置ListCtrl控件中的选中项。

例如:```cppint nItem = m_listCtrl.GetNextItem(-1, LVNI_SELECTED);m_listCtrl.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);2.列表项的排序:可以使用SortItems函数对ListCtrl控件中的数据进行排序。

mfc的listctrl使用

mfc的listctrl使用

mfc的listctrl使用(原创实用版)目录1.MFC 的 ListCtrl 简介2.ListCtrl 的基本操作3.ListCtrl 的常用属性4.ListCtrl 的事件处理5.ListCtrl 的实例应用正文一、MFC 的 ListCtrl 简介MFC(Microsoft Foundation Class)是微软提供的一组用于开发Windows 应用程序的类库。

在 MFC 中,ListCtrl(List Control)是一种常用的控件,用于显示列表数据,方便用户进行选择和操作。

ListCtrl 控件可以应用于多种场景,如文件列表、程序选项等。

二、ListCtrl 的基本操作要使用 MFC 的 ListCtrl 控件,首先需要在资源视图中添加一个ListCtrl 控件。

接下来,可以通过以下方法进行基本操作:1.添加数据:使用 AddString() 方法向列表中添加数据。

2.插入数据:使用 InsertString() 方法在指定位置插入数据。

3.删除数据:使用 DeleteString() 方法删除指定位置的数据。

4.选择数据:使用 SetCurSel() 方法设置当前选择。

5.获取选中数据:使用 GetCurSel() 方法获取当前选择的数据。

三、ListCtrl 的常用属性ListCtrl 控件提供了丰富的属性,用于设置和获取控件的显示和行为。

以下是一些常用的属性:1.m_nItemCount:列表中的项目数量。

2.m_nColumnCount:列表中的列数。

3.m_strText:列表中的指定项目的文本。

4.m_bEnableDrag:是否启用拖动操作。

5.m_bEnableDrop:是否启用拖放操作。

6.m_bSortAscending:是否按升序排列。

四、ListCtrl 的事件处理ListCtrl 控件支持多种事件,如鼠标点击、鼠标释放、拖放等。

事件处理函数可以通过消息映射(Message Mapping)或事件处理程序(Event Handler)实现。

mfc的listctrl使用

mfc的listctrl使用

mfc的listctrl使用MFC(Microsoft Foundation Classes)是微软提供的一组用于简化Windows应用程序开发的类库。

ListCtrl是MFC提供的一个控件,用于显示列表数据。

以下是使用MFC的ListCtrl控件的一些基本步骤:1、添加ListCtrl控件:在对话框资源中,右键单击对话框编辑器,选择"添加控件",然后从控件列表中选择"ListCtrl"。

2、初始化ListCtrl控件:在对话框类的DoDataExchange函数中,使用DDX_Control宏初始化ListCtrl控件。

例如:cppvoid CMyDialog::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CMyDialog)DDX_Control(pDX, IDC_LISTCTRL, m_listCtrl);//}}AFX_DATA_MAP}3、添加列头:使用InsertColumn函数添加列头。

例如:cppvoid CMyDialog::OnPaint(){CPaintDC dc(this); // device context for painting// TODO: 在此处添加消息处理程序代码m_listCtrl.InsertColumn(0, _T("Column 1"), LVCFMT_LEFT, 80);m_listCtrl.InsertColumn(1, _T("Column 2"), LVCFMT_LEFT, 120);//...}4、添加行数据:使用InsertItem函数添加行数据。

例如:cppvoid CMyDialog::OnButtonAdd(){// TODO: 在此处添加消息处理程序代码LVITEM lvItem;lvItem.iItem = m_listCtrl.GetItemCount();lvItem.iSubItem = 0;lvItem.mask = LVIF_TEXT;hTextMax = MAX_PATH;lvItem.pszText = new TCHAR[MAX_PATH];lvItem.lParam = 0;lvItem.iImage = 0;lvItem.iIndent = 0;lvItem.iGroupId = 0;lvItem.bNote = FALSE;lvItem.iSelect = FALSE;lvItem.iState = 0;lvItem.dwItemData = 0;olumns = 2; // number of columns to span (0 for no spanning) lvItem.puColumns = NULL; // array of column indices to span (NULL for no spanning)m_listCtrl.InsertItem(&lvItem); // insert the item into the list view control (the actual call that inserts the item)}。

ListControl控件的使用方法

ListControl控件的使用方法

ListControl控件的使用方法[ 录入者:NCRE100 | 时间:2009-02-14 18:14:11 | 作者: | 来源: | 浏览:308次]列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。

MFC中使用CListCtrl类来封装列表控件的各种操作。

通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:LVS_ICON ,LVS_SMALLICON ,LVS_LIST, LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。

LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点LVS_SINGLESEL 同时只能选中列表中一项首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);int InsertItem( int nItem, LPCTSTR lpszItem ); 插入行nItem:指明插入位置lpszItem:为显示字符。

除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. CListCtrl 风格LVS_ICON: 为每个item显示大图标LVS_SMALLICON: 为每个item显示小图标LVS_LIST: 显示一列带有小图标的itemLVS_REPORT: 显示item详细资料直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”2. 设置listctrl 风格及扩展风格LONG lStyle;lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口stylelStyle &= ~LVS_TYPEMASK; //清除显示方式位lStyle |= LVS_REPORT; //设置styleSetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置styleDWORD dwStyle = m_list.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl)dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl)dwStyle |= LVS_EX_CHECKBOXES;//item前生成checkbox控件m_list.SetExtendedStyle(dwStyle); //设置扩展风格注:listview的style请查阅msdn/library/default.asp?url=/library/en-us/wceshellui5/html/wce5 0lrflistviewstyles.asp3. 插入数据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(nRow, 1, “jacky”);//设置数据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中所有行的checkbox的状态m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);CString str;for(int i=0; i<m_list.GetItemCount(); i++){if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i)){str.Format(_T("第%d行的checkbox为选中状态"), i);AfxMessageBox(str);}}7. 得到listctrl中所有选中行的序号方法一:CString str;for(int i=0; i<m_list.GetItemCount(); i++){if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED ){str.Format(_T("选中了第%d行"), i);AfxMessageBox(str);}}方法二:POSITION pos = m_list.GetFirstSelectedItemPosition();if (pos == NULL)TRACE0("No items were selected!/n");else{while (pos){int nItem = m_list.GetNextSelectedItem(pos);TRACE1("Item %d was selected!/n", nItem);// you could do your own processing on nItem here }}8. 得到item的信息TCHAR szBuf[1024];LVITEM lvi;lvi.iItem = nItemIndex;lvi.iSubItem = 0;lvi.mask = LVIF_TEXT;lvi.pszText = szBuf;hTextMax = 1024;m_list.GetItem(&lvi);关于得到设置item的状态,还可以参考msdn文章Q173242: Use Masks to Set/Get Item States in CListCtrl /kb/173242/en-us9. 得到listctrl的所有列的header字符串内容LVCOLUMN lvcol;char str[256];int nColNum;CString strColumnName[4];//假如有4列nColNum = 0;lvcol.mask = LVCF_TEXT;lvcol.pszText = str;hTextMax = 256;while(m_list.GetColumn(nColNum, &lvcol)){strColumnName[nColNum] = lvcol.pszText;nColNum++;}10. 使listctrl中一项可见,即滚动滚动条m_list.EnsureVisible(i, FALSE);11. 得到listctrl列数int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();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消息相应函数void 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;int nItem = m_list.SubItemHitTest(&lvinfo);if(nItem != -1){CString strtemp;strtemp.Format("单击的是第%d行第%d列", lvinfo.iItem, lvinfo.iSubItem);AfxMessageBox(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消息相应函数void 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);//判断是否点在checkbox上if(nFlag == LVHT_ONITEMSTATEICON){AfxMessageBox("点在listctrl的checkbox上");}*pResult = 0;}15. 右键点击listctrl的item弹出菜单添加listctrl控件的NM_RCLICK消息相应函数void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) {NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;if(pNMListView->iItem != -1){DWORD dwPos = GetMessagePos();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切换焦点时(包括用键盘和鼠标切换),状态的一些变化顺序添加listctrl控件的LVN_ITEMCHANGED消息相应函数void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult){NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;// TODO: Add your control notification handler code hereCString sTemp;if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED && (pNMListView->uNewState & 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 && (pNMListView->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. 在CListCtrl显示文件,并根据文件类型来显示图标添加listctrl控件的LVN_ITEMCHANGED消息相应函数BOOL CTest6Dlg::OnInitDialog(){CDialog::OnInitDialog();HIMAGELIST himlSmall;HIMAGELIST himlLarge;SHFILEINFO sfi;char cSysDir[MAX_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,&sfi,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);::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 filefind;// get file sizeif (filefind.FindFile(lpszFileName)){filefind.FindNextFile();strSize.Format("%d", filefind.GetLength());}elsestrSize = "0";// split path and filenameCString strFileName = lpszFileName;CString strPath;int nPos = strFileName.ReverseFind('\\');if (nPos != -1){strPath = strFileName.Left(nPos);strFileName = strFileName.Mid(nPos + 1);}// insert to listint 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::GetIconIndex(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;}else{SHGetFileInfo (lpszPath,FILE_ATTRIBUTE_NORMAL,&sfi,sizeof(sfi),SHGFI_SMALLICON | SHGFI_SYSICONINDEX |SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0));return sfi.iIcon;}return -1;}18. listctrl内容进行大数据量更新时,避免闪烁添加listctrl控件的NM_RCLICK消息相应函数m_list.SetRedraw(FALSE);//更新内容m_list.SetRedraw(TRUE);m_list.Invalidate();m_list.UpdateWindow();或者参考/library/default.asp?url=/library/en-us/vclib/html/_mfc_cwnd .3a3a.setredraw.asp。

相关文档
最新文档