VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)

您所在的位置:网站首页 鸡啄米卡通图片 VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)

VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)

2024-07-15 08:26:32| 来源: 网络整理| 查看: 265

       前面一节中,鸡啄米讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用。

     列表视图控件简介

       列表视图控件List Control同样比较常见,它能够把任何字符串内容以列表的方式显示出来,这种显示方式的特点是整洁、直观,在实际应用中能为用户带来方便。

       列表视图控件是对前面讲到的列表框控件List Box的改进和延伸。列表视图控件的列表项一般有图标(Icon)和标签(Label)两部分。图标是对列表项的图形描述,标签是文字描述。当然列表项可以只包含图标也可以只包含标签。

       列表视图控件有4种风格:Icon、Small Icon、List和Report。下面简单说下4种风格各自的特点:

       Icon大图标风格:列表项的图标通常为32×32像素,在图标的下面显示标签。

       Small Icon小图标风格:列表项的图标通常为16×16像素,在图标的右面显示标签。

       List列表风格:与小图标风格类似,图标和文字的对齐方式不同。

       Report报表风格:列表视图控件可以包含一个列表头来描述各列的含义。每行显示一个列表项,通常可以包含多个列表子项。最左边的列表子项的标签左边可以添加一个图标,而它右边的所有子项则只能显示文字。这种风格的列表视图控件很适合做各种报表。

       列表视图控件的通知消息

       鸡啄米在VS2010/MFC编程入门之五(MFC消息映射机制概述)中的“各种Windows消息的消息处理函数”部分,就曾以列表视图控件为例简单讲了WM_NOTIFY通知消息及其消息映射入口和消息处理函数的形式。如果你忘记了可以回到第五节看一看,回忆一下。

       鸡啄米这里给出下一节中将要演示的列表视图控件实例中,通知码为NM_CLICK的通知消息的消息映射入口:

       ON_NOTIFY(NM_CLICK, IDC_PROGRAM_LANG_LIST, &CExample29Dlg::OnNMClickProgramLangList)

       还有消息处理函数自动生成时的形式:

C++代码 void CExample29Dlg::OnNMClickProgramLangList(NMHDR *pNMHDR, LRESULT *pResult)    {        LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);        // TODO: Add your control notification handler code here        *pResult = 0;    }  

       我们看到,上面的代码中将NMHDR指针类型的pNMHDR强制转换为LPNMITEMACTIVATE类型的pNMItemActivate,那么我们就可以在函数中通过pNMHDR来访问NMHDR结构,也可以通过pNMItemActive指针变量来访问第一个元素为NMHDR结构体变量的扩充结构。

       当然列表视图控件还有一些自己特有的通知消息,下面就介绍几个其中比较常用的。

       LVN_ITEMCHANGING 和LVN_ITEMCHANGED:当列表视图的状态发生变化时,会发送这两个通知消息。例如,当用户选择了新的列表项时,程序就会收到这两个消息。消息会附带一个指向NMLISTVIEW 结构的指针,消息处理函数可从该结构中获得状态信息。两个消息的不同之处在于,前者的消息处理函数如果返回TRUE,那么就阻止选择的改变,如果返回FALSE,则允许改变。

       LVN_KEYDOWN:该消息表明了一个键盘事件。消息会附带一个指向NMLVKEYDOWN结构的指针,通过该结构程序可以获得按键的信息。

       LVN_BEGINLABELEDIT 和LVN_ENDLABELEDIT:分别在用户开始编辑和结束编辑标题时发送。消息会附带一个指向NMLVDISPINFO结构的指针。在前者的消息处理函数中,可以调用GetEditControl成员函数返回一个指向用于编辑标题的编辑框的指针,如果处理函数返回FALSE,则允许编辑,如果返回TRUE,则禁止编辑。在后者的消息处理函数中,NMLVDISPINFO结构中的item.pszText指向编辑后的新标题,如果pszText 为NULL,那么说明用户放弃了编辑,否则,程序应负责更新表项的标题,这可以由SetItem或SetItemText函数来完成。

VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)

       列表视图控件的相关结构体

       下面我们来介绍一下与列表视图控件有关的一些结构体。

       1. NMHDR结构体

