VC CListCtrl控件的使用方法

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在VC中使用控件一直是件让我头痛的事件,从控件的创建到控件的操作管理,都得写一大堆代码,相比于Delphi/VB,实在是麻烦多了。其实在之前学习SDK的时候,就有想过专门花点儿时间来学习VC中控件的使用,但一直没空。最近准备写一个小工具,要用到ListCtrl控件,所以又不得不好好的恶补一翻。

我是在MFC的对话框模式下使用CListCtrl控件的,其实不管在SDK或文档/视图模式下,VC控件的使用都差不多,下面来好好的写写CListCtrl控件的使用笔记。

一、CListCtrl控件的创建

由于我是在MFC的对话框模式下使用CListCtrl控件的,所以只需要在控件栏上选择CListCtrl的图形按钮,接着添加到对话框中就行了。

二、CListCtrl控件样式的设置

第一步:在使用CListCtrl控件之前,首先需要为该控件关联一个变量(只针对于对话框模式):
CListCtrl m_BlogAccountList;

第二步:由于CListCtrl控件要做一些初始化操作,比如设置控件样式,设置控件的行列并填入一些数据。初始化操作的代码是在对话框的OnInitDialog事件中写入的。

默认情况下,CListCtrl控件的样式是非常简陋的,大多情况下我们都需要对CListCtrl控件的样式进行修改,比如设置为报表样式,可以进行整行选择等,如有需要还有调整CListCtrl控件的行高。诸如这些设置都需要用到CListCtrl控件的扩展样式,所以首先得了解这些扩展样式。

我在MSDN中没有找到CListCtrl控件的扩展样式资料,只好上百度百科找了找。

CListCtrl控件的扩展样式
LVS_EX_GRIDLINES //绘制表格线
LVS_EX_SUBITEMIMAGES//子项目图标列表
LVS_EX_CHECKBOXES //带复选框
LVS_EX_TRACKSELECT //自动换行
LVS_EX_HEADERDRAGDROP//报表头可以拖拽
LVS_EX_FULLROWSELECT //选择整行
LVS_EX_ONECLICKACTIVATE//单击激活
LVS_EX_TWOCLICKACTIVATE//双击激活
LVS_EX_FLATSB//扁平滚动条
LVS_EX_REGIONAL
LVS_EX_INFOTIP
LVS_EX_UNDERLINEHOT
LVS_EX_UNDERLINECOLD
LVS_EX_MULTIWORKAREAS//多工作区

对话框模式下创建的CListCtrl控件样式只有一个,就是WS_BORDER,而我需要为CListCtrl设置为报表样式,并能选择整行,下面就可以开始写代码了:

//通过GetWindowLong来获取CListCtrl已有的样式
DWORD dwStyle = GetWindowLong(m_BlogAccountList.m_hWnd, GWL_STYLE);

//在原有样式的基本上,添加LVS_REPORT扩展样式
SetWindowLong(m_BlogAccountList.m_hWnd, GWL_STYLE, dwStyle|LVS_REPORT);



//获取已有的扩展样式
DWORD dwStyles = m_BlogAccountList.GetExStyle();

//取消复选框样式
dwStyles &= ~LVS_EX_CHECKBOXES;

