MFC中CList用法及其成员函数的使用

合集下载

mfc clistctrl 使用

mfc clistctrl 使用

mfc clistctrl 使用(实用版)目录1.MFC CListCtrl 简介2.MFC CListCtrl 控件的使用方法3.MFC CListCtrl 的常用属性和事件4.MFC CListCtrl 的优缺点5.MFC CListCtrl 的应用实例正文一、MFC CListCtrl 简介MFC CListCtrl(也称为 CMFCListCtrl)是 MFC(Microsoft Foundation Class)库中的一个常用控件,它是基于 Windows 操作系统中的 List Control 控件进行封装的。

CListCtrl 控件主要用于在窗口中显示一个列表,用户可以通过它来选择和修改列表中的项目。

二、MFC CListCtrl 控件的使用方法要在 MFC 应用程序中使用 CListCtrl 控件,需要遵循以下步骤:1.在 Visual Studio 中新建一个 MFC 项目。

2.在 Visual Studio 的“Class View”窗口中,找到“MFCClistCtrl”类,并双击以打开其对话框。

3.在对话框中,选择“Add to”选项,将 CListCtrl 控件添加到对话框中。

4.在属性窗口中,设置 CListCtrl 控件的相关属性,如列表样式、颜色等。

5.在代码窗口中,编写相关代码以实现 CListCtrl 的功能。

三、MFC CListCtrl 的常用属性和事件CListCtrl 控件具有许多常用的属性和事件,以下是其中一些:1.属性:- m_nListStyle:设置列表样式,如 LS_SORTALL、LS_SORTASCEND、LS_SORTDESCEND 等。

- m_nColumnWidth:设置列表中每列的宽度。

- m_nRowHeight:设置列表中每行的高度。

- m_nFont:设置列表中字体。

- m_nTextColor:设置列表中文本的颜色。

- m_nBkColor:设置列表背景色。

mfc clist遍历

mfc clist遍历

MFC CList遍历介绍在使用MFC进行图形界面开发时,常常需要使用列表控件(CList)来展示一系列数据。

然而,仅仅将数据显示在列表中往往无法满足我们的需求,我们还需要能够对列表中的数据进行遍历操作。

本文将深入探讨如何在MFC中使用CList控件进行遍历操作。

CList控件概述CList控件是MFC中用于展示列表数据的控件之一,它可以以表格的形式显示数据,并且支持多种操作,例如插入、删除、排序等。

在使用CList控件之前,我们需要创建一个相应的对话框,并在对话框中添加CList控件。

CList控件的基本使用首先,我们需要在对话框类的头文件中添加一个成员变量,用于管理CList控件。

例如,我们可以在头文件中添加如下代码:CListCtrl m_listCtrl;然后,在OnInitDialog函数中进行控件的初始化。

