ListControl使用范例
使用ListControl控件显示数据表
使用ListControl控件显示数据表一、在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_SHOWSELALWA YS|LVS_SORTASCENDING);//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_SORTASCENDING);GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTY LE,0,LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECK BOXES|LVS_EX_TRACKSELECT);GetListCtrl().InsertColumn(0,"Name",LVCFMT_LEFT,30*tm.tm AveCharWidth,0);GetListCtrl().InsertColumn(1,"Comment",LVCFMT_LEFT,70*t m.tmAveCharWidth,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控件的使用及实时显示系统时间的方法 .(一) List Control控件的使用新近开发了一个摄像机标定的MFC 程序,标定完成后期望将求得的摄像机参数直观地显示到应用程序的界面上来。
起初的方案是为每一个参数都建立一个Edit 控件,并对每一个控件设定一个控制变量,将该变量与相应参数对应起来。
这样做是可行的,但当参数众多时比较繁琐。
鉴于此,决定在程序中使用List Control控件,将参数以List 的形式呈现在界面上。
以下是我在基于对话框的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 条数据。
先插入,然后在修改其他的信息。
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控件用法
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
int nRow = m_list.InsertItem(0, “11”);//插入行
m_list.SetItemText(nRow, 1, “jacky”);//设置数据
6. 得到listctrl中所有行的checkbox的状态
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
CString str;
for(int i=0; i<m_list.GetItemCount(); i++)
{
lStyle |= LVS_REPORT; //设置style
SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//设置style
DWORD dwStyle = m_list.GetExtendedStyle();
m_ListCtrl.InsertColumn(2,_T("项目类别"));
其中LVCFMT_IMAGE表示可以在第一列加入图标。如果不要图标可以删去。
然后设置列宽:
for(j=0;j<3;j++)
m_ListCtrl.SetColumnWidth(j ,100);
以下为列表加入图标,如果不需要图标,可以跳过这一步。注意只在第一次加入,如果多次加入会出错!
改为
SetImageList(&m_ImageList,LVSIL_NORMAL);
插入行时只用
InsertItem(i,mainSet.m_FileName,i);
list control控件 用法
list control控件用法
List 控件是Visual Basic中的一种新的控件,可以把项目以列表的
形式显示出来,可以把相同的项目放在一起,它的提供了四种形式的列表:普通列表框、树形列表框、多项选择列表框和选项卡列表框。
1、普通列表框:此列表框用于显示项目列表,可以在列表中单独选
择一项,或者按住Shift或Ctrl键实现多项选择:
2、树形列表框:此列表框可以用来显示树形结构的数据,可以在节
点展开并选择里面的某一项:
3、多项选择列表框:可以把列表框选择模式由普通模式切换成多项
选择模式,即允许用户在列表框中选择多个项目:
4、选项卡列表框:列表框也可以以选项卡为基础,使用此类列表框
可以在每一个选项卡上显示不同的项目,用户可以点击其中任意一个选项
卡来选择项目:
使用List控件,需要在程序中设置列表中的项目,即:通过使用AddItem 方法向列表控件中添加项目,可以把要列出的所有条目添加到
List控件中。
添加内容的方法也很简单:在List控件的内部把输入的字
符串按照“项目1,项目2”的形式添加进去即可。
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"));其中,第一个参数为项索引,第二个参数为项文本。
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中的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可以通过自带的“排序”功能,对列表中的数据进行排序。
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);以上所述就是本⽂的全部内容了,希望⼤家能够喜欢。
往listcontrol中添加文本内容
创建图形列表并和CListCtrl关联:m_image_list.Create(IDB_CALLER2, 16, 10, RGB(192,192, 192));m_image_list.SetBkColor( GetSysColor( COLOR_WINDOW ) );m_caller_list.SetImageList( &m_image_list, LVSIL_SMALL);为报表添加4列:char *szColumn[]={ "昵称", "IP地址", "登陆时间", "状态"};int widths[]={100,98,70,55};LV_COLUMN lvc;lvc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM; lvc.fmt=LVCFMT_LEFT;for(int i=0;i <4;i++) {//插入各列lvc.pszText=szColumn[i];lvc.cx=widths[i];lvc.iSubItem=i;m_caller_list.InsertColumn(i,&lvc);}为报表添加两项,以附加方式添加:char* data[4];data[0]= "所有人";data[1]= "0.0.0.0 ";data[3]= "在线";data[2]=new char;CTime now=CTime::GetCurrentTime();CString temp = now.Format( "%H:%M:%S ");data[2]=temp.GetBuffer(1);LV_ITEM lvi;lvi.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;lvi.iSubItem=0;lvi.pszText=(char *)data[0];lvi.iImage = 0;lvi.iItem=0;m_caller_list.InsertItem(&lvi);for (int j=0;j <4;j++) m_caller_list.SetItemText(count,j,data[j]);count++;lvi.iImage = 1;lvi.iItem=count;m_caller_list.InsertItem(&lvi);data[0]= "cherami ";data[1]= "127.0.0.1 ";for (int n=0;n <4;n++) m_caller_list.SetItemText(count,n,data[n]); count++;设置报表的样式选中一整行:m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT);绘制表格:m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_GRIDLINES);带复选框:m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_CHECKBOXES);自动切换:m_list_ctrl.SetExtendedStyle(m_list_ctrl.GetExtendedStyle()|LVS_EX_TRACKSELECT);选定一行:设置CListCtrl的Show selection always选项SetItemState (iIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED)选中一个或多个项目时,会发送LVN_ITEMCHANGED消息,可以使用GetSelectedCount()方法得到被选定的项的数目。
listctrl finditem
listctrl finditem摘要:1.介绍ListCtrl 控件2.ListCtrl 的FindItem 功能3.使用ListCtrl FindItem 的实例正文:一、介绍ListCtrl 控件ListCtrl(列表控制)是Python 中的一种控件,常用于实现列表或者表格的展示和编辑。
ListCtrl 具有很多实用的功能,其中之一就是FindItem。
二、ListCtrl 的FindItem 功能FindItem 是ListCtrl 的一个方法,它可以在列表或表格中查找指定的文本,并返回该文本所在的行索引。
这个功能对于在列表或表格中查找特定数据时非常有用。
三、使用ListCtrl FindItem 的实例下面是一个使用ListCtrl FindItem 的实例:```pythonimport wxclass MyFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self, None, title="ListCtrl FindItem Example")self.list_ctrl = wx.ListCtrl(self, style=wx.LC_REPORT)self.list_ctrl.InsertColumn(0, "ID")self.list_ctrl.InsertColumn(1, "Name")self.list_ctrl.InsertColumn(2, "Age")self.list_ctrl.InsertItem(0, 1, "张三")self.list_ctrl.InsertItem(1, 2, "李四")self.list_ctrl.InsertItem(2, 3, "王五")self.button = wx.Button(self, label="FindItem")self.button.Bind(wx.EVT_BUTTON, self.on_button)yout = wx.BoxSizer(wx.VERTICAL)yout.Add(self.list_ctrl, 0, wx.ALL, 5)yout.Add(self.button, 0, wx.ALL, 5)self.SetSizer(yout)self.SetSize((300, 200))self.SetPosition((100, 100))self.Show()def on_button(self, e):item = self.list_ctrl.FindItem(0, "李四")if item!= -1:print("找到行索引:", item)else:print("未找到")if __name__ == "__main__":app = wx.App()frame = MyFrame()app.MainLoop()```在这个实例中,我们创建了一个ListCtrl 控件,并向其中插入了一些数据。
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_”开头的⼀些宏。
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)实现。
listcontroller setitemtext
listcontroller setitemtext如何使用[ListController setItemText]函数来设置列表项的文本。
[ListController setItemText]函数是一种用于在列表中设置列表项文本的方法。
它允许开发者通过编程方式修改列表项的显示文本,从而实现动态更新列表的功能。
在这篇文章中,我们将一步一步地回答如何使用[ListController setItemText]函数来设置列表项的文本。
第一步:了解[ListController setItemText]函数的基本用法[ListController setItemText]函数是一种可以在特定位置设置列表项的显示文本的函数。
它的语法如下:pythonlistcontroller.setItemText(index, text)其中,`listcontroller`代表列表控制器的名称或引用,`index`代表要设置文本的列表项的索引,`text`代表要设置的文本内容。
第二步:为列表项设置初始文本在使用[ListController setItemText]函数之前,我们需要确保列表项已经存在且具备初始文本。
你可以通过初始化列表时给定初始文本来实现这一点。
以下是一个简单的初始化列表的例子:pythonlistcontroller = ListController() 初始化列表控制器listcontroller.addItem("Item 1") 添加列表项1listcontroller.addItem("Item 2") 添加列表项2listcontroller.addItem("Item 3") 添加列表项3在这个例子中,我们使用`ListController`类来创建一个新的列表控制器,并添加了三个初始文本为"Item 1"、"Item 2"和"Item 3"的列表项。
ListControl使用范例
MFC如何使用List Control以下未经说明,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)m_list.SetExtendedStyle(dwStyle); //设置扩展风格--------------------------------------------------------------------------------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 {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 {if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED ){str.Format(_T("选中了第%d行"), i);nbsp; 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))因为你删除了第一列后,后面的列会依次向上移动。
VC LIST CONTROL
|
4)调整列宽
插入的新的列的时候 ,可以调整列宽 方法如下 CRect rect; m_list.GetWindowRect(&rect); m_list.InsertColumn(0, _T("NAME"), LVCFMT_LEFT, rect.Width()*0.6);
看到一篇 不错的转来 上面的是我自己经过程序验证的
VC 中 ListCtrl 经验总结【转载】 收藏 ListCtrl 在工作中,常常用到,也常常看到大家发帖问怎么用这个控件,故总结了一下自己的使用经验,以 供参考使用。 先注明一下,这里,我们用 m_listctrl 来表示一个 CListCtrl 的类对象,然后这里我们的 ListCtrl 都是 report 形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟 report 是大众话的使用。其次,我们这里用条 款一,条款二来描述第一点,第二点,这个是参照《Effective C++》的叫法,俺觉得这么叫比较 COOL :) 条款一:设置 ListCtrl 的风格 在 CSDN 上常常看到有人问怎么设置风格的,他们 ListCtrl 的样子是一个列表,有横条和竖条分界线,然 后选中一行,要整一行都选中,而不是只有某一列被选中,等等,这里给一个比较全面的设置方法。 //获得原有风格 DWORD dwStyle = ::GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE); dwStyle &= ~(LVS_TYPEMASK); dwStyle &= ~(LVS_EDITLABELS); //设置新风格 SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE,dwStyle, |LVS_REPORT | LVS_NOLABELWRAP | LVS_SHOWSELALWAYS); //设置扩展风格 DWORD styles = LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_CHECKBOXES; ListView_SetExtendedListViewStyleEx(m_listctrl.m_hWnd, styles, styles ); 其中 LVS_EX_FULLROWSELECT 就是前面说得整行选中 LVS_EX_GRIDLINES 网格线(只适用与 report 风格的 listctrl) LVS_EX_CHECKBOXES 前面加个 checkbox pListCtrl->SetExtendedStyle( m_listctrl.GetExtendedStyle() | LVS_EX_SUBITEMIMAGES); 这也是一个很重要的属性,这样的话,可以在列表中加 ICON,记得 windows 的任务管理器吗,你想做得 那样,这个属性也要加哦,这个我以后会讲的~ 条款二:加入列头 这是一个比较实质的东西,给列表框分列,然后加上列头,代码说话,来了
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MFC如何使用List Control以下未经说明,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)m_list.SetExtendedStyle(dwStyle); //设置扩展风格--------------------------------------------------------------------------------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 {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 {if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED ){str.Format(_T("选中了第%d行"), i);nbsp; 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))因为你删除了第一列后,后面的列会依次向上移动。
方法二: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;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) );LVHITTESTINFO lvinfo;nbsp; 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 );}}--------------------------------------------------------------------------------16. item切换焦点时(包括用键盘和鼠标切换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 &&{sTemp.Format("%d got selected",pNMListView->iItem);}*pResult = 0;}--------------------------------------------------------------------------------17. 得到另一个进程里的listctrl控件的item内容/threads/int64_memsteal.asp--------------------------------------------------------------------------------18. 选中listview中的itemQ131284: How To Select a Listview Item Programmatically/kb/131284/en-us--------------------------------------------------------------------------------19. 如何在CListView中使用CListCtrl的派生类/cpp/controls/listview/introduction/article.php/c9 19/--------------------------------------------------------------------------------20. listctrl的subitem添加图标m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);m_list.SetItem(..); //具体参数请参考msdn--------------------------------------------------------------------------------21. 在CListCtrl显示文件,并根据文件类型来显示图标网上找到的代码,shareBOOL CTest6Dlg::OnInitDialog(){CDialog::OnInitDialog();HIMAGELIST himlSmall;HIMAGELIST himlLarge;SHFILEINFO sfi;char cSysDir[MAX_PATH];String 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,::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;}--------------------------------------------------------------------------------22. listctrl内容进行大数据量更新时,避免闪烁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--------------------------------------------------------------------------------23. listctrl排序Q250614:How To Sort Items in a CListCtrl in Report View /kb/250614/en-us--------------------------------------------------------------------------------24. 在listctrl中选中某个item时动态改变其icon或bitmapQ141834: How to change the icon or the bitmap of a CListCtrl item in Visual C++/kb/141834/en-us--------------------------------------------------------------------------------25. 在添加item后,再InsertColumn()后导致整列数据移动的问题Q151897: CListCtrl::InsertColumn() Causes Column Data to Shift/kb/151897/en-us--------------------------------------------------------------------------------26. 关于listctrl第一列始终居左的问题解决办法:把第一列当一个虚列,从第二列开始插入列及数据,最后删除第一列。