Visual studio C++ MFC之列表控件CListCtrl Control
背景
本篇旨在MSDN帮助文档下总结列表控件CListCtrl Control的使用,并列出碰到的具体问题。
正文
列表型控件List Control的类是ClistCtrl,具体成员对象详见链接,以下则描述一些典型应用。
列表型控件的创建
当然,所有控件均有两种实现方式,一是在对话框模版中直接将控件List Control
拖入对应的窗口上,另一种则是通过ClistCtrl
内的成员函数Creat(..)来创建。本文只记录前者,避免过于繁琐。当然也可以根据Creat(...)
函数的参数来创建,详见第三部分的关于鸡啄米博客
的参考链接。
为了能对添加的列表型控件进行操作,因此需要在对应的属性控件添加变量——在对应的窗口的树形控件右击选择添加变量
,取一个变量名,此处为m_Devinfolist
,至此则由VS自动创建了该控件的控制变量m_Devinfolist
。在列表型控件上添加元素
- 获取列表型控件的大小,调用函数GetClientRect function(..),
CRect Rect;
m_devinfoList.GetClientRect(&Rect);
* 为列表型控件定义风格,调用函数[SetExtendedStyle(..)](https://msdn.microsoft.com/en-us/library/c7ezbf7b(v=vs.110).aspx),
// 参数类型为 DWORD dwNewStyle
m_devinfoList.SetExtendedStyle(LVS_REPORT|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
dwNewStyle定义的既是列表风格,LVS_REPORT
则代表list风格为列表型——list控件有四种风格;Icon
/ Small Icon
/ List
/ Report
。本例程使用的是Report
类型。
LVS_EX_FULLROWSELECT
代表当一列被选择时,该列均会高亮显示。
LVS_EX_GRIDLINES
则表示有网格。
* 为列表型控件添加列,调用函数InsertColumn(..),
/*
参数 1:新创建的列索引,0为起始值;
参数 2:列显示的名称;
参数 3:文字的对齐方式,有LVCFMT_LEFT, LVCFMT_RIGHT, LVCFMT_CENTER三种选项;当列为第0项的时候,这个参数不起作用。若要其起作用,可以先创建,然后删除它,再重新创建就起作用了。
参数 4:列的宽度,这个时候上一步获得的控件大小的值就起作用了;
参数 5:此列的子项个数,后面会调用InserItem,因此,此处为0。
*/
m_devinfoList.InsertColumn(0, _T("设备参数名称"), LVCFMT_CENTER, Rect.Width()/5, 0);
m_devinfoList.InsertColumn(1, _T("设备参数值"), LVCFMT_LEFT, (Rect.Width()/5)*4, 0);
* 在树形控件上添加子项,调用函数[InsertItem(..)](https://msdn.microsoft.com/en-us/library/8b9s12fc(v=vs.110).aspx),
/*此函数有4个函数原型,此处我调用的函数原型为
int InsertItem(int nItem,LPCTSTR lpszItem );
参数1:插入Item的索引,0为起始值。这个可以理解为行数。
参数2:插入的Item的名称
*/
m_devinfoList.InsertItem(0,_T("Node ID"));
m_devinfoList.InsertItem(1,_T("软件版本信息"));
m_devinfoList.InsertItem(2,_T("硬件版本信息"));
m_devinfoList.InsertItem(3,_T("设备类型"));
m_devinfoList.InsertItem(4,_T(""));
m_devinfoList.InsertItem(5,_T("设备状态"));
m_devinfoList.InsertItem(6,_T("主机输入参数"));
m_devinfoList.InsertItem(7,_T("主机输出参数"));
m_devinfoList.InsertItem(8,_T("主机输入数据"));
m_devinfoList.InsertItem(9,_T("主机输出数据"));
此时,即创建出来了一个2列10行的列表,如下图所示:
* 在第二列下面添加文字,调用函数[SetItemText(..)](https://msdn.microsoft.com/en-us/library/sya0wk5k(v=vs.110).aspx),
/*此函数的原型为
BOOL SetItemText(int nItem,int nSubItem,LPCTSTR lpszText );
参数1:Item的索引,可以理解为哪一行;
参数2:子索引,可以理解为哪一列;
参数3:要设置的文字。
*/
m_devinfoList.SetItemText(0, 1, CstrNodeid);
m_devinfoList.SetItemText(1, 1, _T("Version 0.0.1"));
m_devinfoList.SetItemText(2, 1, _T("Version 0.0.1"));
m_devinfoList.SetItemText(3, 1, _T("IO设备"));
m_devinfoList.SetItemText(4, 1, _T(""));
m_devinfoList.SetItemText(5, 1, _T("初始化状态"));
m_devinfoList.SetItemText(6, 1, _T("01 08 02 16"));
m_devinfoList.SetItemText(7, 1, _T("03 08 04 16"));
m_devinfoList.SetItemText(8, 1, _T("0F 13 32"));
最终的效果如下:
- 单击列表型控件,获取鼠标单击的行数值,并获取对应行对应列的文本。
- 首先在列表型控件上右击添加事件处理程序,消息类型选择
NM_CLICK
,类列表选择控件所在的对话框类,生成代码
- 首先在列表型控件上右击添加事件处理程序,消息类型选择
void CwzCANDeviceExploer001Dlg::OnNMClickdevshowList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
*pResult = 0;
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
}
* 在上述代码内调用函数[GetNextItem(..)](https://msdn.microsoft.com/en-us/library/aa9fthz4(v=vs.110).aspx)来获取鼠标单击列表型控件的行数,
//该函数的原型为
int GetNextItem(int nItem, int nFlags) const;
/*
函数功能:从指定的Item(行数)开始搜索符合flag标识条件的行,并返回Item的索引值(行数)
参数1:从哪个Item(行数)开始,-1代表找到第一个符合flag标识条件的Item。
参数2:LVIS_SELECTED代表被选中的Item,还有LVNI_FOCUSED,获取焦点的Item等等。
*/
int selpos = m_devinfoList.GetNextItem(-1,LVIS_SELECTED);
解析selpos
即可知道用户单击的是列表哪一行,接着调用函数GetItemText(..),
// 该函数有两个函数原型,此处我调用的函数原型为
CString GetItemText(int nItem, int nSubItem) const;
/*
参数1: 哪个Item(哪一行);
参数2: 哪个SubItem(哪一列)。
*/
Cstring Cstrinfo;
Cstrinfo = m_devinfoList.GetItemText(0, 1);
至此即可实现单击列表型控件,获取鼠标单击的行数值,并获取对应行对应列的文本。
参考链接:
- 鸡啄米的博客VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上);
- 鸡啄米的博客VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下);
- Msdn帮助文档CListCtrl Class;
至此记录完毕。
记录时间:2017-2-22
记录地点:深圳WZ
Visual studio C++ MFC之列表控件CListCtrl Control的更多相关文章
- Visual studio C++ MFC之树形控件Tree Control
背景 本篇旨在MSDN帮助文档下总结树形控件Tree Control的使用,并列出碰到的具体问题. 正文 树形控件Tree Control的类则是CTreeCtrl,具体成员对象详见链接,以下则描述一 ...
- MFC可视化 列表控件的使用
1.应该加入头文件 #include <Atlbase.h> 2.示例 类向导给列表控件绑定变量m_list DWORD dwExStyle=LVS_EX_FULLRO ...
- 解决Visual Studio 找不到报表控件、rdlc中文乱码
找回报表控件 运行安装程序中的 ..\packages\Reporting Services\RVAddon.msi 工具栏,右键选择ReportViewer,注意选择的版本 如果不能编辑报表文件(. ...
- MFC 列表控件List Control
一般用带有表头的报表模式,所以属性:View设为Report // OnInitDialog()中 CString str[] = {TEXT("姓名"),TEXT("性 ...
- mfc控件——list control的使用
[前话] 编译原理的第一个实验——词法分析器验收时,老师要求最后的结果用GUI的形式表现出来.想想确实,黑白的控制台应用程序界面在用户操作时的确不如GUI 友好.GUI界面也算是大势所趋.我现在掌握三 ...
- Visual Studio C++ MFC界面常用参数更改(改变图标,添加控件,调试打印函数等等)
背景 需要使用Visual Studio C++做一些界面.此篇文章既是记录Visual Studio C++在调整界面时常常遇见的问题. 正文 一.如何更改窗体图标,以及生成的.exe图标 更改窗体 ...
- MFC按钮、列表控件应用实例(一)
需求:实现张三.李四.王五 3 人的课程选择,并将选课结果提交到列表框中显示. 实现过程: 1.建立对话框mfc工程. 2.添加控件 tab 顺序 控 件 类 型 控件 ID1 Button IDC_ ...
- VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构体的定义.本节继续讲解下半部分,包括列表视图控件的创建.CListCtrl类的主要成员函数 ...
- VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)
前面一节中,鸡啄米讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用. 列表视图控件简介 列表视图控件List Control同样比较常见, ...
随机推荐
- AC日记——由乃与大母神原型和偶像崇拜 洛谷 P3792
由乃与大母神原型和偶像崇拜 思路: 逆元+线段树维护和+线段树维护平方和+线段树维护最大最小值: 代码: #include <bits/stdc++.h> using namespace ...
- 【转】python argparse用法总结
转自:https://www.jianshu.com/p/fef2d215b91d 1. argparse介绍 是python的一个命令行解析包,非常编写可读性非常好的程序 2. 基本用法 prog. ...
- 洛谷P3929 SAC E#1 - 一道神题 Sequence1【枚举】
题目描述 小强很喜欢数列.有一天,他心血来潮,写下了一个数列. 阿米巴也很喜欢数列.但是他只喜欢其中一种:波动数列. 一个长度为n的波动数列满足对于任何i(1 <= i < n),均有: ...
- HDU 2503 (数论,最大公约数)
a/b + c/d Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- ActiveMQ学习总结
一.消息中间件的产生的背景 1.在网络通讯中,Http请求默认采用同步请求方式,基于请求与响应模式 2.在客户端与服务器进行通讯时,客户端调用服务端接口后,必须等待服务端完成处理后返回结果给客户端才能 ...
- [UOJ198]时空旅行
看懂题目就知道$y,z$是没用的,这题相当于是给一堆$(x_i,c_i)$和询问$x_q$,要求$(x_q-x_i)^2+c_i$的最大值 先把这个式子拆开:$-2x_ix_q+x_i^2+c_i+x ...
- 找出能被5或6整除,但是不能被两者同时整除的数 Exercise05_11
/** * @author 冰樱梦 * 时间:2018年下半年 * 题目:找出能被5或6整除,但是不能被两者同时整除的数 * */ public class Exercise05_11 { publi ...
- map写数据到本地磁盘过程解析----spill和merge
如上次分析,其实map函数中的context.write()调用过程如下所示: 梳理下调用过程,context的write方法其实是调用了TaskInputOutputContext类的write方法 ...
- 导出pem证书给服务端Push Notification使用
1. 钥匙串创建Push证书的证书签名请求文件(CSR文件). 如下图所示: 2.创建App ID,创建Provisioning Profile,下载安装到XCode. 苹果开发者后台页面,创建Pus ...
- 如何用css做一个爱心
摘要:HTML的标签都比较简单,入门非常的迅速,但是CSS是一个需要我们深度挖掘的东西,里面的很多样式属性掌握几个常用的便可以实现很好看的效果,下面我便教大家如何用CSS做一个爱心. 前期预备知识: ...