CListCtrl

CListCtrl控件使用技巧 这几天处理单文档中CListCtrl控件,找了不少资料。最后得到以下的使用技巧,记录下来,方便后面用得到。当然可能有不正确的地方,请大家指出。问题一:修改网格的高度方法1:直接在OnInitDialog()中添加以下代码://此处通过新建一个空白的图片将行高撑起来 CImageList m_image; m_image.Create(1,20,ILC_COLOR32,1,0); m_... 阅读详情

 CListCtrl是列表控件类,列表控件的每一行叫做一个item,每一列叫做一个subitem。每一行和每一列都有个ID号,可以确定唯一的单元格。

最近使用了这个控件,有心得总结如下:      

(Dialog模式)                                                                                                    

1. 创建列表控件.

定义一个成员变量:CListCtrl *m_pListCtrl;

在初始化对话框的时候创建列表,也就是在OnInitDialog()中创建(在哪里创建没有规定,只要符合对象和资源创建的规则即可。)

m_pListCtrl=new CListCtrl();

m_pListCtrl->Create();

m_pListCtrl->SetExtendedStyle();

Create函数有四个参数,DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID 。第一个参数可以是一些值的组合,用来定义列表的样式,这些值MSDN有详细说明,我只举一个简单的例子,更多的查看MSDN。例如第一个参数使用LVS_REPORT,则表示列表有标题,或者说有列头,很多其他的样式必须是和这个样式搭配使用才有效。第二个参数是列表的坐标和大小,这个矩形框就表示列表的矩形框。第三个参数表示这个列表的父类,如果列表在对话框上或者是在试图上,这个参数可以是this。第四个参数是列表的资源号。

SetExtendedStyle函数只有一个参数,是一些值的组合,用来设置列表的扩展样式,这些值MSDN有详细的说明,我只介绍两个比较常用的。 LVS_EX_GRIDLINES :列表显示网格,只适用于LVS_REPORT 风格。LVS_EX_FULLROWSELECT:当一个item被选中时,它的所有subitems也处于被选中状态,点击任意一个subitem,则可同时选中整个行. 只适用于LVS_REPORT 风格。

2.构建列表   

构建列表也就是两个操作,插入列和插入行,前面说过,一个列就是一个subitem,一行就是一个item。

m_pListCtrl->InsertColumn(0,"第一列");

列索引从0开始,InsertColumn函数将在列表中建立一个列,如果数据有三列,就调用三次此函数,索引分别是0,1,2。

m_pListCtrl->InsertItem(0,"第一行");

行索引也从0开始,InsertItem函数在列表中建立一行,且“第一行”的字样显示在的一列中,其他各列为空,如果要在除第一列以外的列中插入数据,调用SetItemText()函数,这个函数有三个参数,第一个参数表示要在第几行插入,第二个参数表示要在第几列插入,第三个参数表示要插入的内容。

可以设定列宽:

 LVCOLUMN lvcolumn;
 m_pListCtrl->GetColumn(0,&lvcolumn);
 lvcolumn.mask=LVCF_WIDTH;
 lvcolumn.cx=335;
 m_pListCtrl->SetColumn(0,&lvcolumn);

表示将列宽设定为335像素。

3.操作列表

这里主要介绍一个比较有用的函数SubItemHitTest()

当鼠标停留在列表框上时,此函数会返回鼠标所在的行号,和鼠标所在的列号。

 LVHITTESTINFO linfo;
 DWORD dwPos   =   GetMessagePos();   
 CPoint point(LOWORD(dwPos),HIWORD(dwPos));
 m_pListCtrl->ScreenToClient(&point);
 linfo.pt=point;
 linfo.flags=LVHT_ABOVE;
 int iItem=m_pListCtrl->SubItemHitTest(&linfo);

行号保存在linfo.iItem中,列号保存在linfo.iSubItem中,此时可以调用GetItemText()函数获得这个单元格的内容了。

这个方法常用在列表的NM_CLICK和NM_DBLCLK事件中。

4.列表中的CheckBox

列表有多中风格,带CheckBox是其中常见的一种,设置这种风格的列表只需要在调用SetExtendedStyle函数的时候设置LVS_EX_CHECKBOXES。对CheckBox最常见的操作就是选中和取消,可能是我的知识贫乏,到目前,我还没有找到专门的消息处理这两个操作。要处理这样的操作,我使用下面的方法。

