MFC树控件的属性和初始化(基于对话框的编程)

news2024/11/19 13:19:09

目录

一、控件属性

1.找控件Tree Control

2.Has Lines和Has Buttons属性

3.Lines At Root属性

二、代码操作Tree Control显示内容

1.添加Tree Control变量

2.在OnInitDialog中添加初始化代码

3.设置图标

3.1导入icon

3.2 写入加载图片代码

3.3添加节点

4.设置默认选项的API

5.添加切换选择显示事件


一、控件属性

1.找控件Tree Control

树控件在工具箱中的名字是Tree Control

左键拖入界面中,拉宽到相应宽度即可

 

2.Has Lines和Has Buttons属性

把Hsa Lines默认的False改为True之后,会显示虚线的引导线

开启前

开启后层次更明晰

而把Has Buttons改为True之后则会增加一个结点按钮

3.Lines At Root属性

Lines At Root改为True之后则增加了一个根结点之间的引导线,结构是更加明了一些

 

二、代码操作Tree Control显示内容

1.添加Tree Control变量

右键其属性,修改名称为m_tree,访问(作用域)private私有,类别不变,依然是Control控件类型

同样可以在CTreeCtrlDlg::DoDataExchange里找到我们刚创建好的变量,IDC_TREE1是Tree Control的ID名,报红是因为编译器没反应过来,正常情况,不用理睬

2.在OnInitDialog中添加初始化代码

在类视图中找到C项目名Dlg后缀问价下可以找到OnInitDialog,在// TODO: 在此添加额外的初始化代码 之后 return TRUE之前写入初始化代码

3.设置图标

3.1导入icon

将在网上下载好的图标,保存到创建好的项目的res(resource资源)文件夹之下,前三张透明背景的图片是在网上找好的,但是要把它们的图片类型统一改成.bmp后缀位图图片

 在资源视图的icon文件夹下导入在res中的icon(右键中,选添加资源而不是插入icon)

 

 

选择,导入——把res文件夹点开——把文件类型改为所有文件就可以找到我们的三张bmp文件了——

此时你会发现加载失败,是因为图片太大了,所以呢,需要找占内存更小的位图图片

在bing里搜icon国际版的images页面,可以在filter筛选器中筛选透明背景的图片

 

 

用PS创建32*32px像素的画布把想要的图片放进去,然后再保存成bmp格式,PS里创建32*32的画布,打开图层,文件——置入嵌入对象,导入刚刚下载好的图片——把背景图层眼睛关掉——文件存储为(找到BMP格式保存)起个名

 

 比如我起的名字是01,02,03,04

 

 这次导入成功

 

然而,加载好的图片,不在icon文件夹里,而是在一个加载图片之后新创建出的一个叫Bitmap的文件夹里,出问题了

这主要原因之一是图标格式不对,简简单单的将其他格式图片通过直接改后缀的方式是不行的,例如将.png后缀改为.ico,这样不行
解决方案:

通过问题的分析,我们知道要通过正规的渠道获得.ico格式的图标。

方法一:通过专门的.ico格式转换器将自己的.png、.jpg等图片格式转换成.ico格式的图标。此处给一个在线.ico图标转换器的连接:

 

方法二:直接在网上.ico图标免费资源库中下载。例如“图标宝”:

 

 

点击下载(save),在新页面点连接,右键图像另存为

 

 

把bmp格式的图片转换成ico格式的图标

 

导入之后VSicon之后,这次是在icon里了

3.2 写入加载图片代码


	// TODO: 在此添加额外的初始化代码
	//树控件使用
	//1.设置图标
	//准备HICON图标
	HICON icons[3];
	//icons[0] = AfxGetApp()->LoadIconW(IDB_BITMAP1);//1号位,关于ID的报错都不用管,编译器没反应过来
	//icons[1]= AfxGetApp()->LoadIconW(IDB_BITMAP2);//2号位
	//icons[2] = AfxGetApp()->LoadIconW(IDB_BITMAP3);//3号位
	//第二种
	icons[0]=theApp.LoadIconW(IDI_ICON1);
	icons[1] = theApp.LoadIconW(IDI_ICON2);//2号位
	icons[2] = theApp.LoadIconW(IDI_ICON3);//3号位
	/*CImageList list;*///放到TreeCtrlDlg.h中
	//创建一个放图片的集合
	//首先添加资源,添加32x32的.ioc位图资源
	list.Create(32, 32, ILC_COLOR32, 3, 3);//ILC_COLOR32 32位数色域,32*32是我们的图片像素,3,3表示有三张图片,给三张图片准备空间
	//添加具体的图片,将三个图标加载到图像序列
	for (int i = 0; i < 3; i++)
	{
		list.Add(icons[i]);
	}
	//为树形控件设置图像序列
	m_tree.SetImageList(&list, TVSIL_NORMAL);//正常模式;

