VC++ListCtrl控件(陆)

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

     VC++ListCtrl控件用法  

20006年10月 27号    从网上搜到的,感觉挺好就复制下来了! 

       列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。MFC中使用CListCtrl类来封装列表控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格:
LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT 这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:大图标显示,小图标显示,列表显示,详细报表显示
LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。
LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点
LVS_SINGLESEL 同时只能选中列表中一项
首先你需要设置列表控件所使用的ImageList,如果你使用大图标显示风格,你就需要以如下形式调用:

CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);
如果使用其它三种风格显示而不想显示图标你可以不进行任何设置,否则需要以如下形式调用:
CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);
通过调用int InsertItem( int nItem, LPCTSTR lpszItem );可以在列表控件中nItem指明位置插入一项,lpszItem为显示字符。除LVS_REPORT风格外其他三种风格都只需要直接调用InsertItem就可以了,但如果使用报表风格就必须先设置列表控件中的列信息。
通过调用int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem);可以插入列。iCol为列的位置,从零开始,lpszColumnHeading为显示的列名,nFormat为显示对齐方式,nWidth为显示宽度,nSubItem为分配给该列的列索引。
在有多列的列表控件中就需要为每一项指明其在每一列中的显示字符,通过调用BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );可以设置每列的显示字符。nItem为设置的项的位置,nSubItem为列位置,lpszText为显示字符。下面的代码演示了如何设置多列并插入数据:
m_list.SetImageList(&m_listSmall,LVSIL_SMALL);//设置ImageList
m_list.InsertColumn(0,"Col 1",LVCFMT_LEFT,300,0);//设置列
m_list.InsertColumn(1,"Col 2",LVCFMT_LEFT,300,1);
m_list.InsertColumn(2,"Col 3",LVCFMT_LEFT,300,2);
m_list.InsertItem(0,"Item 1_1");//插入行
m_list.SetItemText(0,1,"Item 1_2");//设置该行的不同列的显示字符
m_list.SetItemText(0,2,"Item 1_3");
此外CListCtrl还提供了一些函数用于得到/修改控件的状态。
COLORREF GetTextColor( )/BOOL SetTextColor( COLORREF cr );用于得到/设置显示的字符颜色。
COLORREF GetTextBkColor( )/BOOL SetTextBkColor( COLORREF cr );用于得到/设置显示的背景颜色。
void SetItemCount( int iCount );用于得到添加进列表中项的数量。
BOOL DeleteItem(int nItem);用于删除某一项,BOOL DeleteAllItems( );将删除所有项。
BOOL SetBkImage(HBITMAP hbm, BOOL fTile , int xOffsetPercent, int yOffsetPercent);用于设置背景位图。
CString GetItemText( int nItem, int nSubItem );用于得到某项的显示字符。
列表控件的消息映射同样使用ON_NOTIFY宏,形式如同:ON_NOTIFY( wNotifyCode, id, memberFxn ),wNotifyCode为通知代码,id为产生该消息的窗口ID,memberFxn为处理函数,函数的原型如同void OnXXXList(NMHDR* pNMHDR, LRESULT* pResult),其中pNMHDR为一数据结构,在具体使用时需要转换成其他类型的结构。对于列表控件可能取值和对应的数据结构为:
LVN_BEGINLABELEDIT 在开始某项编辑字符时发送,所用结构:NMLVDISPINFO
LVN_ENDLABELEDIT 在结束某项编辑字符时发送,所用结构:NMLVDISPINFO
LVN_GETDISPINFO 在需要得到某项信息时发送,(如得到某项的显示字符)所用结构:NMLVDISPINFO
关于ON_NOTIFY有很多内容,将在以后的内容中进行详细讲解。
关于动态提供结点所显示的字符:首先你在项时需要指明lpszItem参数为:LPSTR_TEXTCALLBACK。在控件显示该结点时会通过发送TVN_GETDISPINFO来取得所需要的字符,在处理该消息时先将参数pNMHDR转换为LPNMLVDISPINFO,然后填充其中item.pszText。通过item中的iItem,iSubItem可以知道当前显示的为那一项。下面的代码演示了这种方法:
char szOut[8][3]={"No.1","No.2","No.3"};
//
添加结点
m_list.InsertItem(LPSTR_TEXTCALLBACK,...)
m_list.InsertItem(LPSTR_TEXTCALLBACK,...)
//处理消息
void CParentWnd::OnGetDispInfoList(NMHDR* pNMHDR, LRESULT* pResult)
{
    LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;
    pLVDI->item.pszText=szOut[pTVDI->item.iItem];//通过iItem得到需要显示的字符在数组中的位置
    *pResult = 0;
}
关于编辑某项的显示字符:(在报表风格中只对第一列有效)首先需要设置列表控件的LVS_EDITLABELS风格,在开始编辑时该控件将会发送LVN_BEGINLABELEDIT,你可以通过在处理函数中返回TRUE来取消接下来的编辑,在编辑完成后会发送LVN_ENDLABELEDIT,在处理该消息时需要将参数pNMHDR转换为LPNMLVDISPINFO,然后通过其中的item.pszText得到编辑后的字符,并重置显示字符。如果编辑在中途中取消该变量为NULL。下面的代码说明如何处理这些消息:
//处理消息 LVN_BEGINLABELEDIT void CParentWnd::OnBeginEditList(NMHDR* pNMHDR, LRESULT* pResult)
{
    LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;
    if(pLVDI->item.iItem==0);//判断是否取消该操作
         *pResult = 1;
    else
         *pResult = 0;
}
//处理消息 LVN_BEGINLABELEDIT
void CParentWnd::OnBeginEditList(NMHDR* pNMHDR, LRESULT* pResult)
{
    LV_DISPINFO* pLVDI = (LV_DISPINFO*)pNMHDR;
    if(pLVDI->item.pszText==NULL);//判断是否已经取消取消编辑
          m_list.SetItemText(pLVDI->item.iItem,0,pLVDI->pszText);//重置显示字符
    *pResult = 0;
}

