热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MFC高级控件之列表视图控件(CListCtrl)

CListCtrl类封装了列表视图控件的功能,该控件显示一组项目,每个项目由一个图标和一个标签组成。列表视图控件可以以4种不同的方式显示其内容ÿ

CListCtrl类封装了列表视图控件的功能,该控件显示一组项目,每个项目由一个图标和一个标签组成。列表视图控件可以以4种不同的方式显示其内容,分别是:图标视图、小图标视图、列表视图、报表视图。

图标视图:每个项目显示为一个全尺寸图标,32 x 32像素,下面有一个标签。用户可以将项目拖动到列表视图窗口中的任何位置。

小图标视图:每个项目显示为一个小尺寸图标,16 x 16像素,标签在其右侧。用户可以将项目拖动到列表视图窗口中的任何位置。

列表视图:每个项目都显示为一个小图标,右侧有一个标签。项目按列排列,不能拖动到列表视图窗口中的任何位置。

报表视图:每个项目都显示在自己的行中,其他信息按列排列在右侧。最左边的列包含小图标和标签,后续列包含应用程序指定的子项。嵌入式标题控件CHeaderCtrl类实现了这些列。

CListCtrl的成员函数如下:


CListCtrl Class Members

Construction
Attributes
Operations
Overridables

Construction


CListCtrlConstructs a CListCtrl object.
CreateCreates a list control and attaches it to a CListCtrl object.

Attributes


GetBkColorRetrieves the background color of a list view control.
SetBkColorSets the background color of the list view control.
GetImageListRetrieves the handle of an image list used for drawing list view items.
SetImageListAssigns an image list to a list view control.
GetItemCountRetrieves the number of items in a list view control.
GetItemRetrieves a list view item’s attributes.
SetItemSets some or all of a list view item’s attributes.
GetCallbackMaskRetrieves the callback mask for a list view control.
SetCallbackMaskSets the callback mask for a list view control.
GetNextItemSearches for a list view item with specified properties and with specified relationship to a given item.
GetFirstSelectedItemPositionRetrieves the position of the first selected list view item in a list view control.
GetNextSelectedItemRetrieves the next selected list view item for iterating.
GetItemRectRetrieves the bounding rectangle for an item.
SetItemPositionMoves an item to a specified position in a list view control.
GetItemPositionRetrieves the position of a list view item.
GetStringWidthDetermines the minimum column width necessary to display all of a given string.
GetEditControlRetrieves the handle of the edit control used to edit an item’s text.
GetColumnRetrieves the attributes of a control’s column.
SetColumnSets the attributes of a list view column.
GetColumnWidthRetrieves the width of a column in report view or list view.
SetColumnWidthChanges the width of a column in report view or list view.
GetCheckRetrieves the current display status of the state image associated with an item.
SetCheckSets the the current display status of the state image associated with an item.
GetViewRectRetrieves the bounding rectangle of all items in the list view control.
GetTextColorRetrieves the text color of a list view control.
SetTextColorSets the text color of a list view control.
GetTextBkColorRetrieves the text background color of a list view control.
SetTextBkColorSets the background color of text in a list view control.
GetTopIndexRetrieves the index of the topmost visible item.
GetCountPerPageCalculates the number of items that can fit vertically in a list view control.
GetOriginRetrieves the current view origin for a list view control.
SetItemStateChanges the state of an item in a list view control.
GetItemStateRetrieves the state of a list view item.
GetItemTextRetrieves the text of a list view item or subitem.
SetItemTextChanges the text of a list view item or subitem.
SetItemCountPrepares a list view control for adding a large number of items.
SetItemDataSets the item’s application-specific value.
GetItemDataRetrieves the application-specific value associated with an item.
GetSelectedCountRetrieves the number of selected items in the list view control.
SetColumnOrderArraySets the column order (left to right) of a list view control.
GetColumnOrderArrayRetrieves the column order (left to right) of a list view control.
SetIconSpacingSets the spacing between icons in a list view control.
GetHeaderCtrlRetrieves the header control of a list view control.
GetHotCursorRetrieves the cursor used when hot tracking is enabled for a list view control.
SetHotCursorSets the cursor used when hot tracking is enabled for a list view control.
GetSubItemRectRetrieves the bounding rectangle of an item in a list view control.
GetHotItemRetrieves the list view item currently under the cursor.
SetHotItemSets the current hot item of a list view control.
GetSelectionMarkRetrieves the selection mark of a list view control.
SetSelectionMarkSets the selection mark of a list view control.
GetExtendedStyleRetrieves the current extended styles of a list view control.
SetExtendedStyleSets the current extended styles of a list view control.
SubItemHitTestDetermines which list view item, if any, is at a given position.
GetWorkAreasRetrieves the current working areas of a list view control.
GetNumberOfWorkAreasRetrieves the current number of working areas for a list view control.
SetItemCountExSets the item count for a virtual list view control.
SetWorkAreasSets the area where icons can be displayed in a list view control.
ApproximateViewRectDetermines the width and height required to display the items of a list view control.
GetBkImageRetreives the current background image of a list view control.
SetBkImageSets the current background image of a list view control.
GetHoverTimeRetrieves the current hover time of a list view control.
SetHoverTimeSets the current hover time of a list view control.