响应列表的NM_CLICK消息,在这个消息处理函数中,判断鼠标点击的位置是文本还是CheckBox,代码如下:

 UINT nFlag; 
 DWORD   dwPos   =   GetMessagePos();   
 CPoint    point(LOWORD(dwPos),HIWORD(dwPos));
 m_pList1->ScreenToClient(&point);
 m_pList1->HitTest ( point , &nFlag ) ;

如果nFlag==LVHT_ONITEMSTATEICON ,说明鼠标点中了CheckBox。本可以调用GetCheck函数来获得CheckBox的状态,但是很可惜,CheckBox的状态似乎是在NM_CLICK消息函数结束以后才会改变。所以,在NM_CLICK的消息处理函数中获得CheckBox的状态是没有改变之前的。

还有一点需要注意,假设现在目前CheckBox的状态是选中,那么,当你点击两下鼠标的时候,CheckBox还是选中状态,而且NM_CLICK消息处理函数被执行了两次,所以,结果是正确的。但是当你点击两下鼠标时速度比较快,那么系统会把两次单击鼠标看作一次双击,这样,NM_CLICK的消息处理函数只会执行一次,但是,注意但是,CheckBox的状态却改变了两次。因此,这个时候你看到的CheckBox的状态和程序的结果就相反了。要解决这个问题,就需要在NM_DBLCLK的消息函数中做相应的工作。

 

 

 

 

键盘的空格键也会选中/取消选中CheckBox的。

所以需要做处理

 

 

 

ListCtrl 重绘(选中单元格可高亮单元格颜色,双击/右击单元格可编辑,Enter键退出单元格编辑模式) 1. 项目准备工作: 1.1 新建项目文件:ListCtrlExpDemo,选择基于对话框模式; 1.2 在主窗口对话框界面加入List Control 控件,并设置其属性; 1.2.1 Owner Draw Fixed设置为True: 1.2.2 View 设置为Report: 1.3 给List Control 控件添加变量:m_listCtrlexp 1.4新建一个MFC类COwnListCtrl,其基类为CListCtrl;在ListCtrlExpDemoDlg.h文件中添加头文件. 阅读详情

相关推荐

CListCtrl风格设置

CListCtrl样式: LVS_ICON 指定为图标视图,为每个item显示大图标 LVS_REPORT 指定报表视图,显示item详细资料 LVS_SMALLICON 指定为小图标视图,为每个item显示小图标 LVS_LIST 指定为列表视图,显示一列带有小图标的i...

qq_38611124的博客 1538

选中CListCtrl中的单元格

选中CListCtrl中的单元格,而不是选中整行信息.

CListCtrl控件图标显示实例教程