如果出现这样的错误,有两个原因,一是没有导入图片,二是写错了图片的ID,系统找不到指定文件的问题,是因为加载图标资源出错,这种问题也会出现在传输MFC文件中,比如在网上下载好了别人的一个有图标的MFC文件,结果发现运行起来出现系统找不到指定文件的错误,就是因为在文件打包压缩过程中icon文件中的资源丢失导致的,要找到文件中使用icon的ID的代码,换成自己的图标导入就可以了

出现以下警告是正常的,而且会重复出现四次

3.3添加节点

根节点,父节点和子节点,我导入的是三张图片

所以就各一个

    //2.设置节点
	//根节点
	HTREEITEM root= m_tree.InsertItem(TEXT("根节点"), 0, 0, NULL);
	//0表示显示0号位的图片,icons[0],第二个0表示选中之后显示什么,NULL表示没有父节点
	//根节点作为父节点的parent
	//二级节点
	HTREEITEM parent = m_tree.InsertItem(TEXT("父节点"), 1, 1, root);
	//创建一个子节点
	//三级节点
	HTREEITEM sun = m_tree.InsertItem(TEXT("子节点"), 2, 2, parent);//此时parent父节点作为它的父亲

点击运行,如果运行起来没有图片那么看下面一段话

    //代码写到这里是没有图片的,是因为CImageList list;我们开辟到了堆区里
    //程序运行完就释放了图片集合,导致没有图片显示
    //在dlg.h头文件中添加一个pubilic图像列表类对象
    //所以要把它写到.h文件中作为成员变量,到了全局区中(变相对它做保存)
    //写到与TreeCtrlDlg.cpp(目前操作的这个文件夹)对应的TreeCtrlDlg.h中
    //先重新生成解决方案文件,再运行

至此,就可以成功运行了,图标没啥逻辑和审美含量,凑合着看吧

4.设置默认选项的API

    //设置默认选项的API
	m_tree.SelectItem(sun);//比如默认选中的是子节点

运行结果如下

5.添加切换选择显示事件

在类视图中选中Dlg后缀的文件,右键找到属性,闪电图标是事件,有一个关于选择selection的事件,add 事件指定选项从一项变成另一项

 

在事件函数中添加代码

 

void CTreeCtrlDlg::OnTvnSelchangingTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
	//在进行此事件书写之前
	//我们需要把之前设置的默认选中的sun节点代码注释掉,m_tree.SelectItem(sun);//比如默认选中的是子节点
	//才可以根据我们的跳转进行跟踪显示
	//获取当前项
	HTREEITEM item= m_tree.GetSelectedItem();
	CString name = m_tree.GetItemText(item);
	MessageBox(name);//弹出用户选中的内容
}

    //在进行此事件书写之前
    //我们需要把之前设置的默认选中的sun节点代码注释掉,m_tree.SelectItem(sun);//比如默          认选中的是子节点
    //才可以根据我们的跳转进行跟踪显示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抗击疫情静态HTML网页作业作品 大学生抗疫感动专题页设计制作成品 简单DIV CSS布局网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

HTML期末大作业(HTML+CSS+JavaScript响应式游戏资讯网站bootstrap网页)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

12月5日:thinkphp模板

今天学习ThinkPHP中的模板部分内容 接口开发&#xff0c;看不到dom结构&#xff0c;页面信息都是通过js或者一些其他技术引入 模板&#xff1a;是用来渲染前端页面&#xff0c;在后端的api接口开发中并不会常用到模板&#xff0c;但是后台管理页面却会使用MVC模式开发&#xf…

Camera API2使用流程分析

1.首先看下framework层CameraService服务初始化流程分析 <1>. main_cameraserver.cpp的路径 /frameworks/av/camera/cameraserver/ CameraService::instantiate&#xff08;&#xff09;实际调用的是BinderService中的函数&#xff0c;因为CameraService是继承BinderSer…

[附源码]计算机毕业设计JAVA疫情状况下生活物资集体团购系统

[附源码]计算机毕业设计JAVA疫情状况下生活物资集体团购系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a…

学习ITIL4又给数字人带来哪些优势

2019新的ITIL 指南将被称为ITIL 4。这个名称反映了ITIL 4 在支持个人和组织应对第四次工业革命方面的作用。 IT 是当今世界每个企业的核心。该更新将使ITIL 能够反映我们所处的快节奏和复杂的环境&#xff0c;以及新的工作方式和新兴实践&#xff0c;所有这些都不仅对于ITSM 专…

鹿蜀:一个基于日常开发任务体现开发人员工作状况的系统

一、背景 为了能够更方便、更直观的让Boss&#xff0c;让同伴&#xff0c;让自己了解到自己近期的工作情况&#xff0c;我拉了一个小队&#xff0c;利用农闲的时间&#xff0c;结合已有的项目管理系统中的数据&#xff0c;开发了一个新系统&#xff0c;名叫 “鹿蜀”。 二、系…

