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

MFClistctrl控件嵌入Button或Combox CRect rcCellRect; CString csCellData = ""; NM_LISTVIEW * pNMListView = (NM_LISTVIEW*)pNMHDR; m_pointIndexOfCell.x = pNMListView->iItem; m_pointIndexOfCell.y = pNMListView->iSubItem; //保存指定单元格的索引 int iRow = pNMListView->iItem; ... 阅读详情

在MFC中,提供了List Control类,

 

首先设置如下参数:


显然如果想满足特殊的需求,必须定制适合我们需求的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;

 

CList<CVMC_ListButton*, CVMC_ListButton*>m_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<CVMC_ListButton*,CVMC_ListButton*> 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);

显示效果如下:


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

intnIndex = 0;

intnCountOfImageNO = 12;

 

for(nIndex; nIndex < nCountOfImageNO; 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;

 

MFC应用程序(控件集合)——标签控件_IP控件_时间控件_List Control控件_Tree Control控件_命令按钮_列表框_组合框_图片_滚动控件 标签控件应用 【Tab Control 标签控件】 标签控件也比较常见。它可以把多个页面集成到一个窗口中, 每个页面对应一个标签,用户点击某个标签时,它对应的页 面就会显示。 使用标签控件我们可以同时加载多个有关联的页面,用 户只需点击标签即可实现页面切换,方便灵活的进行操作。 每个标签除了可以显示标签文本,还可以显示图标。 标签控件相当于是一个页面的容器,可以容纳多个对话 框,而且一般也只容纳对... 阅读详情

相关推荐

VC++对话框控件开发实战:从DDX机制到性能优化

在桌面应用开发领域,消息循环与控件交互是GUI编程的核心基础。其原理基于Windows消息驱动架构,通过消息映射机制将用户操作转化为程序事件。这一技术价值在于提供了对系统资源的直接控制能力,尤其适用于对性能、稳定性和硬件交互有严苛要求的工业控制、金融交易等专业场景。通过数据交换(DDX/DDV)机制,开发者能高效实现界面与数据的同步,而列表控件、树控件等复杂组件的优化使用则能有效管理结构化数据。本文以VC++对话框开发为例,深入剖析了DDX数据交换机制与列表控件性能优化等关键实践,为构建高响应、低延迟的桌面

weixin_30621959的博客 350

MFC的listctrl中嵌入Button

这个项目中需要用MFC实现一个界面功能:listctrl中水平添加按钮。       MFC本身的listctrl控件只能显示简单的文本,简单的添加按钮也不是一两句代码能解决的问题,从这方面讲,MFC开发界面真是不得已而为之。           因为需要的按钮数目是不确定的,所以只能是动态创建,然后再根据listctrl控件的位置计算出按钮应该放置的位置,然后将按钮移动到指定坐标。   

jiangqin115的专栏 1万+

VC++ 6.0与Access数据库图书管理系统实战开发指南

数据库编程是软件开发的核心基础,它涉及数据的存储、组织、访问和管理。其基本原理是通过结构化查询语言(SQL)对数据库进行增删改查(CRUD)操作,实现数据的持久化。在桌面应用开发中,数据库技术是实现业务逻辑和数据管理的基石,其价值在于将用户界面操作与后端数据存储无缝衔接,构建出功能完整的应用程序。典型的应用场景包括各类信息管理系统,如图书管理、库存管理等。本文以经典的图书管理系统为例,深入剖析如何使用VC++ 6.0的MFC框架与Access数据库进行实战开发。文章将详细拆解从环境搭建、数据库设计、ADO连

weixin_30527323的博客 391

MFC 在ListCtrl控件中插入图标

上篇博文中,写了一遍关于ListCtrl控件的基本用法和引用两个重绘类进行一些美化。 今天的项目中,需要用到在控件中插入图标作为状态显示用,于是网上查找了一些资料,将方法记录下来: 先看效果图: 图片没有找到好看的大家见谅,实现的功能是根据运行状态,显示不同的图标表示运行状态和停止状态两种。 实施方法如下: 首先是添加一个listCtrl控件和添加变量,这就不说了。 1、然

dubuzherui的专栏 8487

MFC在ListCtrl中加入Button

MFC在ListCtrl中加入Button,一个不错的功能。

J-SCOPE实战:除了看波形,如何用它和JLink-RTT模式高效调试你的STM32变量?

本文详细介绍了如何利用J-SCOPE和JLink-RTT模式高效调试STM32变量,实现实时数据可视化。通过对比HSS和RTT模式的优劣,提供固件端配置、J-SCOPE设置及实战应用案例,帮助开发者快速掌握这一高效调试技术,特别适用于电机控制、传感器融合等需要实时监控的场景。

weixin_29159613的博客 446

VS MFC之List Control控件的使用

先上图,基本功能实现就是这样一个状态,后面我会在陆续添加一些属性及功能,先记录一下实现的步骤 1.新建一个工程文件,在界面上新建一个“List Control”控件,首先把它的“View”设置为“Report(报表)”模式,这个很重要,要不然到时候什么也不会显示,也不会报错 2.为这个“List Control”控件关联“CListCtrl”类型变量,然后在这个工程文件的“*Dlg.c...

PtaQ的博客 9474

Uniapp H5端SEO优化全攻略:提升搜索引擎排名与流量

在移动互联网时代,H5页面因其跨平台、低成本、易传播的特性,成为许多企业的首选。Uniapp作为一款优秀的前端跨端开发框架,能够快速开发H5、小程序、App等多端应用。然而,由于Uniapp默认采用SPA(单页应用)架构,H5端在SEO(搜索引擎优化)方面存在一定劣势,如爬虫难以抓取动态内容、页面标题和描述不易优化等。 本文将系统性地介绍Uniapp H5端的SEO优化方案,涵盖基础优化、SPA优化策略、内容优化、技术优化、外部优化及监测分析,帮助开发者提升网站在搜索引擎中的排名,获取更多自然流量。

vvilkin的学习备忘 1973

MFC之ListCtrl动态添加按钮

先上效果图: 图中用了一个CListCtrl插件,隐藏了网格线(LVS_EX_GRIDLINES)。 添加了“删除”按钮(按钮上贴了图片),选中哪一行则显示在哪一行。 有两种方式创建按钮,一种是直接根据行数(比如n行)创建n按钮,然后根据自己需求全部显示,或是动态显示,只显示所选中的那一行按钮; 另一种是每次只创建选中行的一个按钮,并且销毁上一次创建的按钮(第一次除外)。 本实例...

weixin_30905981的博客 2989

ubuntu 24.04安装ros1 noetic

上面是参考链接给的修改内容。除了上面要修改的地方,我在编译的生活还有一个地方报错,修改成如下形式。因为我已经对文件rosconsole_log4cxx.cpp作了上面的修改,所有是不是188行不太确认了,如果报“log4cxx::spi::LocationInfo”问题,按照下面修改就可以了。我在编译时还报了一个问题,就是我之前安装的是jazzy。所以在编译时会报ros变量名不对,这时对变量名做修改就可以了。具体怎么修改,百度。a、将源文件中所有CMakelist中编译标准改为c++ 17.

yangpan011的博客 3205

量化交易 米筐 多因子合成(回测中使用)

多因子合成 1、因子合成 将一些相关(高、低)的因子合成一个因子 方法: 使用PCA方式(使用于较强相关性) 2、核心代码 将因子 inc_revenue_ttm 和 operating_revenue_growth_ratio_ttm 合成为一个因子 inc_operating from sklearn.decomposition import PCA pca = PCA(n_components=1) # 因子合并 fund['inc_operating'] = pca.fit_transform(fu

廷益_飞鸟的博客 1062

C++ MFC combo box和list control控件的使用

Combo Box用法:   combo box控件由两部分组成:编辑框和选择框(列表框)组成,对应的类是CComboBox 1、改变下拉框大小:先点向下的箭头,就可以调整下拉框大小 2、如果 ComboBox 的 Sorted 属性设置为 true,    则新添加项将按字母顺序插入到列表中。    否则,在列表的结尾处插入项。 3、要立即响应选择框的改变(即选择框一改

心中有道的专栏 1398

FastGPT智能体开发:FastGPT OpenAPI 知识库接口

FastGPT OpenAPI 知识库接口

王国平的博客 323

MFC入门学习之控件(6)标签控件List Control的添加和使用(下)

前面对listctrl进行了理论描述,但是在实际的工程中,我们一定是希望能够通过listctrl的各种状态来进行代码的编写从而完成一定的任务。那么首先来看一下listctrl中item的选择。 功能1 得到listctrl中所有行的checkbox的状态       m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);       CString s

曹太强的专栏 2946

流体仿真软件:COMSOL Multiphysics二次开发_(3).流体仿真基础理论

流体仿真基础理论包括流体的基本性质、流体运动方程、边界条件、初始条件、湍流模型和网格生成等。在使用COMSOL Multiphysics进行流体仿真时,正确设置这些参数和条件是获得准确仿真结果的关键。通过实际应用案例,可以更好地理解如何在COMSOL中进行流体仿真,并提取和分析仿真结果。希望本文对流体仿真初学者和从业人员有所帮助。

kkchenjj的博客 1341

秋招突击——笔试整理——8/25——拼多多笔试整理

继续加油! 转变思维,有简单到复杂,由直观到抽象,这种贪心模拟的题目一直是这样的!

Blackoutdragon的博客 2400

MFC入门学习之控件(5)标签控件List Control的添加和使用(中)

按照上面的方法进行创建之后,发现存在两个问题: 1 button的getstate()得到的值是520,而不是理论值0x0008 2 当list文件位置超过一屏时,出现iIndex出错的情况 现在将解决思路呈上。 解决问题1的方法是读取这个值, 主要介绍问题2的解决,主要通过两部分,一步是解决了按键读取失败的问题,另一部是进行了一些美化处理工作。 第一步: //aboveall ca

曹太强的专栏 2760

YOLOv11涨点改进 | 全网独家创新,注意力改进篇 | TGRS 2025 | 引入APCM自适应像素级协同机制,动态增强目标区域、抑制背景噪声,助力YOLOv11做红外小目标检测有效涨点

本文提出了一种基于APCM模块改进的YOLOv11网络模型,通过像素级局部-全局协同建模增强目标特征并抑制背景噪声。APCM模块采用轻量化设计,无需复杂参数,能有效提升小目标检测性能。文章详细介绍了APCM的原理、优势及其在红外小目标检测中的应用,包括模块结构、核心代码实现和YAML配置文件修改方法。实验结果表明,该方法在NUAA-SIRST和IRSTD-1K数据集上优于现有技术,显著提高了复杂场景下的检测精度与鲁棒性。

Ai缝合怪、助力小伙伴高效发论文 117

C++ MFC combo box和list control控件的使用

Combo Box用法:combo box控件由两部分组成:编辑框和选择框(列表框)组成,对应的类是CComboBox 1、改变下拉框大小:先点向下的箭头,就可以调整下拉框大小 2、如果 ComboBox 的 Sorted 属性设置为 true, 则新添加项将按字母顺序插入到列表中。 否则,在列表的结尾处插入项。 3、要立即响应选择框的改变(即选择框一改变选项,就立刻将结果传递进去...

weixin_30263277的博客 467

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MFC_CImageList control

Using CImageList Visual Studio 2015 Other Versions   For the latest documentation on Visual Studio 2017, see Visual Studio 2017 Documentation. An image list, represe

Coder_LCB的博客 573

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MFC-CListCtrl重绘,添加按钮到单元格

MFC Listctrl 不支持单元格颜色设置,以及单击其中某一单元格时高亮显示,要想达成自己的目的,就只能对其重绘。 关于单元格中按钮的添加,说一下思路,首先要重写CButton类,将其单击事件接口进行重写,这里就是发送自定义消息,到主窗口界面进行响应,然后在要生添加按钮的单元格中生成新的按钮,加入链表中进行存放,同时记录对应的单元格的行列信息,然后在单元格进行重绘时,改变button 位置即...

若歌的博客 4496

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: MFC入门学习之控件(3)标签控件Tab Control的添加和使用
下一篇: MFC入门学习之控件(5)标签控件List Control的添加和使用(中)
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值