Operations


InsertItemInserts a new item in a list view control.
DeleteItemDeletes an item from the control.
DeleteAllItemsDeletes all items from the control.
FindItemSearches for a list view item having specified characteristics.
SortItemsSorts list view items using an application-defined comparison function.
HitTestDetermines which list view item is at a specified position.
EnsureVisibleEnsures that an item is visible.
ScrollScrolls the content of a list view control.
RedrawItemsForces a list view control to repaint a range of items.
UpdateForces the control to repaint a specified item.
ArrangeAligns items on a grid.
EditLabelBegins in-place editing of an item’s text.
InsertColumnInserts a new column in a list view control.
DeleteColumnDeletes a column from the list view control.
CreateDragImageCreates a drag image list for a specified item.

Overridables


DrawItemCalled when a visual aspect of an owner-draw control changes.

下面以一个实例来演示其使用。

1. 新建一个对话框程序,在对话框上添加两个List Control,如下:

并将第二个CListCtrl控件外观的View向设为Report,如下:

2. 将下面几个图标导入到资源中。

 导入后如下:

3. 在对话框类中声明一个变量,如下:

 再声明一个变量,如下:

3. 在OnInitDialog()函数中“// TODO: 在此添加额外的初始化代码”后面添加代码如下:

BOOL CCtrlListTestDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX <0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE); // 设置大图标SetIcon(m_hIcon, FALSE); // 设置小图标// TODO: 在此添加额外的初始化代码mImageList.Create(32, 32, ILC_COLOR24 | ILC_MASK, 1, 0);for (int i = 0; i <7; i++){mImageList.Add(AfxGetApp()->LoadIconW(IDI_ICON1+i));}pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);pListCtrl->SetImageList(&mImageList,LVSIL_NORMAL);pListCtrl->SetExtendedStyle(LVS_ICON);pListCtrl -> InsertItem(0,_T("ID: 1000"),0);pListCtrl->InsertItem(1, _T("ID: 1001"), 1);pListCtrl->InsertItem(2, _T("ID: 1002"), 2);pListCtrl->InsertItem(3, _T("ID: 1003"), 3);pListCtrl->InsertItem(4, _T("ID: 1004"), 4);pListCtrl->InsertItem(5, _T("ID: 1005"), 5);pListCtrl->InsertItem(6, _T("ID: 1006"),6);pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST2);pListCtrl->SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_GRIDLINES);pListCtrl->InsertColumn(0, _T("ID号"), LVCFMT_LEFT,80, 0);pListCtrl->InsertColumn(1, _T("姓名"), LVCFMT_LEFT, 80, 1);pListCtrl->InsertColumn(2, _T("班级"), LVCFMT_LEFT, 80, 2);pListCtrl->InsertColumn(3, _T("入会时间"), LVCFMT_LEFT, 80, 3);return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

此时试运行,结果如下:

 4.在对话框中新增加“查询” “清空列表“按钮。如下:

在为两个按钮添加事件处理程序前,我们来改变一下第一个CListCtrl控件的外观项的View选项,首先由Icon变为Small Icon,如下:

试运行,结果如下:

奇怪图标没了,注意我装载的图标是32X32。再将外观项的View选项改为List,如下:

 试运行,结果如下:

 与上次的结果相同,再改回Icon。

5.为对话框声明一个Cstring变量,来记录选择项文字,如下:

6.为对话框类添加第一个CListCtrl的HNM_CLICK事件响应函数。如下:

 在函数中加入如下代码:

void CCtrlListTestDlg::OnNMClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);// TODO: 在此添加控件通知处理程序代码pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);int iCount = pListCtrl->GetItemCount();int iFirst = pListCtrl->GetTopIndex();for (int i = 0; i GetItemState(iFirst + i, LVIS_SELECTED) == LVIS_SELECTED){mstr = pListCtrl->GetItemText(iFirst + i, 0);break;}}*pResult = 0;
}

7.为"查询"按钮添加事件处理函数,并在函数中添加如下代码:

void CCtrlListTestDlg::OnBnClickedInquiry()
{// TODO: 在此添加控件通知处理程序代码CString mstr1 = mstr.Right(4);int id = _ttoi(mstr1);pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST2);pListCtrl->InsertItem(0, mstr1, 0);switch (id){case 1000:pListCtrl->SetItemText(0, 1, L"李琪");pListCtrl->SetItemText(0, 2, L"高2三班");pListCtrl->SetItemText(0,3, L"20200906");break;case 1001:pListCtrl->SetItemText(0,1, L"李雯");pListCtrl->SetItemText(0,2, L"高2三班");pListCtrl->SetItemText(0, 3, L"20200906");break;case 1002:pListCtrl->SetItemText(0, 1,L"蔡明");pListCtrl->SetItemText(0, 2, L"高2二班");pListCtrl->SetItemText(0, 3, L"20210906");break;case 1003:pListCtrl->SetItemText(0, 1, L"王伟");pListCtrl->SetItemText(0, 2, L"高2二班");pListCtrl->SetItemText(0, 3, L"20210906");break;case 1004:pListCtrl->SetItemText(0, 1, L"王红");pListCtrl->SetItemText(0, 2, L"高2四班");pListCtrl->SetItemText(0, 3, L"20210906");break;case 1005:pListCtrl->SetItemText(0, 1, L"李艳");pListCtrl->SetItemText(0, 2, L"高3四班");pListCtrl->SetItemText(0, 3, L"20200906");break;case 1006:pListCtrl->SetItemText(0, 1, L"刘彬");pListCtrl->SetItemText(0, 2, L"高3四班");pListCtrl->SetItemText(0, 3, L"20200906");break;}
}

8. 为“清空列表”按钮添加事件处理函数,并在函数中添加如下代码:

void CCtrlListTestDlg::OnBnClickedClearTable()
{// TODO: 在此添加控件通知处理程序代码pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST2);int count = pListCtrl->GetItemCount();for (int i = 0; i DeleteItem(0);}
}

试运行,点击第一个控件项目,结果如下:

 选中左边ID:1000,如下:

 再点击查询按钮,结果如下:

重复以上操作,但选取不同的内容,结果如下:

 

 点击清空列表按钮,结果如下:

 


推荐阅读
  • Vue ElementUI 实现邮箱地址自动补全功能详解 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题
    Codeforces竞赛解析:Educational Round 84(Div. 2评级),题目A:奇数和问题 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • MSP430F5438 ADC12模块应用与学习心得
    在最近的实践中,我深入研究了MSP430F5438的ADC12模块。尽管该模块的功能相对简单,但通过实际操作,我对MSP430F5438A和MSP430F5438之间的差异有了更深刻的理解。本文将分享这些学习心得,并探讨如何更好地利用ADC12模块进行数据采集和处理。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • NOIP2000的单词接龙问题与常见的成语接龙游戏有异曲同工之妙。题目要求在给定的一组单词中,从指定的起始字母开始,构建最长的“单词链”。每个单词在链中最多可出现两次。本文将详细解析该题目的解法,并分享学习过程中的心得体会。 ... [详细]
  • 在深入研究 UniApp 封装请求时,发现其请求 API 方法中使用了 `then` 和 `catch` 函数。通过详细分析,了解到这些函数是 Promise 对象的核心组成部分。Promise 是一种用于处理异步操作的结果的标准化方式,它提供了一种更清晰、更可控的方法来管理复杂的异步流程。本文将详细介绍 Promise 的基本概念、结构和常见应用场景,帮助开发者更好地理解和使用这一强大的工具。 ... [详细]
author-avatar
年庚瑶
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有