K8s 实战 动态PV StorageClass 存储类

前面我们学习了 PV 和 PVC 的使用方法&#xff0c;但是前面的 PV 都是静态的&#xff0c;什么意思&#xff1f;就是我要使用的一个 PVC 的话就必须手动去创建一个 PV&#xff0c;我们也说过这种方式在很大程度上并不能满足我们的需求&#xff0c;比如我们有一个应用需要对存储的…

说说你对slot的理解?

首先&#xff0c;大概了解一下插槽&#xff1a; 插槽是什么 ![在这里插入图片描述](https://img-blog.csdnimg.cn/90b04660769e49c286ee2e1821d2a2bb.png 插槽&#xff1a;在HTML中 slot 元素 &#xff0c;作为 Web Components 技术套件的一部分&#xff0c;是Web组件内的一…

【蓝桥杯选拔赛真题33】python回文数升级 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析

目录 ​编辑 python回文数升级 一、题目要求 1、编程实现 2、输入输出

Spring 框架介绍和使用

微信公众号&#xff1a;运维开发故事&#xff0c;作者&#xff1a;老郑 历史的选择 Spring 作为一个基础的框架&#xff0c;是在 Java EE 开发历史中&#xff0c;是成千上万公司选择。单独使用 Spring 的非常少了&#xff0c;很多都是用 Spring-Boot/Spring-Cloud 来开发&…

文件系统监视器

QFileSystemWatcher类通过监视指定路径的列表来监视文件系统对文件和目录的更改。 构造函数&#xff1a; 常用函数&#xff1a; addPath&#xff08;&#xff09;添加路径addPaths&#xff08;&#xff09;添加多个路径directory&#xff08;&#xff09;返回正在监视的目录的…

【JS】数据结构之队列

文章目录基本概念代码实现基本概念 队列&#xff1a;它是一种运算受限的线性表&#xff0c;FIFO&#xff08;先进先出&#xff09;特性&#xff1a;它只运行表的前端进行删除操作&#xff0c;在表的后端进行添加操作面对无法同时处理多个请求的场景&#xff0c;我们通常就会使…

HTML小游戏16 —— 消除游戏《魔法石》源码(附完整源码)

&#x1f482; 网站推荐:【神级源码资源网】【摸鱼小游戏】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f4ac; 免费且实用的计…

计算机组成原理(一)计算机系统概论

目录前言计算机硬件的组成和分类冯.诺依曼结构的基本思想运算器存储器控制器程序和指令控制器的基本任务指令流和数据流适配器与I/O设备输入设备计算机软件的组成与分类计算机系统的层次结构计算机系统的性能指标软硬件逻辑的等价性前言 计算机组成原理这门课可以说是计算机专…

b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

一个好的SpringCloudSpringBoot b2b2c 电子商务平台涉及哪些技术、运营方案&#xff1f;以下是我结合公司的产品做的总结&#xff0c;希望可以帮助到大家&#xff01; 搜索体验小程序&#xff1a;海哇 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买…

Aqwa 带你掌握船舶与海洋工程水动力理论与工程应用

作者&#xff1a;高巍&#xff0c;仿真秀科普作者 一、写在前面 20世纪60年代欧洲北海发现了储量丰富的油气资源&#xff0c;随着1973年第二次石油危机的到来&#xff0c;欧洲国家能源自主的迫切需要推进了北海油气资源的开发进程&#xff0c;推动了海洋工程技术发展。 为了…

【多线程(三)】生产者和消费者模式

文章目录3.生产者和消费者模式前言3.1生产者和消费者模式概述3.2生产者和消费者案例3.3 阻塞队列基本使用3.4 阻塞队列实现等待唤醒机制总结3.生产者和消费者模式 前言 在线程世界里&#xff0c;生产者就是生产数据的线程&#xff0c;消费者就是消费数据的线程。在多线 程开发…

SQL SERVER数据库修复之REPAIR_ALLOW_DATA_LOSS级别简介和实例

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;关于DBCC CHECKxxx系列命令 1. DBCC CHECKALLOC 2. DBCC CHECKCATALOG 3. DBCC CHECKDB &#xff08;1&#xff09;基本概念 &#xff08;2&#xff09;基本语法 &#xff08;3&#xff09;参数说明 &…

分析常见限流算法及手写三种(计数器、漏斗、令牌桶)代码实现

常见的限流算法分析 限流在我们日常生活中经常见到&#xff0c;如火车站门口的栏杆、一些景点的门票只出售一定的数量 等等。在我们的开发中也用到了这种思想。 为什么要限流 在保证可用的情况下尽可能多增加进入的人数,其余的人在排队等待,或者返回友好提示,保证里面的进行…