MFC中CList用法及其成员函数的使用
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控件进行遍历操作。
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(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控件使用总结整理一、基本操作: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是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使⽤⽅法⽰范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方法来获取链表头部节点的位置,然后使用循环依次获取下一个节点,并进行各种操作。