首页 MFC中ListCtrl的用法

MFC中ListCtrl的用法

举报
开通vip

MFC中ListCtrl的用法MFC中的列表视图控件CListCtrl 2010-04-21 10:06 一、在Windows应用程序中添加ListControl控件的几种方法 1、在对话框中添加控件: 创建对话框应用程序,在资源视图中添加对话框。如下图所示,在控件工具条中选择ListControl控件添加到对话框中,并调整控件尺寸。在ListControl控件的属性页中设置控件样式(Styles)和扩展样式等。为了显示详细数据信息,可以设置控件的显示风格为报表视图(Report)。 为了在对话框中使用控件,需要在ClassWiza...

MFC中ListCtrl的用法
MFC中的列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 视图控件CListCtrl 2010-04-21 10:06 一、在Windows应用程序中添加ListControl控件的几种 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 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_SORTASCENDING);//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_SORTASCENDING);GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0, LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES|LVS_EX_TRACKSELECT);GetListCtrl().InsertColumn(0,"Name",LVCFMT_LEFT,30*tm.tmAveCharWidth,0);GetListCtrl().InsertColumn(1,"Comment",LVCFMT_LEFT,70*tm.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控件中有以下消息( 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 )可以发送:NM_CLICK、NM_DBLCLK、NM_RCLICK、LVN_COLUMNCLICK、HDN_ITEMCLICK等。 其中HDN_ITEMCLICK是List Control的子控件ListCtrl发给它的Parent(CListCtrl)的;LVN_COLUMNCLICK是HeaderCtrl发给它的Parent的。所以在Dialog里面,试图通过ClassWizard产生的ON_NOTIFY宏:ON_NOTIFY(HDN_ITEMCLICK, IDC_LIST_CTRL,OnItemClick),来接收HDN_ITEMCLICK消息是无法成功的。要解决这个问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 ,可以从CListCtrl派生一个新的类,并在CListCtrl派生类中处理HDN_ITEMCLICK消息。注意消息映射的时候,Header的控件ID是0,类似如下消息映射宏代码:ON_NOTIFY(HDN_ITEMCLICK, 0, OnItemClick)另外,可以使用NM_CLICK、NM_RCLICK等消息,以NM打头的消息是可以在Dialog里处理的。 2、关于ListControl控件的行选择: 要在控件中选择行,需要设置控件的扩展属性LVS_EX_FULLROWSELECT。右键或左键都可以选择行,而且,List Control控件默认可以一次选择(使用Ctrl键)多行,被选择的行默认以蓝色背景显示。 3、为ListControl控件添加NM_CLICK消息: 以前面创建的对话框应用程序为例,在ClassWizard中选择List Control控件,在对话框类中添加NM_CLICK消息处理函数。如下图所示: 系统自动添加的消息映射与消息处理函数代码如下: // ListDialogDlg.h : header file protected: ...... afx_msg void OnClickListCtrl(NMHDR* pNMHDR, LRESULT* pResult); ...... // ListDialogDlg.cpp : implementation file BEGIN_MESSAGE_MAP(CListDialogDlg, CDialog)//{{AFX_MSG_MAP(CListDialogDlg) ......ON_NOTIFY(NM_CLICK, IDC_LIST_CTRL, OnClickListCtrl)//}}AFX_MSG_MAPEND_MESSAGE_MAP() void CListDialogDlg::OnClickListCtrl(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code hereNM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;CString str;str.Format(_T("Item index: %d,SubItem:%d"), pNMListView->iItem, pNMListView->iSubItem);MessageBox(str);*pResult = 0;} 其中黑体部分代码为自行添加的测试代码,主要为了获取选择的行编号与列编号,有了行编号和就可以使用m_cListCtrl.GetItemText(选择的行编号,某一列的列编号)获取某行某字段的值(如数据库表表示字段的值),可以定义一个对话框类成员变量存储该值,用于菜单或按钮命令,如修改记录、显示备注型(或图片型)字段 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 、删除记录等。 4、添加NM_RCLICK消息和右键菜单: 与NM_CLICK类似,添加NM_RCLICK消息处理函数。如下图所示创建菜单资源: 在NM_RCLICK消息处理函数中添加如下显示右键菜单的代码: void CListDialogDlg::OnRclickListCtrl(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code here//CPoint point;//::GetCursorPos(&point);//::可以提示全局函数和当前类成员函数DWORD dwPos = GetMessagePos();CPoint point( LOWORD(dwPos), HIWORD(dwPos) ); CMenu menu;VERIFY( menu.LoadMenu( IDR_MENU1 ) ); //IDR_MENU1是新建菜单IDCMenu* popup = menu.GetSubMenu(0);//ASSERT( popup != NULL );popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );//TPM_RIGHTBUTTON使右键点击菜单也起作用 *pResult = 0;} 在ClassWizard中为菜单项ID_DELETE添加删除命令消息处理函数。以下是测试代码: void CListDialogDlg::OnDelete(){// TODO: Add your command handler code hereint iItemSel = m_cListCtrl.GetNextItem(-1, LVIS_SELECTED);CString str="";while(iItemSel != -1){//m_cListCtrl.DeleteItem(iItemSel);//delete selected item in the list controlstr=str+m_cListCtrl.GetItemText(iItemSel,0);//利用该方法可以获取数据记录编号列iItemSel = m_cListCtrl.GetNextItem(iItemSel, LVIS_SELECTED); } MessageBox(str);} 代码中的循环是为了处理同时选择了多行的情况。可以在代码中添加根据选择的行编号iItemSel获得数据记录编号的代码,在控件中删除行的同时,删除数据库表中的相应记录。  
本文档为【MFC中ListCtrl的用法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_597436
暂无简介~
格式:doc
大小:32KB
软件:Word
页数:6
分类:互联网
上传时间:2019-04-21
浏览量:34