htmltable {th, td {th {pre {简介:CListCtrlMFC库中用于创建列表视图的控件,类似于Windows资源管理器。本示例详细说明了如何利用CListCtrl在应用程序中显示图标,增强用户界面的直观性和友好度。介绍了添加图标资源、创建图像列表、插入带图标的列表项、调整列宽、事件处理、界面布局以及性能优化等关键步骤。

weixin_36303807的博客 846

CListCtrl控件详解

Create创建列表控件并将其附加给CListCtrl对象。

milanleon的专栏 2万+

CListCtrl基本用法

 CListCtrl是列表控件类,列表控件的每一行叫做一个item,每一列叫做一个subitem。每一行和每一列都有个ID号,可以确定唯一的单元格。最近使用了这个控件,有心得总结如下:      (Dialog模式)                                                                                        

馋嘴猪没胃口 2万+

CListCtrl使用详解

1。先来介绍REPORT类型的CListCtrl:首先使用下面的语句设置CListCtrl的style: DWORD SetExtendedStyle( DWORD dwNewStyle );其中 LVS_EX_CHECKBOXES 表示添加CheckBox LVS_EX_FULLROWSELECT 表示选择整行 LVS_EX_GRIDLINES 表示添加表格线如果设置了LVS_EX_CHECKB

优程阁 4132

改变CListCtrl单元格的颜色字体颜色

1.首先从CListCtrl 继承一个类,命名为CXListCtrl 在头文件中加摸板 CMap<DWORD, DWORD&, COLORREF, COLORREF&> MapItemColor; CMap<DWORD, DWORD&, COLORREF, COLORREF&> MapFontColor; 好在这里查找你的修改的颜色。 2...

weixin_43913330的博客 4919

CListCtrl控件

CListCtrl控件 (2007-04-14 11:50:38)   分类:VC++常用控件操作通过这片播客,你可以获得一下信息:1. CListCtrl 样式及设置2. 扩展样式设置3. 数据插入4. 一直选中Item5. 选中和取消选中Item6. 得到CListCtrl中所有行的checkbox的状

海边的猪 1693

CListCtrlReport(详细)视图基本用法

简单介绍 CListCtrl的报表视图,即LVS_REPORT,也可叫做详细视图,可以显示多列,而其它几个视图LVS_LIST、LVS_ICON、LVS_SMALLICON则没有多列显示功能。 基本用法 在对话框中可以通过VS的工具来拖拽一个CListCtrl到界面上,但在非对话框中只能用Create或CreateEx来创建。由此可看出,尽早学会用Create或CreateEx来创建一个CList...

憧憬,思考,奋斗,飞翔 3690

CListCtrl 怎么实现tooltip

http://www.codeproject.com/KB/list/CListCtrl_ToolTip.aspx For normal MFC controls, there are usually two methods for enabling tooltips:Calling CWnd::EnableToolTips() Adding CToolTipCtrl as a

waizhu的专栏 3324

CListctrl基本用法

CListCtrl是列表控件类,列表控件的每一行叫做一个item,每一列叫做一个subitem。每一行和每一列都有个ID号,可以确定唯一的单元格。 最近使用了这个控件,有心得总结如下:       (Dialog模式)                                                                               

Lydia的博客 1261

MFC总结之CListCtrl用法及技巧

文根据本人在项目中的应用,来谈谈CListCtrl的部分用法及技巧。当初学习时,查了很多资料,零零碎碎的作了些记录,现在主要是来做个总结,方便以后查阅。主要包括以下十三点内容:基本操作、获取选中行的行号、复选框操作、动态设置选中行的字体颜色、设置选中行的背景颜色、禁止拖动表头、让第一列居中显示、设置行高与字体、虚拟列表技术、点击表头时进行归类、向上与向下移动、动态调整大小问题、避免闪烁问题。 ...

阿哲的专栏 1632

ClistCtrl

创建图形列表并和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列: 

basketball in c++ 3033

关于ClistCtrl 使用

CListCtrl类封装“列表视图控件”功能,显示每个包含图标(列表视图中)和标签的收集。除图标和标签外,每一项还能有显示在图标和标签的右边的列中的信息。此控件(以及CListCtrl类)只适用于运行于Windows 95和Windows NT 3.51及更高版本的程序。下面是CListCtrl类的主要概况。对于详细的、概念性的讨论,请参阅联机文档“Visual C++程序员指南”

我为编程狂,我为外语狂 3524

ClistCtrl能够拖动项

ClistCtrl能够拖动项前言: 在网上搜索很多关于拖动ClistCtrl中一项的文章,找到了一些,但却编译不了。有个例子不错,但总觉得不合适我的程序,于是自己下决心做一个,过程倒还挺顺利。现在拿出来和大家分享,希望对大家有所帮助。阿弥陀佛!^_^一、先上个图片个给大家看一下效果吧。二、源代码下载DragListCtrl_VC6.zip (VC6下编译通过,支持unicode)三、几点说明1.本例子只能在CListCtrl的报告样式中应用,其它样式的不行。2.为了简单方便和高效,我没有选择重绘

jacky_qiu的专栏 6688

CListCtrl 自绘

自行绘制 ClistCtrl 的列表项,可以利用列表框的 NM_CUSTOMDRAW 消息,该消息由控件向它的父窗口发送,告诉父窗口它的绘图操作。     如果绘图操作不需要父窗口参与,可以使用该控件的 ON_NOTIFY_REFLECT 宏处理它的 NM_CUSTOMDRAW

solidsnake002的专栏 6810

CListCtrl的用法总结

1 CListCtrl的风格 CListCtrl的风格有四种: LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标LVS_LIST: 显示一列带有小图标的itemLVS_REPORT: 显示item详细资料 分别对应着资源管理器查看菜单下的大图标,小图标,列表,详细资料。 可以在控件属性视图下设置:View属性. 也可以用代

放飞梦想,成就未来 1万+
上一篇: 汇编指令
下一篇: eMule代码分析-托盘图标
goodwinds
博客等级 码龄20年 66粉丝 37原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值