C++代码 typedef struct tagNMHDR {        HWND hwndFrom;     // 控件窗口的句柄         UINT_PTR idFrom;   // 控件ID        UINT code;         // 控件的通知消息码    } NMHDR;  

        此结构体在很多情况下都是其他扩充结构体的第一个元素,比如上面的NMITEMACTIVATE结构体:

C++代码 typedef struct tagNMITEMACTIVATE {        NMHDR hdr;        int iItem;        int iSubItem;        UINT uNewState;        UINT uOldState;        UINT uChanged;        POINT ptAction;        LPARAM lParam;        UINT uKeyFlags;    } NMITEMACTIVATE, *LPNMITEMACTIVATE;  

       2. LVITEM 结构体

       该结构体包含了列表视图控件中列表项或列表子项的各种属性。

C++代码 typedef struct _LVITEM {         UINT mask;           // 掩码位的组合(下面有对应掩码的元素都已在括号中标出掩码),表明哪些元素是有效的        int iItem;           // 列表项的索引        int iSubItem;        // 列表子项的索引        UINT state;          // 状态,下面会列出。(LVIF_STATE)        UINT stateMask;      // 状态掩码,用来说明要获取或设置哪些状态。下面会列出        LPTSTR pszText;      // 指向列表项或列表子项的标签字符串。(LVIF_TEXT)        int cchTextMax;      // pszText指向缓冲区的字符的个数,包括字符串结束符。(LVIF_TEXT)        int iImage;          // 图标的索引。(LVIF_IMAGE)        LPARAM lParam;       // 32位的附加数据。(LVIF_PARAM)    #if (_WIN32_IE >= 0x0300)        int iIndent;    #endif    #if (_WIN32_WINNT >= 0x501)        int iGroupId;        UINT cColumns; // tile view columns        PUINT puColumns;    #endif    #if (_WIN32_WINNT >= 0x0600)        int* piColFmt;        int iGroup;    #endif    } LVITEM, *LPLVITEM;  

        下面是state和stateMask的取值及含义:

        状态                     对应的状态掩码                   含义        LVIS_CUT                     同左                 列表项或列表子项被选择用来进行剪切和粘贴操作        LVIS_DROPHILITED      同左                 列表项或列表子项成为拖动操作的目标        LVIS_FOCUSED            同左                 列表项或列表子项具有输入焦点        LVIS_SELECTED           同左                 列表项或列表子项被选中

        3. LVCOLUMN结构体

        该结构体仅适用于Report报表式列表视图控件。在向列表控件中插入一列时需要用到此结构体。它包含了列表控件某列的各种属性。

C++代码 typedef struct _LVCOLUMN {         UINT mask;              // 掩码位的组合(下面有对应掩码的元素都已在括号中标出掩码),表明哪些元素是有效的        int fmt;                    // 该列的表头和列表子项的标签正文显示格式,可以是LVCFMT_CENTER、LVCFMT_LEFT或LVCFMT_RIGHT。(LVCF_FMT)        int cx;                     // 以像素为单位的列的宽度。(LVCF_FMT)        LPTSTR pszText;    // 指向列表头标题正文的字符串。(LVCF_TEXT)        int cchTextMax;     // pszText指向缓冲区的字符的个数,包括字符串结束符。(LVCF_TEXT)        int iSubItem;          // 该列的索引。(LVCF_SUBITEM)    #if (_WIN32_IE >= 0x0300)        int iImage;        int iOrder;    #endif    #if (_WIN32_WINNT >= 0x0600)        int cxMin;        int cxDefault;        int cxIdeal;    #endif    } LVCOLUMN, *LPLVCOLUMN;  

       4. NMLISTVIEW结构体

       该结构体存放了列表视图控件通知消息的相关信息。列表视图控件的大部分通知消息都会附带指向该结构体的指针。

C++代码 typedef struct tagNMLISTVIEW {        NMHDR hdr;       // 标准的NMHDR 结构         int iItem;       // 列表项的索引         int iSubItem;    // 列表子项的索引         UINT uNewState;  // 列表项或列表子项的新状态         UINT uOldState;  // 列表项或列表子项原来的状态         UINT uChanged;   // 取值与LVITEM的mask成员相同,用来表明哪些状态发生了变化         POINT ptAction;  // 事件发生时鼠标的客户区坐标         LPARAM lParam;   //32位的附加数据    } NMLISTVIEW, *LPNMLISTVIEW;  

       有关列表视图控件的内容本节先讲这些,下节继续讲列表控件类CListCtrl的一些成员函数和应用实例,欢迎继续关注鸡啄米的VS2010/MFC教程。

除非特别注明,鸡啄米文章均为原创 转载请标明本文地址:http://www.jizhuomi.com/software/195.html 2012年6月30日 作者:鸡啄米 分类:软件开发 浏览: 评论:18


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