BOOL CMyDialog::OnInitDialog(){CDialogEx::OnInitDialog();// 初始化CList控件m_listCtrl.SubclassDlgItem(IDC_LIST_CTRL, this);m_listCtrl.InsertColumn(0, _T("Name"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(1, _T("Age"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(2, _T("Gender"), LVCFMT_LEFT, 100);// 添加数据m_listCtrl.InsertItem(0, _T("John"));m_listCtrl.SetItemText(0, 1, _T("25"));m_listCtrl.SetItemText(0, 2, _T("Male"));m_listCtrl.InsertItem(1, _T("Emily"));m_listCtrl.SetItemText(1, 1, _T("30"));m_listCtrl.SetItemText(1, 2, _T("Female"));return TRUE;}在上述代码中,首先我们使用SubclassDlgItem函数将控件与对应的资源ID进行关联。

mfc编程cstringlist实例

mfc编程cstringlist实例

mfc编程cstringlist实例MFC编程中的CStringList实例在MFC(Microsoft Foundation Classes)编程中,CStringList是一个非常有用的类,用于管理字符串的链表。

它提供了许多方便的功能,使得操作字符串链表变得更加简单和高效。

在本文中,我们将逐步回答关于CStringList的问题,并给出一些实例代码来帮助读者更好地理解和使用这个类。

问题1:什么是CStringList?CStringList是MFC框架中的一个类,它是一个模板类,用于处理字符串的链表。

它使用的是C++的模板机制,可以在链表中存储任意类型的数据。

但在这里,我们主要关注它在处理字符串方面的应用。

问题2:如何创建一个CStringList对象?要创建一个CStringList对象,只需简单地声明一个新的实例即可:CStringList strList;这将创建一个名为strList的CStringList对象。

您可以根据需要创建多个实例,并在程序的任何地方使用它们。

问题3:如何向CStringList中添加字符串?要向CStringList中添加字符串,可以使用AddHead()或AddTail()成员函数。

AddHead()函数将字符串添加到链表的头部,而AddTail()函数则将字符串添加到链表的尾部。

下面是一些示例代码:CStringList strList;strList.AddHead("Hello");strList.AddTail("World");这将创建一个名为strList的CStringList对象,并向其头部添加字符串"Hello",在其尾部添加字符串"World"。

问题4:如何遍历并访问CStringList中的字符串?要遍历并访问CStringList中的字符串,可以使用CstringList的一个迭代器。

MFCCListCtrl控件使用总结整理

MFCCListCtrl控件使用总结整理

MFCCListCtrl控件使用总结整理一、基本操作:1. 创建CListCtrl实例,可以通过对话框资源添加控件或代码创建:```cppCListCtrl m_listCtrl;```2.设置列表样式,例如设置为报表样式:```cppm_listCtrl.Create(WS_VISIBLE , WS_CHILD , LVS_REPORT, CRect(10, 10, 500, 300), this, IDC_LIST_CTRL);```3.设置列表列头:```cppm_listCtrl.InsertColumn(0, _T("序号"), LVCFMT_LEFT, 50);m_listCtrl.InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(2, _T("年龄"), LVCFMT_LEFT, 50);```4.添加行数据:```cppint nItemIndex = m_listCtrl.InsertItem(0, _T("1"));m_listCtrl.SetItemText(nItemIndex, 1, _T("张三"));m_listCtrl.SetItemText(nItemIndex, 2, _T("20"));``````cppm_listCtrl.DeleteItem(nItemIndex); // 删除```二、高级操作:1.设置列宽:```cppm_listCtrl.SetColumnWidth(0, LVSCW_AUTOSIZE_USEHEADER);m_listCtrl.SetColumnWidth(1, LVSCW_AUTOSIZE);m_listCtrl.SetColumnWidth(2, LVSCW_AUTOSIZE);```2.设置行高:```cppm_listCtrl.SetItemHeight(0, 50);```3.设置行选中状态:```cppm_listCtrl.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);```4.设置行背景色:```cppm_listCtrl.SetItemState(0, LVIS_SELECTED , LVIS_FOCUSED, LVIS_SELECTED , LVIS_FOCUSED);m_listCtrl.SetSelectionMark(0);m_listCtrl.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);```5.设置行图标:```cppm_listCtrl.SetItemImage(nItemIndex, nImageIndex);```6.获取行数和列数:```cppint nItemCount = m_listCtrl.GetItemCount(;int nColumnCount = m_listCtrl.GetHeaderCtrl(->GetItemCount(;```7.获取行数据:```cppCString strItemText = m_listCtrl.GetItemText(nItemIndex, nSubItemIndex);```三、自定义操作:1.列排序:```cpp```2.行拖拽排序:```cppm_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT ,LVS_EX_GRIDLINES , LVS_EX_HEADERDRAGDROP);``````cppm_listCtrl.ModifyStyle(0, LVS_EDITLABELS);```4.行点击事件:```cppON_NOTIFY(NM_CLICK, IDC_LIST_CTRL, OnLButtonDown)```5.自定义绘制:```cppON_WM_DRAWITEM```四、注意事项和优化建议:1. 大量数据时,慎用SetRedraw方法来控制刷新。

cstringlist用法 -回复

cstringlist用法 -回复

cstringlist用法-回复CStringList是MFC(Microsoft Foundation Class)中的一个类,主要用于管理一组C-style字符串的链表。

本篇文章将逐步回答与CStringList 相关的各个方面,包括使用方法、常见操作以及示例代码等。

一、什么是CStringList?在介绍具体使用方法前,我们先来了解一下CStringList的基本概念。

CStringList是MFC中的一个类,它是一个模板类,用于管理C-style字符串的链表。

它提供了一系列的成员函数和操作符重载,方便我们对链表进行访问和操作。

二、如何创建和初始化一个CStringList对象?要使用CStringList,首先需要在代码中包含头文件Afxcoll.h,并且使用using声明:cpp#include <afx.h>#include <afxtempl.h>using namespace std;接下来,我们可以通过两种方式创建和初始化一个CStringList对象。

1. 通过默认构造函数创建一个空链表:cppCStringList list;2. 通过将已有的链表作为参数传入构造函数进行初始化:cppCStringList list2(list);这样就可以创建并初始化一个CStringList对象了。

三、常见操作1. 插入元素我们可以使用AddHead和AddTail函数在链表的头部和尾部插入新的元素。

例如:cpplist.AddHead(_T("Hello"));list.AddTail(_T("World"));这样就在链表中插入了两个元素。

2. 获取链表大小可以使用GetCount函数获取链表中的元素个数:cppint count = list.GetCount();3. 访问链表元素CStringList提供了一系列的迭代器(iterator)用于访问链表的元素。

MFC列表控件CListCtrl使用方法示范

MFC列表控件CListCtrl使用方法示范

MFC列表控件CListCtrl使⽤⽅法⽰范CListCtrl 获取选中的某⼀⾏POSITION ps = m_list.GetFirstSelectedItemPosition();int nSel = m_list.GetNextSelectedItem(ps);//选中的哪⾏的索引(based 0)// 或if(m_list.GetSelectedCount() <1)return;int nSel = m_list.GetSelectionMark();CListCtrl控件失去焦点时仍保持⾼亮1. 头⽂件中添加变量m_nSelItemint m_nSelItem;2. 为ListCtrl控件添加NM_KILLFOCUS(失去焦点)和NM_SETFOCUS(得到焦点)消息⼿动添加代码如下:头⽂件中添加声明afx_msg void OnNMKillfocusList(NMHDR *pNMHDR, LRESULT *pResult);afx_msg void OnNMSetfocusList(NMHDR *pNMHDR, LRESULT *pResult);源⽂件中添加映射ON_NOTIFY(NM_KILLFOCUS, IDC_LISTCTRL, OnNMKillfocusList)ON_NOTIFY(NM_SETFOCUS, IDC_LISTCTRL, OnNMSetfocusList)源⽂件中添加函数void CPageListView::OnNMKillfocusList(NMHDR *pNMHDR, LRESULT *pResult){// TODO: 在此添加控件通知处理程序代码m_nSelItem = m_ListCtrl.GetSelectionMark();m_ListCtrl.SetItemState(m_nSelItem, LVIS_DROPHILITED, LVIS_DROPHILITED);*pResult = 0;}void CPageListView::OnNMSetfocusList(NMHDR *pNMHDR, LRESULT *pResult){// TODO: 在此添加控件通知处理程序代码m_ListCtrl.SetItemState(m_nSelItem, FALSE, LVIF_STATE);*pResult = 0;}注意:Always Show Selection属性⼀定要设为FALSE以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

VCMFC之ListCtrl控件使用经验总结(转)

VCMFC之ListCtrl控件使用经验总结(转)以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以“ListView_”开头的一些宏。

如ListView_InsertColumn--------------------------------------------------------------------------------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/wce50lrflistviewstyles.asp--------------------------------------------------------------------------------3. 插入数据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_SHOWSELALWAYS--------------------------------------------------------------------------------5. 选中和取消选中一行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-us--------------------------------------------------------------------------------9. 得到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))因为你删除了第一列后,后面的列会依次向上移动。