//添加整行选择和表格线扩展样式
m_BlogAccountList.SetExtendedStyle(dwStyles|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

通过以上四句代码,就已经能满足我的需求了。

三、为CListCtrl控件添加列

列的添加只需要用到LVCOLUMN结构体,所以需要先行了解了解。在MSDN中查到的LVCOLUMN结构体的定义如下:

typedef struct _LVCOLUMN {
    UINT mask;
    int fmt;
    int cx;
    LPTSTR pszText;
    int cchTextMax;
    int iSubItem;
#if (_WIN32_IE >= 0x0300)
    int iImage;
    int iOrder;
#endif
} LVCOLUMN, FAR *LPLVCOLUMN;

该结构体共有8个成员。

mask是用来设置LVCOLUMN结构体中哪些成员有效,其值可以为0。mask可设置的值如下:

LVCF_FMT  fmt成员有效
LVCF_IMAGE iImage成员有效 
LVCF_ORDER  //以下略
LVCF_SUBITEM
LVCF_TEXT
LVCF_WIDTH

fmt成员是对CListCtrl控件列标题进行设置,比如列标题中文字的对齐方式,是否在列标题中显示图标等。

cx成员是设置列宽。

pszText成员是设置列标题文字

cchTextMax成员是设置标题文字的缓冲区大小

iSubItem成员是设置列索引

iImage成员是设置ImageList中的图像索引。

iOrder成员的作用未知。

下面进行添加列操作:

char *szColUmn[] = {"帐号", "密码"};
int nColWidth[] = {100, 100};
LVCOLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER;
lvc.fmt = LVCFMT_LEFT; //左对齐
for (int i = 0; i < 2; i++)
{
    lvc.pszText = szColUmn[i];
    lvc.iSubItem = i;
    lvc.iOrder = i;
    lvc.cx = nColWidth[i];
    m_BlogAccountList.InsertColumn(i, &lvc);

}

四、为CListCtrl控件添加行
添加行的操作需要用到InsertItem和SetItemText属性,这个简单,就不详述了,看代码:

m_BlogAccountList.InsertItem(0, "abc");
m_BlogAccountList.SetItemText(0, 1, "abc");
m_BlogAccountList.SetItemText(1, 1, "123");

VS2010 MFC中List Control控件详解与实战应用 List Control控件MFC(Microsoft Foundation Classes)中用于显示和管理结构化数据的重要UI组件,支持多种视图模式——图标(Icon)、小图标(Small Icon)、列表(List)和报告(Report)模式。其中,报告视图最为常用,适用于表格状数据展示。CListCtrl类封装了Windows通用控件的所有功能,通过封装 Win32 API 实现对项、子项、图像、状态等的统一管理。其核心架构基于owner-draw 机制扩展性和。 阅读详情

相关推荐

双击可编辑的VC++扩展CListCtrl列表控件

双击可编辑的VC++扩展CListCtrl列表控件CListCtrl列表控件进行了一个功能扩展,使它支持双击鼠标实现编辑主项(Item),也可以编辑子项(SubItem),并尽量符合CListCtrl的操作习惯。这个对VC的爱好者们应该很有用,必竟双击编辑已经让我们大部分人感觉很习惯了,因此这个功能的加入是符合注流的。

VCCListCtrl用法详解

1. CListCtrl 风格<br />      LVS_ICON: 为每个item显示大图标<br />      LVS_SMALLICON: 为每个item显示小图标<br />      LVS_LIST: 显示一列带有小图标的item<br />      LVS_REPORT: 显示item详细资料<br />      直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”<br /> 2. 设置listctrl 风格及扩展风格<br />      LO

dlfer11的专栏 794

VCCListCtrl控件

VCCListCtrl控件 收藏 1. CListCtrl 样式及设置2. 扩展样式设置3. 数据插入4. 一直选中Item5. 选中和取消选中Item6. 得到CListCtrl中所有行的checkbox的状态7. 得到CListCtrl中所有选中行的序号8. 得到item的信息9. 得到CListCtrl的所有列的header字符串内容10. 使CList

wwwcs59的专栏 945

VC++中可编辑的CListCtrl实现

CEditableListCtrl类实现代码 EditableListCtrl.h文件 #if!defined(AFX_EDITABLELISTCTRL_H__D931FC67_33E0_4A71_8C4B_2E62FBCA6081__INCLUDED_) #defineAFX_EDITABLELISTCTRL_H__D931FC67_33E0_4A71_8C4B_2E62FBCA6081_

Ryan 的 Blog 5095

VC: [转]CListCtrl使用详解

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

笑风生 3254

VCCListCtrl控件使用方法

CListCtrl控件扩展样式----------------------------------LVS_EX_GRIDLINES //绘制表格线LVS_EX_SUBITEMIMAGES//子项目图标列表LVS_EX_CHECKBOXES //带复选框LVS_EX_TRACKSELECT //自动换行LVS_EX_HEADERDRAGDROP//报表头可以拖拽LVS_EX_FULLROWSELECT //选择整行LVS_EX_ONECLICKACTIVATE//单击激活LVS_EX_TWOCLICKACT

2847

VC/MFCCListCtrl控件使用方法

http://blog.csdn.net/tg2003/archive/2009/04/10/4060322.aspx 在VC使用控件一直是件让我头痛的事件,从控件的创建到控件的操作管理,都得写一大堆代码,相比于Delphi/VB,实在是麻烦多了。其实在之前学习SDK的时候,就有想过专门花点儿时间来学习VC控件使用,但一直没空。最近准备写一个小工具,要用到ListCtrl控件

龙之白云的小屋子 1299

VC CListCtrl控件的上移和下移的通用方法

/**//**************************************************************************函数名称:CCommonFuntions::OnCListCtrlUp描    述: 对CListCtrl记录的上移操作输入参数:         *listCtrl   对某个CListCtrl对象进行上移操作的CListCtrl指针 

dengdai8的专栏 3310

VC防止窗口及其控件(如CListCtrl)闪烁的简单方法(一组有用的宏)

        本文主要是通过网上一篇文章提供的解决办法,整理了一组宏来实现防闪烁的。本文的重点是展示这个宏及其使用方法。 解决方法的原理请参考: http://www.cndes.cn/Designs/Program/200608052716.html 针对上文中提到的 “有效的进行搽除" 方法整理如下:        原文作者的思路是复写WM_ERASEBKGND消息处理函数OnEraseBk

hf_blueideal的专栏 2039

解决列表框更新数据的时候的闪烁问题(VC防止窗口及其控件(如CListCtrl)闪烁的简单方法(一组有用的宏) )

 VC防止窗口及其控件(如CListCtrl)闪烁的简单方法(一组有用的宏)         本文主要是通过网上一篇文章提供的解决办法,整理了一组宏来实现防闪烁的。本文的重点是展示这个宏及其使用方法。 解决方法的原理请参考: http://www.cndes.cn/Designs/Program/200608052716.html 针对上文中提到的 “有效的进行搽除" 方法整理如下:     

ponydph的专栏 4267

【转帖】VC中使CListCTrl控件排序

 http://blog.sina.com.cn/s/blog_5baa65b30100ahxm.htmlVC中使CListCTrl控件排序(2008-09-26 18:41:19)标签:杂谈   分类:软件开发   列表控件CListCtrl)的排序功能不像其它直接调用API就可以完成的功能一样.它比较复杂.今天将我的一点体会简单地谈一下. 列表控件的顶部有一排按钮,用户可以通过选

qpx0033的专栏 817

vc mysql断线自动连接_VC连接MySQL

VC连接MySQL一、MySQL的安装可以考虑安装mysql-5.0.41-win32(可到http://www.newhua.com/soft/3573.htm处下载),当然你有更新的版本更好,注意选择“完全安装”(只有这样才会安装VC编译时需要的头文件等)。安装后期会进行服务器配置,你可以设置你的服务器登陆密码,也可以不设置密码。二、VC6.0的设置(1)打开VC6.0工具栏Tools菜单下的...

weixin_30916461的博客 131

解决列表框更新数据的时候的闪烁问题

<br />解决列表框更新数据的时候的闪烁问题(VC防止窗口及其控件(如CListCtrl))<br /> <br /> <br />1、将Invalidate()替换为InvalidateRect()。  <br /> <br />  Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间会少一些。虫虫以前很懒,经常为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,但是事实是,如果

特权份子的专栏 2685

VC ListCtrl中嵌入进度条

VC中在listctrl中嵌入进度条,截图如下: 其实要实现这个非常容易,以下是自绘ListCtrl的代码,首先继承CListCtrl,然后增加函数OnCustomDraw: void CProcessList::OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult) { //draw each item.set txt color,bkcolor.... ...

SurpassLi的专栏 47

SetExtendedStyle

SetExtendedStyle   VC   CListCtrl的成员函数声明          DWORD SetExtendedStyle(   DWORD dwNewStyle );   函数功能设置CListCtrl扩展样式                  dwNewStyle指定的扩展样式          LVS_EX_GRIDLINES //绘制表格        ...

leadtheway的专栏 2242

资源管理器 小结

没用过VC写程序的人,用它写程序真是太累来了,折腾了两天一个简单的资源管理器出炉,虽然辛苦,但还是值得的。小结一下这个程序在界面方面主要用了 CListCtrl和CTreeCtrl,这两个空间用来显示一些目录,文件。两天的时间没白费,把这两个控件使用方式大概弄明白了。现在发现有很框架的思想都是很相像的。 这个东西主要比较麻烦的是 对文件的遍历,和文件属性的操作。 大概用到下面这

525
上一篇: 用SetLayeredWindowAttributes实现窗口透明
下一篇: 对多线程死锁的浅析
tg2003
博客等级 码龄23年 31粉丝 136原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值