上面讲述的方法所进行的消息映射必须在父窗口中进行(同样WM_NOTIFY的所有消息都需要在父窗口中处理)。

VC++中List Control控件的使用方法介绍 List Control控件是使用频率比较高的一个控件,用它可以很好的做为数据报表的工具,而且比较方便操作和响应,经常可以和数据库相互配合,它就像数据库中的一张表一样,来显示数据库中的数据。 下面结合实例从List Control的样式及列名设置、数据设置和双击响应操作等几个方面,详细介绍List Control控件的使用方法。(完整的实例可在我的CSDN资源中下载:http://downloa 阅读详情

相关推荐

MFC ListCtrl控件及CComboBox控件的初始化

1.声明部分放在.h文件中 typedef struct _tag_InitDlg {      int nCol;     char cTitle[32];     char cFormat[14];     int nWidth;     int nSubItem; }tag_InitDlg; extern tag_InitDlg initdlg[];   2.初始化

脚踏实地的做自已 1895

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

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

vc 将LISTCTRL里的内容保存成EXCEL

 1.获取当前时间做EXCEL的文件名:                  WORD  sYear,sMonth,sDay,sHour,sMinute,sSecond;                   SYSTEMTIME  CurTime;/////定义SYSTEMTIME类的对象                   GetLocalTime(&CurTime);////获取本地时间    

halibobo520的专栏 3204

Vc++ 控件List Control用法总结

1.新建对话框MFC,在对话框上放一个ListCtrl ID:IDC_PATH View:Report 2.为ListCtrl添加变量 右击->添加变量m_wndPath 3.找到OnInitDialog()函数添加如下代码: // TODO: 在此添加额外的初始化代码 m_wndPath.DeleteAllItems();//清空 m_wndPath.InsertColumn(0,_T(项目));//添加列 m_wndPath.InsertColumn(1,_T(所在路径)); m_wndPath.SetColumnWidth(0, 150);//设置列宽 m_wndPath.

VC++学习-控件篇(列表控件list control)

int nRow = m_ListBankCtrl.GetItemCount(); int nRow = m_ListBankCtrl.GetItemCount(); int nCol = m_ListBankCtrl.GetHeaderCtrl()->GetItemCount(); for (int i = 0; i < nRow; i++) { for (int j = 0; j ...

深蓝 6682

VC++ List Ctrl控件

 VC++ List Ctrl控件   790(148普 及 网 633 http://www.pujiwang.com)    列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。MFC中使用CListCtrl类来封装列表控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect,

hsrong的专栏 1450

VC++ ListCtrl控件排序实现

本文还有配套的精品资源,点击获取 简介:ListCtrl控件VC++编程中用于展示多列数据,支持多种视图样式。本主题探讨如何实现ListCtrl的数据排序功能,包括封装添加行的函数和消息响应的优化过程。将介绍如何使用CListCtrl类的高级接口进行数据操作,并通过重载OnHeaderClick消息处理函数来根据用户点击表头触发排序。示例项目sortlistctrldem...

weixin_42596214的博客 792

VC++中TreeCtrl与ListCtrl控件的使用实战

在现代软件开发中,TreeCtrl与ListCtrl控件作为用户界面的重要组成部分,扮演着至关重要的角色。TreeCtrl控件以其独特的树状结构,为展示层次化数据提供了直观的方式,便于用户理解复杂信息的层次与关系。与此同时,ListCtrl控件则通过列表形式,有效地展示和管理大量数据项,特别适用于信息的快速查看和操作。本文将介绍这两个控件的基本概念、用途以及它们在实际应用中的优势,为后续章节深入探讨它们的实现细节和优化方法打下坚实基础。让我们开始探索VC++中这两个功能强大的控件吧。

weixin_42393362的博客 799

VC++ ListCtrl控件与Tooltips集成实战指南

ListCtrl控件是Windows编程中用于显示和管理简单列表数据的常见控件。开发者可以利用它在图形用户界面(GUI)中展示图标、文本、子项等信息。ListCtrl控件支持多种视图模式,例如小图标、列表、报告和大型图标,能够适应不同的数据展示需求。Tooltips,直译为“工具提示”,是一种用户界面元素,用于向用户提供关于界面上某个对象的简短文本信息。它的主要作用是提高用户体验,帮助用户理解界面上的元素功能,尤其是在界面元素较为密集或功能不易直观理解的情况下。

weixin_35754676的博客 535

VC++中 CTreeCtrl树控件介绍

ListCtrl在系统中大量被使用,例如Windows资源管理器就是一个典型的例子。 ListCtrl树形控件功能描述:可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。   调用方法: BOOL Create( DWORD dwStyle, const RECT& rect

沧海一粟 6550

关于ListCtrl控件的一些用法

本人从今天开始将续把自己在VC++中学到的点点滴滴记录下来。最近正好在跟着导师做一个软件项目,要用到ListCtrl控件。下面结合自己的编程经验(其实我还是个菜鸟),介绍几个ListCtrl控件常用的方法。我选用的是报表形式 1、为ListCtrl 设置表格线:m_MyList.SetExtendedStyle(m_MyList.GetExtendedStyle() |  LVS_EX_

njutfyj的专栏 509

VC++6.0 MFC列表控件的基本使用方法

1、添加ListCtrl控件  2、属性中View(样式)设置为Report(报告) 3、类向导为列表控件关联变量 4、初始化列表: 在列表控件所在的对话框类里的OnInitDialog()函数中初始化表头: //列表初始化 m_ListData.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);//添加网...

Rain_Mic的博客 1万+

ListCtrl控件的简单使用

============================================================= 标题:ListCtrl控件的简单使用 摘要: 备注 Windows CE 5.0 日期:2010.5.1 姓名:朱铭雷 =============================================================     1 头文件

chen825919148的专栏 917

VC++ 实现查看当前运行程序进程的列表控件

MFC(Microsoft Foundation Classes)是微软公司提供的一套类库,旨在简化Windows应用程序的开发。MFC封装了大量Windows API,让开发者可以更容易地使用面向对象的方式来构建Windows应用程序。MFC设计上遵循了文档-视图架构模式,这种模式有效地将应用程序的数据模型和用户界面分离,为开发者提供了清晰的逻辑分层。在报告视图中,可以根据需要自定义列头和列类型来展示更加丰富的信息。自定义列头// 添加带有图标和子标题的列头设置列类型。

weixin_32312889的博客 1151

VC控件ListCtrl的使用方法总汇

VC 复习 ListCtrl 摘自:http://www.cnblogs.com/zuollblog/archive/2010/04/21/1716940.html 以下未经说明,listctrl默认view 风格为report  --------------------------------------------------------------------------

遐迩思的专栏 3528

VC++ ListCtrl Report使用

  1、在VC++ 6.0中新建基于对话框的MFC应用程序ListCtrl;   2、在主对话框上添加一个List Control至合适的位置及大小;      3、在对话框OnInitDialog中初始化ListCtrl,代码如下: // 设置ListCtrl的风格及扩展风格 LONG lStyle; lStyle = GetWindowLong(m_ct...

weixin_30696427的博客 122

MFC VC++里的list contrl控件常用操作

list contrl控件 删除一行 我们开始使用MFC编程了,只是临时用用,但是从没接触过怎么办?于是把编程过程中用到的方法之类的记录下来: m_ctrList.DeleteItem(0); //行号从零开始计算; ...

e1yang765的博客 825
上一篇: 图片上叠加时间(陆)10.23
下一篇: bmp 10.27 范鲁艳
TargetStudio
博客等级 码龄20年 3粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值