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

MFC入门学习之控件(4)标签控件ListControl的添加和使用

在MFC中,提供了ListControl类, 首先设置如下参数:显然如果想满足特殊的需求,必须定制适合我们需求的ListControl,此处假设我们需要在l

在MFC中,提供了List Control类,

 

首先设置如下参数:

bubuko.com,布布扣

显然如果想满足特殊的需求,必须定制适合我们需求的List Control,

此处假设我们需要在list中浏览计算机上文件,那么我们可能需要一个button,当点击button时触发浏览文件的操作。这样的操作在List Control中并不存在,那么现在开始在List Control中添加一个按键,那么需要Button类的方法,但是Button类本身不支持在某个特定的List Control中添加,那么也需要对Button类重新封装,满足在特定位置的显示和按照列表的方式进行轮询Button状态。

首先搭建List Control的框架:

CVMC_ListCtrl(CString Text = _T("Some String"));

 

CVMC_ListButton *m_pButton;

CString DefaultText;

int m_pButtonMapColumn;

 

CListm_pButtonList;

 

void CreateButton(int iIndex, int iSubIndex, int iMapColumn =-1);

void UpdateButtonPos();//adjust buttons

void OnPaint();

 

int m_nButtonMapColumn;

int m_nSelectedItem;

从上述的定义可以清晰的了解到整个List Control能够为我们提供的全部功能。

既然用到了CVMC_ListButton类,那么就需要对这个类进行封装。

并且我们真正需要的是将按键添加到按键链表中,通过如下方法:

CList m_pButtonList;

 

m_pButtonList.AddTail(m_pButton);

 

m_pButton->ShowWindow(SW_SHOW);

 

完成button的添加之后,需要添加消息的处理函数,方法为:

利用消息机制,手动添加消息处理函数

BEGIN_MESSAGE_MAP(CVMC_ListCtrl,CListCtrl)

//Add your own message map here

ON_BN_CLICKED(ID_BUTTON_IN_LIST_BROWSE, OnButtonBrowse)

END_MESSAGE_MAP()

 

声明处理函数的方法:

afx_msgvoid OnButtonBrowse();

 

当然在创建完成一个list control控件之后,最重要的是向里面添加显示信息,首先向list control中添加列信息,也就是标题信息。首先要将创建的控件和对象连接起来,

DDX_Control(pDX,IDC_LIST_SINGLE_DOWNLOAD, m_NandSingleFileList);

 

在初始化函数中添加如下信息:

//listcontrol

CRect rect;

m_NandSingleFileList.GetClientRect(&rect);

 

m_NandSingleFileList.SetExtendedStyle(m_NandSingleFileList.GetExtendedStyle()| LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);

 

lvc.fmt = LVCFMT_CENTER;

lvc.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH |LVCF_SUBITEM;

 

//add column

lvc.pszText = _T("File Name");

lvc.cx = rect.Width()/8;

lvc.iSubItem = -1;

m_NandSingleFileList.InsertColumn(LIST_ITEM_FILE_NAME,&lvc);

 

lvc.pszText = _T("Path");

lvc.cx = rect.Width()/2;

lvc.iSubItem = -1;

m_NandSingleFileList.InsertColumn(LIST_ITEM_FILE_PATH,&lvc);

 

lvc.pszText = _T("Start Address");

lvc.cx = rect.Width()/4;

lvc.iSubItem = -1;

m_NandSingleFileList.InsertColumn(LIST_ITEM_FILE_STARTADDR,&lvc);

 

lvc.pszText = _T("Browse");

lvc.cx = rect.Width()/8;

lvc.iSubItem = -1;

m_NandSingleFileList.InsertColumn(LIST_ITEM_FILE_BROWSE,&lvc);

显示效果如下:

bubuko.com,布布扣

接下来就需要向list control控件中添加数据。

intnIndex = 0;

intnCountOfImageNO = 12;

 