mfc clist遍历

mfc clist遍历MFC(Microsoft Foundation Class)是一种常用的C++类库,在Windows平台下开发Windows应用程序时,MFC可以为我们提供丰富的开发工具和API。

CList类是MFC中的一个容器类,它提供了一个链表结构来存储数据,并且提供了多种操作链表的方法。

本文将介绍如何使用MFC CList类进行遍历操作。

首先,我们需要创建一个CList对象,并向其中添加数据。

通过调用AddHead或AddTail方法可以将数据添加到链表的头部或尾部。

```CList<int, int> myList;myList.AddHead(1);myList.AddHead(3);myList.AddTail(5);```接下来,我们可以使用迭代器进行遍历。

MFC提供了CList的迭代器类CListIterator。

```CList<int, int>::iterator iter;for (iter = myList.begin(); iter != myList.end(); iter++){//进行操作}```在这段代码中,我们使用了begin和end方法来获取迭代器的起始和结束位置,然后使用循环遍历整个链表。

在每个迭代器指向的节点中,我们可以进行各种操作,如访问节点的值、修改节点的值等。

除了使用迭代器,我们也可以使用MFC提供的另一个方法——循环遍历链表。

该方法使用GetHeadPosition和GetNext方法来依次访问链表中的每个节点。

```POSITION pos = myList.GetHeadPosition();while (pos != NULL){int nValue = myList.GetNext(pos);//进行操作}```在这段代码中,我们首先调用GetHeadPosition方法来获取链表头部节点的位置,然后使用循环依次获取下一个节点,并进行各种操作。

