VC MFC List Control控件的使用
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|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等。
mfcvslistboxcontrol控件用法 -回复
mfcvslistboxcontrol控件用法-回复MFC (Microsoft Foundation Class)是微软的一套C++类库,用于开发Windows操作系统上的应用程序。
在MFC中,提供了一系列的控件供开发者使用,其中包括了List Box控件。
List Box控件是用于显示一组选项的窗口控件,用户可以从中选择一个或多个选项。
它常用于列表选择界面,例如选择用户的偏好设置、选择文件、选择项目等。
在本文中,我们将详细介绍MFC中的List Box控件的用法,以帮助开发者了解如何创建、添加选项、获取选择结果等。
第一步:创建List Box控件在MFC应用程序中,可以通过对话框设计器来创建List Box控件。
打开对话框设计器后,可以在工具箱中找到List Box控件,将其拖放到对话框上。
第二步:设置List Box属性选中List Box控件后,可以进行一些属性的设置,如修改控件名称,调整位置和大小等。
可以通过双击控件来打开属性窗口,设置更多属性。
第三步:添加选项在List Box控件上右键单击,选择Properties可以打开属性窗口。
在属性窗口中,可以输入选项的名称,然后点击“添加”按钮将选项添加到List Box中。
可以重复该步骤来添加多个选项。
第四步:获取选择结果当用户选择了一个或多个选项后,可以通过代码来获取选择的结果。
在MFC中,可以通过CListBox类来操作List Box控件。
可以在对话框所属的类中声明一个CListBox类型的变量,并在DoDataExchange函数中进行绑定。
接下来,可以通过CListBox的相关函数来获取选择的结果。
例如,可以使用GetCurSel函数来获取当前选中项的索引值,或使用GetText函数来获取选中项的文本内容。
第五步:处理选中项的操作在有些场景下,可能需要对选中的项进行一些操作,例如删除、移动等。
MFC提供了一系列的函数来方便对List Box控件中的选项进行操作。
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()函数来释放资源。
另外,对于大量数据的操作,可以考虑使用虚拟列表实现数据的延迟加载,以提高性能和响应速度。
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中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(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 list control复选框的用法
mfc list control复选框的用法MFC(Microsoft Foundation Classes)提供了一种用于创建应用程序用户界面的C++类库。
MFC List Control是MFC库中的一个控件,用于显示和编辑多行列的文本或图标。
下面是MFC List Control复选框的用法:1. 创建MFC对话框应用程序或MFC窗口应用程序。
2. 打开资源编辑器,将一个List Control控件从工具栏拖放到对话框或窗口上。
3. 右键单击List Control控件,选择"属性",然后在属性窗口中设置List控件的样式为“Owner Draw Variable”。
4. 在类视图中双击对话框或窗口类,打开对应的.cpp文件。
5. 在对话框或窗口类的成员变量中添加一个List Control控件的变量,例如:CListCtrl m_listCtrl。
6. 在OnInitDialog或OnInitialUpdate函数中添加以下代码来设置List Control的列标题和样式:m_listCtrl.InsertColumn(0, _T("Column 1"), LVCFMT_LEFT, 100);m_listCtrl.InsertColumn(1, _T("Column 2"), LVCFMT_LEFT, 100);m_listCtrl.SetExtendedStyle(LVS_EX_CHECKBOXES);其中,InsertColumn函数用于插入列标题,第一个参数为列索引,第二个参数为列标题,第三个参数为列对齐方式,第四个参数为列宽度。
SetExtendedStyle 函数用于启用List Control的复选框功能。
7. 使用InsertItem函数添加列表项,使用SetItemText函数设置列表项的文本:int itemIndex = m_listCtrl.InsertItem(0, _T("Item 1"));m_listCtrl.SetItemText(itemIndex, 1, _T("Item 1 T ext"));其中,第一个参数为项索引,第二个参数为项文本。
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(函数获取指定项指定列的文本内容。
总结:。
Vc++控件ListControl用法总结
Vc++控件ListControl⽤法总结1.新建对话框MFC,在对话框上放⼀个ListCtrlID:IDC_PATHView:Report2.为ListCtrl添加变量右击->添加变量m_wndPath3.找到OnInitDialog()函数添加如下代码:// TODO: 在此添加额外的初始化代码m_wndPath.DeleteAllItems();//清空m_wndPath.InsertColumn(0,_T("项⽬"));//添加列m_wndPath.InsertColumn(1,_T("所在路径"));m_wndPath.SetColumnWidth(0, 150);//设置列宽m_wndPath.SetColumnWidth(1, 350);m_wndPath.SetRedraw(FALSE);//防⽌重绘int nIndex;//char|TCHAR项⽬属性->字符集:使⽤多字节字符集TCHAR Path[MAX_PATH+1];//TCHAR取代char MAX_PATH最长路径nIndex=m_wndPath.InsertItem( 0,_T("Windows⽬录") );if( nIndex < 0 ) return TRUE;GetWindowsDirectory(Path,MAX_PATH);//取得windows⽬录m_wndPath.SetItemText( nIndex, 1, Path );LPITEMIDLIST pidl;//桌⾯CSIDL_DESKTOPDIRECTORY//⽤来得到系统的某些特定⽂件夹的位置信息if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOPDIRECTORY,&pidl))) {if(SHGetPathFromIDList(pidl, Path))//功能是把项⽬标志符列表转换为⽂档系统路径{nIndex=m_wndPath.InsertItem( 0,_T("桌⾯"));//成功则返回0if( nIndex < 0 ){return TRUE;}m_wndPath.SetItemText( nIndex, 1, Path );}}m_wndPath.SetRedraw(TRUE);//显⽰return TRUE; // 除⾮将焦点设置到控件,否则返回 TRUE4.char被TCHAR取代,若要⽤则:项⽬属性->字符集:使⽤多字节字符集参考代码:m_wndPath.DeleteAllItems();m_wndPath.InsertColumn(0,"项⽬");m_wndPath.InsertColumn(1,"所在路径");m_wndPath.SetColumnWidth(0, 150);m_wndPath.SetColumnWidth(1, 350);m_wndPath.SetRedraw(FALSE);int nIndex;const int nFolder[]={ CSIDL_ALTSTARTUP,CSIDL_APPDATA,CSIDL_BITBUCKET,CSIDL_COMMON_ALTSTARTUP,CSIDL_COMMON_DESKTOPDIRECTORY,CSIDL_COMMON_FAVORITES,CSIDL_COMMON_PROGRAMS,CSIDL_COMMON_STARTMENU,CSIDL_COMMON_STARTUP,CSIDL_CONTROLS,CSIDL_COOKIES,CSIDL_DESKTOP,CSIDL_DESKTOPDIRECTORY,CSIDL_DRIVES,CSIDL_FAVORITES,CSIDL_FONTS,CSIDL_HISTORY,CSIDL_INTERNET,CSIDL_INTERNET_CACHE,CSIDL_NETHOOD,CSIDL_NETWORK,CSIDL_PERSONAL,CSIDL_PRINTERS,CSIDL_PRINTHOOD,CSIDL_PROGRAMS,CSIDL_RECENT,CSIDL_SENDTO,CSIDL_STARTMENU,CSIDL_STARTUP,CSIDL_TEMPLATES };const CString strFolderName[]={ "CSIDL_ALTSTARTUP","CSIDL_APPDATA","回收站","CSIDL_COMMON_ALTSTARTUP", "CSIDL_COMMON_DESKTOPDIRECTORY","CSIDL_COMMON_FAVORITES","CSIDL_COMMON_PROGRAMS","CSIDL_COMMON_STARTMENU","CSIDL_COMMON_STARTUP","控制⾯板","CSIDL_COOKIES","CSIDL_DESKTOP","桌⾯","我的电脑","收藏夹","字体","历史纪录","CSIDL_INTERNET","CSIDL_INTERNET_CACHE","⽹上邻居","CSIDL_NETWORK","我的⽂档","打印机","CSIDL_PRINTHOOD","程序组","最近打开的⽂档","发送","任务条启动菜单⽬录","启动⽬录","临时⽂档" };char Path[MAX_PATH+1];nIndex=m_wndPath.InsertItem( 0,"Windows⽬录" );if( nIndex < 0 ) return TRUE;GetWindowsDirectory(Path,MAX_PATH);m_wndPath.SetItemText( nIndex, 1, Path );nIndex=m_wndPath.InsertItem( 0,"System⽬录" );if( nIndex < 0 ) return TRUE;GetSystemDirectory(Path,MAX_PATH);m_wndPath.SetItemText( nIndex, 1, Path );int i,count=sizeof(nFolder)/sizeof(int);for(i=0;i<count;i++){LPITEMIDLIST pidl;LPMALLOC pShellMalloc;if(SUCCEEDED(SHGetMalloc(&pShellMalloc))){if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,nFolder[i],&pidl))){if(SHGetPathFromIDList(pidl, Path)){nIndex=m_wndPath.InsertItem( 0,strFolderName[i] );if( nIndex < 0 ){pShellMalloc->Free(pidl);pShellMalloc->Release();return TRUE;}m_wndPath.SetItemText( nIndex, 1, Path );}pShellMalloc->Free(pidl);}pShellMalloc->Release();}}m_wndPath.SetRedraw(TRUE);以上所述就是本⽂的全部内容了,希望⼤家能够喜欢。
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控件使用经验总结本文将从创建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使用(原创实用版)目录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)实现。
mfcvslistboxcontrol控件用法
mfcvslistboxcontrol控件用法一、MFC概述MFC是Microsoft Foundation Class的缩写,是微软公司开发的一个类库,它提供了一套封装Windows API的接口,方便开发者使用Windows相关的功能。
在Windows应用程序开发中,MFC被广泛使用。
ListBoxControl控件是MFC中的一个控件,用于显示一组项目供用户选择。
它通常用于创建对话框、菜单和工具栏等应用程序界面。
在MFC应用程序中,首先需要在对话框资源中添加一个ListBoxControl控件。
可以通过双击工具箱中的ListBox控件,或者在对话框设计器中添加控件来完成。
添加完ListBoxControl控件后,需要设置其属性,包括项目列表、选中项等。
可以通过编程方式动态设置ListBoxControl控件的属性,也可以在控件设计时通过属性窗口设置。
ListBoxControl控件支持多种事件,如选择事件、输入事件等。
可以通过响应这些事件,实现ListBoxControl控件的自定义功能。
例如,可以在用户选择列表项时,执行相应的操作。
可以通过编程方式获取ListBoxControl控件选中的项。
可以使用ListBox控件的GetCurSel()函数获取当前选中的项的索引,或者使用GetSelectedItem()函数获取选中的项的内容。
四、示例代码以下是一个简单的MFC应用程序,其中包含一个ListBoxControl 控件,用于显示一组项目供用户选择。
当用户选择一个项目时,程序会输出相应的信息。
```cpp// 引用MFC类库#include <afxwin.h>#include <afxext.h> // 包含ListBoxControl控件相关的类和函数// 对话框类定义class CMyDialog : public CDialogEx{public:CMyDialog() : m_listBoxControl(NULL) {} // 构造函数中初始化ListBoxControl控件~CMyDialog() {}// 响应ListBoxControl控件选择事件void OnListboxSelect() {int index = m_listBoxControl.GetCurSel(); // 获取选中的项的索引CString strItem =m_listBoxControl.GetSelectedItem(); // 获取选中的项的内容 // 在这里可以执行相应的操作,例如输出选中的项信息 AfxMessageBox(_T("您选择了:") + strItem);}protected:// ListBoxControl控件成员变量CListBoxCtrl m_listBoxControl; // ListBoxControl控件对应的成员变量};// 在对话框上添加ListBoxControl控件的成员变量CMyDialog g_dialog; // 对话框实例对象CListBoxCtrl* pListBox = &g_dialog.m_listBoxControl; // ListBoxControl控件的指针成员变量```在对话框的初始化函数中,需要将ListBoxControl控件的指针成员变量pListBox指向实际的ListBoxControl控件。
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)}。
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 控件是Visual Basic中的一种新的控件,可以把项目以列表的
形式显示出来,可以把相同的项目放在一起,它的提供了四种形式的列表:普通列表框、树形列表框、多项选择列表框和选项卡列表框。
1、普通列表框:此列表框用于显示项目列表,可以在列表中单独选
择一项,或者按住Shift或Ctrl键实现多项选择:
2、树形列表框:此列表框可以用来显示树形结构的数据,可以在节
点展开并选择里面的某一项:
3、多项选择列表框:可以把列表框选择模式由普通模式切换成多项
选择模式,即允许用户在列表框中选择多个项目:
4、选项卡列表框:列表框也可以以选项卡为基础,使用此类列表框
可以在每一个选项卡上显示不同的项目,用户可以点击其中任意一个选项
卡来选择项目:
使用List控件,需要在程序中设置列表中的项目,即:通过使用AddItem 方法向列表控件中添加项目,可以把要列出的所有条目添加到
List控件中。
添加内容的方法也很简单:在List控件的内部把输入的字
符串按照“项目1,项目2”的形式添加进去即可。
mfcvslistboxcontrol控件用法 -回复
mfcvslistboxcontrol控件用法-回复MFC VS ListBoxControl控件用法MFC(Microsoft Foundation Classes)是微软公司提供的一种编程框架,用于开发基于Windows操作系统的应用程序。
而ListBoxControl 控件是MFC中的一个常用控件,它用于显示和选择一系列文本或对象。
本文将分步介绍MFC中ListBoxControl控件的用法,帮助读者理解并学会如何使用这一控件。
第一步:准备开发环境和新建MFC项目要使用MFC中的ListBoxControl控件,首先需要准备开发环境。
安装Visual Studio等IDE和相应的MFC组件,以及了解C++编程和MFC 框架的基本知识。
接下来,新建一个MFC项目,选择对话框作为应用程序界面。
第二步:添加ListBox控件到对话框在新建的MFC项目中,双击打开对话框资源编辑器(Dialog Resource Editor)。
在资源视图中选择对话框,然后在工具箱(Toolbox)中找到ListBoxControl控件。
将ListBox控件拖拽到对话框上,调整控件的位置和大小。
第三步:修改ListBox控件的属性选中刚才添加的ListBox控件,右键点击属性(Properties)。
在属性栏中可以修改ListBox控件的各种属性,如边框样式、背景颜色、字体等。
根据需要进行设置,以符合应用程序的界面设计要求。
第四步:添加和删除列表项在MFC中,可以通过几种方法向ListBox控件中添加和删除列表项。
最简单的方法是在ListBox控件上右键点击,选择“编辑复制以创建”,然后输入新的列表项文本。
此外,还可以通过编程的方式来添加和删除列表项。
在MFC中,可以使用CListBox类提供的函数来操作ListBox控件。
在对话框类的头文件中,添加对ListBox控件的成员变量声明:cppCListBox m_listBox;在OnInitDialog()函数中,添加对ListBox控件的初始化和添加列表项的代码:cppm_listBox.SubclassDlgItem(IDC_LIST_BOX, this); 将ListBox控件和对话框关联m_listBox.AddString(_T("列表项1")); 添加列表项m_listBox.AddString(_T("列表项2"));如果需要删除列表项,可以使用DeleteString()函数,指定列表项的索引即可:cppm_listBox.DeleteString(0); 删除第一个列表项第五步:处理ListBox控件的事件ListBox控件有一些常用的事件,如选中列表项、双击列表项等。
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可以通过自带的“排序”功能,对列表中的数据进行排序。
ListCtrl控件使用方法和经验大全
ListCtrl控件使⽤⽅法和经验⼤全本⽂全⾯介绍了如何编辑List Control⾥⾯的任何⼦项介绍内容有点多,译出来也没多⼤意思,⼤致就是说⼀个VC程序员会常常碰到List Control,List Control有很多⽅法可以显⽰数据,可List Control⾥默认的没有编辑功能,故在此智短⽂⾥,那个⽜叉的⼈教你怎么实现这个功能。
这篇⽂章是基于VC MFC 滴,⽤别的功具的娃们当然也可以看看,呵呵,不多说,先实现图上ok exit两个按钮:void CMultipleColumnsDlg::OK(){CDialog::EndDialog (0); // Add this line}void CMultipleColumnsDlg::OnExit(){CDialog::EndDialog (0); // Add this line}接下来添加⼀个ListCtrl控件,记得把ListCtrl的style设置成Report,这个是为了实现我们要多⾏显⽰的功能然后增加⼀个⽂本框Edit Box去掉它的Border style属性增加⼀个InsertItems() 成员函数,⽤来写⼊ListControl的显⽰内容void CMultipleColumnsDlg::InsertItems(){HWND hWnd = ::GetDlgItem(m_hWnd, IDC_LIST1);// Set the LVCOLUMN structure with the required// column informationLVCOLUMN list;list.mask = LVCF_TEXT |LVCF_WIDTH|LVCF_FMT |LVCF_SUBITEM;list.fmt = LVCFMT_LEFT;list.cx = 50;list.pszText = "S.No";list.iSubItem = 0;//Inserts the column::SendMessage(hWnd,LVM_INSERTCOLUMN, (WPARAM)0,(WPARAM)&list);list.cx = 100;list.pszText = "Name";list.iSubItem = 1;::SendMessage(hWnd ,LVM_INSERTCOLUMN, (WPARAM)1,(WPARAM)&list);list.cx = 100;list.pszText = "Address";list.iSubItem = 2;::SendMessage(hWnd ,LVM_INSERTCOLUMN, (WPARAM)1,(WPARAM)&list);list.cx = 100;list.pszText = "Country";list.iSubItem = 2;::SendMessage(hWnd ,LVM_INSERTCOLUMN, (WPARAM)1,(WPARAM)&list);// Inserts first Row with four columns .SetCell(hWnd,"1",0,0);SetCell(hWnd,"Prabhakar",0,1);SetCell(hWnd,"Hyderabad",0,2);SetCell(hWnd,"India",0,3);// Inserts second Row with four columns .SetCell(hWnd,"2",1,0);SetCell(hWnd,"Uday",1,1);SetCell(hWnd,"Chennai",1,2);SetCell(hWnd,"India",1,3);}⾃定义的SetCell( ) 函数,⽤来实现插⼊数据⽤的void CMultipleColumnsDlg::SetCell(HWND hWnd1, CString value, int nRow, int nCol){TCHAR szString [256];wsprintf(szString,value ,0);//Fill the LVITEM structure with the//values given as parameters.LVITEM lvItem;lvItem.mask = LVIF_TEXT;lvItem.iItem = nRow;lvItem.pszText = szString;lvItem.iSubItem = nCol;if(nCol >0)//set the value of listItem::SendMessage(hWnd1,LVM_SETITEM,(WPARAM)0,(WPARAM)&lvItem);else//Insert the value into ListListView_InsertItem(hWnd1,&lvItem);}//通过⾏和列得到项⽬⾥⾯的数据CString CMultipleColumnsDlg::GetItemText(HWND hWnd, int nItem, int nSubItem) const{LVITEM lvi;memset(&lvi, 0, sizeof(LVITEM));lvi.iSubItem = nSubItem;CString str;int nLen = 128;int nRes;do{nLen *= 2;/doc/5af6d6d2195f312b3169a5eb.html hTextMax = nLen;lvi.pszText = str.GetBufferSetLength(nLen);nRes = (int)::SendMessage(hWnd,LVM_GETITEMTEXT, (WPARAM)nItem,(LPARAM)&lvi);str.ReleaseBuffer();return str;}//为窗⼝类添加两个成员变量:int nItem, nSubItem;⽤Class wizard 添加NM_CLICK 响应,当⽤户点击任何位置时,就会对应出现⼀个Edit Box,并可以修改数据void CMultipleColumnsDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult){Invalidate();HWND hWnd1 = ::GetDlgItem (m_hWnd,IDC_LIST1); LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE) pNMHDR; RECT rect;//get the row numbernItem = temp->iItem;//get the column numbernSubItem = temp->iSubItem;if(nSubItem == 0 || nSubItem == -1 || nItem == -1)return ;//Retrieve the text of the selected subItem//from the listCString str = GetItemText(hWnd1,nItem ,nSubItem);RECT rect1,rect2;// this macro is used to retrieve the Rectanle// of the selected SubItemListView_GetSubItemRect(hWnd1,temp->iItem,temp->iSubItem,LVIR_BOUNDS,&rect);//Get the Rectange of the listControl::GetWindowRect(temp->hdr.hwndFrom,&rect1);//Get the Rectange of the Dialog::GetWindowRect(m_hWnd,&rect2);int x=rect1.left-rect2.left;int y=rect1.top-rect2.top;if(nItem != -1)::SetWindowPos(::GetDlgItem(m_hWnd,IDC_EDIT1),HWND_TOP,rect.left+x,rect.top+4,rect.right-rect.left - 3,rect.bottom-rect.top -1,NULL);::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_SHOW); ::SetFocus(::GetDlgItem(m_hWnd,IDC_EDIT1));//Draw a Rectangle around the SubItem::Rectangle(::GetDC(temp->hdr.hwndFrom),rect.left,rect.top-1,rect.right,rect.bottom);//Set the listItem text in the EditBox::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT1),str);*pResult = 0;}To handle the ENTER key we need to write the virtual function OnOk(响应ENTER 键)afx_msg void OnOK();In MultipleColumnsDlg.cpp write the following code.// This function handles the ENTER keyvoid CMultipleColumnsDlg::OnOK(){CWnd* pwndCtrl = GetFocus();// get the control ID which is// presently having the focusint ctrl_ID = pwndCtrl->GetDlgCtrlID();CString str;switch (ctrl_ID){ //if the control is the EditBoxcase IDC_EDIT1://get the text from the EditBoxGetDlgItemText(IDC_EDIT1,str);//set the value in the listContorl with the//specified Item & SubItem valuesSetCell(::GetDlgItem (m_hWnd,IDC_LIST1),str,nItem,nSubItem);::SendDlgItemMessage(m_hWnd,IDC_EDIT1,WM_KILLFOCUS,0,0);::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_HIDE);break;default:break;}}最后⼀步在OnInitDialog 中设置List Control的样式ListView_SetExtendedListViewStyle(::GetDlgItem(m_hWnd,IDC_LIST1),LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES);InsertItems();::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_HIDE);IntroductionAlmost every one of us who are programming in VC++ , will come across the List control. There are many cases where there is a need to represent data in List Control in multiple columns. By default it is not possible to modify the data in the List control itself. In this small article I am putting a simple way to edit any value in any column in a Report style List control. The logic here is simple, whenever user clicks on an sub-item which he wants to modify at that place I am displaying a edit box and allowing to modify the value. Once modified and by clicking the ENTER key, the updated value is set in the List control. Here I am assuming the user is familiar with VC++ and using Class WizardImplementation steps:/doc/5af6d6d2195f312b3169a5eb.html ing MFC AppWizard, create a Dialog Based application. Give theapplication nam e as MultipleColumns. By default the wizard adds OK andCancel buttons to the Dialog, Remove these two butt ons.2.Now Add a List-Control and in properties change the style to Report, thisstyle is necessary if we want m ultiple columns3.Add two buttons to the Dialog and name them as OK and Exit4.Add one Edit box and in the properties remove the Border style/doc/5af6d6d2195f312b3169a5eb.html ing the Class Wizard add the m essage handlers for the OK and ExitButtons. Add the following code to those functionsCollapse Copy Codevoid CMultipleColumnsDlg::OK(){CDialog::EndDialog (0); // Add this line}Collapse Copy Codevoid CMultipleColumnsDlg::OnExit(){CDialog::EndDialog (0); // Add this line}6.Add a function called InsertItems() to the CMulipleColumnsDlg class.Collapse Copy Codevoid InsertItems();In the function handler add the following codeCollapse Copy Code// This function inserts the default values// into the listControlvoid CMultipleColumnsDlg::InsertItems(){HWND hWnd = ::GetDlgItem(m_hWnd, IDC_LIST1); // Set the LVCOLUMN structure with the required// column informationLVCOLUMN list;list.mask = LVCF_TEXT |LVCF_WIDTH|LVCF_FMT |LVCF_SUBITEM;list.fmt = LVCFMT_LEFT;list.cx = 50;list.pszText = "S.No";list.iSubItem = 0;//Inserts the column::SendMessage(hWnd,LVM_INSERTCOLUMN, (WPARAM)0,(WPARAM)&list);list.cx = 100;list.pszText = "Name";list.iSubItem = 1;::SendMessage(hWnd ,LVM_INSERTCOLUMN, (WPARAM)1,(WPARAM)&list);list.cx = 100;list.pszText = "Address";list.iSubItem = 2;::SendMessage(hWnd ,LVM_INSERTCOLUMN, (WPARAM)1,(WPARAM)&list);list.cx = 100;list.pszText = "Country";list.iSubItem = 2;::SendMessage(hWnd ,LVM_INSERTCOLUMN, (WPARAM)1,(WPARAM)&list);// Inserts first Row with four columns .SetCell(hWnd,"1",0,0);SetCell(hWnd,"Prabhakar",0,1);SetCell(hWnd,"Hyderabad",0,2);SetCell(hWnd,"India",0,3);// Inserts second Row with four columns .SetCell(hWnd,"2",1,0);SetCell(hWnd,"Uday",1,1);SetCell(hWnd,"Chennai",1,2);SetCell(hWnd,"India",1,3);// Inserts third Row with four columns .SetCell(hWnd,"3",2,0);SetCell(hWnd,"Saradhi",2,1);SetCell(hWnd,"Bangolore",2,2);SetCell(hWnd,"India",2,3);// Inserts fourth Row with four columns .SetCell(hWnd,"4",3,0);SetCell(hWnd,"Surya",3,1);SetCell(hWnd,"Calcutta",3,2);SetCell(hWnd,"India",3,3);}7.Add another function called SetCell( ) to the CMultipleColumnsDlg classCollapse Copy Codevoid SetCell(HWND hWnd1, CString value, int nRow, int nCol);In the function handler add the following codeCollapse Copy Code// This function set the text in the specified// SubItem depending on the Row and Column valuesvoid CMultipleColumnsDlg::SetCell(HWND hWnd1,CString value, int nRow, int nCol){TCHAR szString [256];wsprintf(szString,value ,0);//Fill the LVITEM structure with the//values given as parameters.LVITEM lvItem;lvItem.mask = LVIF_TEXT;lvItem.iItem = nRow;lvItem.pszText = szString;lvItem.iSubItem = nCol;if(nCol >0)//set the value of listItem::SendMessage(hWnd1,LVM_SETITEM,(WPARAM)0,(WPARAM)&lvItem);else//Insert the value into ListListView_InsertItem(hWnd1,&lvItem);}8.Add one more function called GetItemText() to the sam e ClassCollapse Copy CodeCString GetItemText(HWND hWnd, int nItem, int nSubItem) const;Inside the function add the following codeCollapse Copy Code//this function will returns the item//text depending on the item and SubItem IndexCString CMultipleColumnsDlg::GetItemText(HWND hWnd, int nItem, int nSubItem) const{LVITEM lvi;memset(&lvi, 0, sizeof(LVITEM));lvi.iSubItem = nSubItem;CString str;int nLen = 128;int nRes;do{nLen *= 2;/doc/5af6d6d2195f312b3169a5eb.html hTextMax = nLen; lvi.pszText = str.GetBufferSetLength(nLen);nRes = (int)::SendMessage(hWnd,LVM_GETITEMTEXT, (WPARAM)nItem,(LPARAM)&lvi);str.ReleaseBuffer();return str;}9.Also add two m ember variables to the CMultipleColumnsDlg class which are of type intCollapse Copy Codeint nItem, nSubItem;10.From the Class wizard add NM_CLICK notification to the List control. Inside the function handler write the following codeCollapse Copy Code//This function Displays an EditBox at the position//where user clicks on a particular SubItem with//Rectangle are equal to the SubItem, thus allows to//modify the valuevoid CMultipleColumnsDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult){Invalidate();HWND hWnd1 = ::GetDlgItem (m_hWnd,IDC_LIST1); LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE) pNMHDR;RECT rect;//get the row numbernItem = temp->iItem;//get the column numbernSubItem = temp->iSubItem;if(nSubItem == 0 || nSubItem == -1 || nItem == -1)return ;//Retrieve the text of the selected subItem//from the listCString str = GetItemText(hWnd1,nItem ,nSubItem);RECT rect1,rect2;// this macro is used to retrieve the Rectanle// of the selected SubItemListView_GetSubItemRect(hWnd1,temp->iItem,temp->iSubItem,LVIR_BOUNDS,&rect);//Get the Rectange of the listControl::GetWindowRect(temp->hdr.hwndFrom,&rect1);//Get the Rectange of the Dialog::GetWindowRect(m_hWnd,&rect2);int x=rect1.left-rect2.left;int y=rect1.top-rect2.top;if(nItem != -1)::SetWindowPos(::GetDlgItem(m_hWnd,IDC_EDIT1),HWND_TOP,rect.left+x,rect.top+4,rect.right-rect.left - 3,rect.bottom-rect.top -1,NULL);::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_SHOW);::SetFocus(::GetDlgItem(m_hWnd,IDC_EDIT1));//Draw a Rectangle around the SubItem::Rectangle(::GetDC(temp->hdr.hwndFrom),rect.left,rect.top-1,rect.right,rect.bottom);//Set the listItem text in the EditBox::SetWindowText(::GetDlgItem(m_hWnd,IDC_EDIT1),str);*pResult = 0;}11.To handle the ENTER key we need to write the virtual function OnOk in the MultipleColumnsDlg.h, so add the following as protected m ember Collapse Copy Codeafx_msg void OnOK();In MultipleColumnsDlg.cpp write the following code.Collapse Copy Code// This function handles the ENTER keyvoid CMultipleColumnsDlg::OnOK(){CWnd* pwndCtrl = GetFocus();// get the control ID which is// presently having the focusint ctrl_ID = pwndCtrl->GetDlgCtrlID();CString str;switch (ctrl_ID){ //if the control is the EditBoxcase IDC_EDIT1://get the text from the EditBoxGetDlgItemText(IDC_EDIT1,str);//set the value in the listContorl with the//specified Item & SubItem valuesSetCell(::GetDlgItem (m_hWnd,IDC_LIST1),str,nItem,nSubItem);::SendDlgItemMessage(m_hWnd,IDC_EDIT1,WM_KILLFOCUS,0,0);::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_HIDE);break;default:break;}}12.The last step in the im plementation is add the following code in side the OnInitDialog functionCollapse Copy Code//Set the style to listControlListView_SetExtendedListViewStyle(::GetDlgItem(m_hWnd,IDC_LIST1),LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES);InsertItems();::ShowWindow(::GetDlgItem(m_hWnd,IDC_EDIT1),SW_HIDE);VC/MFC之ListCtrl控件使⽤经验总结以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以“ListView_”开头的⼀些宏。
VCMFCListControl控件的使用
个人收集整理-ZQ
有些程序中需要刷新显示数据,如果直接利用上述方法,则会将当前显示数据追加在前一次数据行地后面,造成随着刷新次数地增加数据行线性增加地问题.解决方法是每次在插入数据之前删除已有数据,使用下面语句:
();
.如何设置控件地完全行( )选项.
这个控件有个地方常常很恼人,那就是在报告视图中选中一行时,它只加亮最左边地一个栏目.解决方法:向控件发送一个消息.
(, , );
这条语句可以加在()函数,也可以加在负责插入数据地代码部分.资料个人收集整理,勿做商业用途
1 / 1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于对话框的MFC程序中添加List Control控件的步骤。
1.新加ListControl 控件,属性中的style属性页下的View选择Report。
并设置其对应的控制变量如:m_ListCtrl。
2.初始化,即设置列。
m_ListCtrl.InsertColumn(0,"参数名"); //插入列
m_ListCtrl.InsertColumn(1,"参数值");
m_ListCtrl.InsertColumn(2,"备注");
CRect rect3;
m_ListCtrl.GetClientRect(rect3); //获得当前客户区信息
m_ListCtrl.SetColumnWidth(0,rect3.Width()/4); //设置列的宽度。
m_ListCtrl.SetColumnWidth(1,rect3.Width()*2/4);
m_ListCtrl.SetColumnWidth(2,rect3.Width()/4);
这部分初始化操作,最好放在对话框类的OnInitDialog()函数里,自动初始化。
3.插入数据
m_ListCtrl.InsertItem(0,"参数1"); //插入第一个数据,即第0条数据。
先插入,然后在修改其他的信息。
m_ListCtrl.SetItemText(0,1,"参数1值"); //修改第0条数据的其他信息。
m_ListCtrl.SetItemText(0,2,"无");
SetItemText()函数负责向列表里添加字符串。
当需要添加的是非字符串的数据类型时,需要先转换为字符串类型再用SetItemText()完成添加。
假设所需要添加的是double类型的浮点数。
double dbl=1.2345678;
char str[16]={0};
sprintf(str, "%lf", dbl);
m_ListCtrl.InsertItem(0,"参数1");
m_ListCtrl.SetItemText(0,1,str); //等价于
m_ListCtrl.SetItemText(0,1,“1.2345678”);
需要注意的是用sprintf族函数时,char数组一定要足够大,否则程序运行时会出现错误提示“ Stack around the variable 'str' was corrupted ”,解决方法是把数组改大一些。
4.删除所有数据。
有些程序中需要刷新显示数据,如果直接利用上述方法,则会将当前显示数据追加在前一次数据行的后面,造成随着刷新次数的增加数据行线性增加的问题。
解决方法是每次在插入数据之前删除已有数据,使用下面语句:
m_ListCtrl.DeleteAllItems();
5.如何设置ListView控件的完全行(Full Row)选项。
这个控件有个地方常常很恼人,那就是在报告视图中选中一行时,它只加亮最左边的一个栏目。
解决方法:向ListView控件发送一个
VM_SETEXTENDEDLISTVIEWSTYLE消息。
::SendMessage(m_ListCtrl.m_hWnd,
LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT,
LVS_EX_FULLROWSELECT);
这条语句可以加在OnInitDialog()函数,也可以加在负责插入数据的代码部分。