for(nIndex; nIndex

{

m_NandSingleFileList.InsertItem(nIndex,_T("boot.img"));

m_NandSingleFileList.SetItemText(nIndex, LIST_ITEM_FILE_PATH,_T("./boot.img"));

m_NandSingleFileList.SetItemText(nIndex,LIST_ITEM_FILE_STARTADDR, _T("0x00000000"));

//create button

m_NandSingleFileList.CreateButton(nIndex, 3,LIST_ITEM_FILE_BROWSE);

 

m_NandSingleFileList.SetCheck(nIndex, TRUE);

}

 

returnTRUE;

 


推荐阅读
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • C# .NET 4.1 版本大型信息化系统集成平台中的主从表事务处理标准示例
    在C# .NET 4.1版本的大型信息化系统集成平台中,本文详细介绍了主从表事务处理的标准示例。通过确保所有操作要么全部成功,要么全部失败,实现主表和关联子表的同步插入。主表插入时会返回当前生成的主键,该主键随后用于子表插入时的关联。以下是一个示例代码片段,展示了如何在一个数据库事务中同时添加角色和相关用户。 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
  • 资源管理器的基础架构包括三个核心组件:1)资源池,用于将CPU和内存等资源分配给不同的容器;2)负载组,负责承载任务并将其分配到相应的资源池;3)分类函数,用于将不同的会话映射到合适的负载组。该系统提供了两种主要的资源管理策略。 ... [详细]
  • AngularJS 进阶指南:第三部分深入解析
    在本文中,我们将深入探讨 AngularJS 的指令模型,特别是 `ng-model` 指令。`ng-model` 指令用于将 HTML 元素与应用程序数据进行双向绑定,支持多种数据类型验证,如数字、电子邮件地址和必填项检查。此外,我们还将介绍如何利用该指令优化表单验证和数据处理流程,提升开发效率和用户体验。 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 在众多市场调研公司中,如何选择一家值得信赖的合作伙伴至关重要。基于我在市场调查行业近二十年的经验,我将推荐几家国内知名的市场调研机构,供您参考:1. 开元研究——专注于零售报刊发行研究、媒体广告价值评估及网络营销分析等领域,以其专业性和准确性赢得了广泛认可。 ... [详细]
  • POJ3669题目解析:基于广度优先搜索的详细解答
    POJ3669(http://poj.org/problem?id=3669)是一道典型的广度优先搜索(BFS)问题。由于陨石的降落具有时间属性,导致地图状态会随时间动态变化。因此,可以利用结构体来记录每个陨石的降落时间和位置,从而有效地进行状态更新和路径搜索。 ... [详细]
  • DRF框架中Serializer反序列化验证机制详解:深入探讨Validators的应用与优化
    在DRF框架的反序列化验证机制中,除了基本的字段类型和长度校验外,还常常需要进行更为复杂的条件限制校验。通过引入`validators`模块,可以实现自定义校验逻辑,如唯一字段校验等。本文将详细探讨`validators`的使用方法及其优化策略,帮助开发者更好地理解和应用这一重要功能。 ... [详细]
  • 本文探讨了如何有效地构建和优化微信公众平台账号,涵盖了用户信息管理、内容创作与发布、互动策略及数据分析等方面。通过合理设置用户信息字段,如用户名、昵称、密码、真实姓名和性别等,确保账号的安全性和用户体验。同时,文章还介绍了如何利用微信公众平台的各项功能,提升用户参与度和品牌影响力。 ... [详细]
  • 深入解析InnoDB中的多版本并发控制机制
    多版本并发控制(MVCC)是InnoDB存储引擎中的一项关键技术,通过维护数据在不同时间点的多个版本,确保了事务的隔离性和一致性。每个读取操作都能获得一个与事务启动时一致的数据视图,从而提高了并发性能并减少了锁竞争。此外,MVCC还支持多种隔离级别,如可重复读和读已提交,进一步增强了系统的灵活性和可靠性。 ... [详细]
author-avatar
铁匠他夫人_738
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有