MFC总结之CListCtrl用法及技巧(二).

MFC总结之CListCtrl用法及技巧(二).续第一篇:MFC总结之CListCtrl用法及技巧(一)/zwgdft/article/details/7560592本篇重点介绍:禁止拖动表头、让第一列居中显示、设置行高与字体、虚拟列表技术、点击表头时进行归类、向上与向下移动、动态调整大小问题、避免闪烁问题。

6、禁止拖动表头重载OnNotify消息响应函数,屏蔽两个消息通知码:HDN_BEGINTRACKW 和HDN_DIVIDERDBLCLICKW。

示例如下:[cpp] view plaincopyprint?1.BOOL CXXXX::OnNotify(WPARAM wParam, LPARAM lPara m, LRESULT* pResult)2.{3.// TODO: Add your specialized code here and/or call the base class4.//屏蔽两个消息通知码,使得禁止拖动List表头5.NMHEADER* pNMHeader = (NMHEADER*)lParam;6.if(((pNMHeader->hdr.code == HDN_BEGINTRACKW) |7.(pNMHeader->hdr.code == HDN_DIVIDERDBLCLICKW)))8.{9.*pResult = TRUE;10.return TRUE;11.}12.13.return CDialog::OnNotify(wParam, lParam, pResult);14.}7、让第一列居中显示在插入列时,我们可以通过参数nFormat来设置文本居中显示,但是这种设置对于第一列是没有作用的。

这时我们可以考虑将我们的内容从第二列开始插入(设置为居中显示)。

先插入第一列,然后删除第一列,这样原先的第二列就充当了第一列。

8、设置行高和字体设置CListCtrl的行高没有函数接口,可以通过自绘来实现,但是比较麻烦。

mfc中cimagelist(图形列表控件)和ctreectrl(树形列表控件)的简单用法

函数说明Create 创建一个CImageList控件GetImageCount 获取图像的数目GetImageInfo 获取图像信息Add 添加图像到图像列表控件Remove 从列表中删除图像Replace 替换列表中指定的图像例如:CImageList m_imageList;//创建CImageList对象m_imageList.Create(16, 16, ILC_COLOR8, 0, 4);//加载图标m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_ROOT));然后该CTreeCtrl了,这是一个树形列表控件,提供了分层级结构显示数据的功能。

这个控件有可视化的界面,可以通过界面编辑器进行创建,只需要拉到界面上即可;同样也可以通过Create函数创建一个树形列表控件,由于这种方法通常不用,这里不再赘言。

另外该控件还有很多树形,如Has Button、Has Line等,可以在界面编辑器的属性中查看并设置。

树形控件有两个非常重要的数据结构:TV_ITEM和TV_INSERTSTRUCT。

前者用来描述一个树节点的信息;后者描述要插入树时所需的信息。

结构如下:typedef struct _TV_ITEM {UINT mask; //结构成员有效性屏蔽位HTREEITEM hItem; //数据项控制句柄UINT state; //数据项状态UINT stateMask; //状态有效性屏蔽位LPSTR pszText; //数据项名称字符串int cchTextMax; //数据项名称的最大长度int iImage; //数据项图标索引号int iSelectedImage; //选中数据项图标索引号int cChildren; //子项标识LPARAM lParam; //程序定义的32位数据TVIF_PARAM} TV_ITEM, FAR *LPTV_ITEM;typedef struct _TV_INSER TSTRUCT{HTREEITEM hParent; //父项控制句柄HTREEITEM hInsertAfter; //插入树项的位置TV_ITEM item; //数据项的结构} TV_INSERTSTRUCT, FAR *LPTV_INSERTSTRUCT;使用CImageList可以方便的为CTreeCtrl提供图标。

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