[MFC]List Control 用法
- 格式:wps
- 大小:16.00 KB
- 文档页数:2
![[MFC]List Control 用法](https://imgs-1438308264.cos.ap-hongkong.myqcloud.com/0fd34751312b3169a451a411.webp)
![[MFC]List Control 用法](https://imgs-1438308264.cos.ap-hongkong.myqcloud.com/0fd34751312b3169a451a411.webp)
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|LVS_SORTASCEND ING);//m_cListCtrl.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);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_SHOWSELALWAYS|LVS_SORTASCE NDING);GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES|LVS_EX_TRACKS ELECT);GetListCtrl().InsertColumn(0,"Name",LVCFMT_LEFT,30*tm.tmAveCharWidth, 0);GetListCtrl().InsertColumn(1,"Comment",LVCFMT_LEFT,70*tm.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 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中ListControl控件的使用以下未经说明,listctrl默认view 风格为report1. 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=/libr ary/en-us/wceshellui5/html/wce50lrflistviewstyles.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))因为你删除了第一列后,后面的列会依次向上移动。
mfc listctrl 选择单元格MFC(Microsoft Foundation Classes)是微软基于Windows操作系统提供的一套C++类库,用于开发图形用户界面(GUI)应用程序。
其中的ListCtrl是MFC中的一个列表控件,用于展示和编辑表格数据。
在ListCtrl中,选择单元格是一个常见的需求,本文将介绍MFC中如何选择单元格,并讨论一些相关的技术和问题。
ListCtrl提供了一种双击单元格进行编辑的机制,但没有直接支持选择单元格的功能。
为了实现选择单元格,我们可以借助一些其他的技术,在ListCtrl中模拟出选择单元格的效果。
一种常见的方法是通过自定义绘制来实现选择单元格的效果。
当鼠标点击ListCtrl时,我们可以获取到鼠标的位置,并根据位置计算出相应的行和列。
然后,我们可以通过对指定单元格的绘制进行特殊处理,比如修改背景颜色或者绘制边框,来表示该单元格被选中。
此外,我们还可以记录当前选中的单元格,以便后续的处理。
另一种方法是使用自定义的消息处理机制来实现选择单元格的功能。
当鼠标点击ListCtrl时,我们可以捕获鼠标消息,并通过对消息进行特殊处理来实现选择单元格的效果。
例如,我们可以在鼠标点击消息的处理函数中,获取到鼠标的位置,并根据位置计算出相应的行和列。
然后,我们可以通过修改ListCtrl的状态,将指定的单元格设置为选中状态。
这样,我们就可以在后续的操作中,根据ListCtrl的状态来判断是否选择了特定的单元格。
在实现选择单元格的过程中,还可能涉及到以下几个问题。
首先是如何处理鼠标事件。
由于ListCtrl是一个窗口部件,它可以接收鼠标事件。
我们可以在ListCtrl的父窗口中捕获和处理这些事件,以实现选择单元格的功能。
其次是如何获取到ListCtrl中的行和列的信息。
ListCtrl通常是以行为单位展示数据,我们可以通过调用ListCtrl的相关函数,如GetItemCount()和GetColumnCount()来获取到行数和列数。