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

MFC】常用控件:形控件Tree Control 01、目录 文章目录01、目录02、形控件简介03、形控件的通知消息04、 形控件的相关数据结构05、形控件的创建06、CTreeCtrl类的主要成员函数07、形控件的应用实例08、小结 02、形控件简介 形控件在Windows系统中是很常见的,例如资源管理器左侧的窗口中就有用来显示目录的形视图。形视图中以分层结构显示数据,每层的缩进不同,层次越低缩进越多。形控件的节点一般都由标签图标两部分组成,图标用来抽象的描述数据,能够使形控件的层次关系更加清晰。 形控件在插入新的节点时 阅读详情

目录

一、控件属性

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);//比如默          认选中的是子节点
    //才可以根据我们的跳转进行跟踪显示

MFC开发(16)】形控件Tree Control 1.形控件的属性配置 (1)Check Boxes :默认为false,如果选择为true的话每个节点前面会带有一个方框 (2)Edit Labels:默认为false,如果选择为true的话每个节点的名称可以编辑修改 (3)Has Buttons:默认为false,如果选择为true的话展开的节点前面会有加号或者减号 (4)Has Lines:默认为false,如果选择为true的话会出现线如下所示 (5) Lines At Root:默认为false... 阅读详情

相关推荐

MFC三态树控件自绘

前言     在项目中想实现一个三态,在网上找了一些例子,主要参考了《三态选择实现终结者 》,其中作者讲解清晰,非常容易理解。其具体实现的思想是以Windows标准的CTreeCtrl类为基类派生一个类CMutiTreeCtrl,我们可以直接使用,这里主要是对使用的过程做下笔记。

2806

mfc对话框实现属性

当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置。本文针对这种方法来讨论几种可能实现的方案

MFC创建非模态对话框

非模态对话框弹出后,程序可以在不关闭该对话框的情况下继续执行,在转入到应用程序其他部分的代码时可以不需要用户做出响应。在主框架类的头文件添加文件包含:#include ”DialogModalless.h”当选择“查看”菜单中的“非模态对话框”菜单项时,弹出左面的对话框。选择左边树控件中的某个班级,在右边的列表控件显示该班级的学生。3.实现对话框的功能:添加控件关联变量 添加消息响应函数。2. 在构造函数中初始化: m_pModallessDlg=NULL;4. 添加菜单消息响应函数,显示对话框

qq_51704523的博客 2297

MFC控件使用-TreeControl树控件

MFC控件使用-TreeControl树控件

weixin_50920631的博客 941

MFC形组件显示文件形目录结构

MFC实现文件状目录结构的展示,tree control,list box,OnTvnSelchangedTree1,HTREEITEM,MFC形控件开一个 MFC 项目来实现文件目录的展示。

方方洛的博客 1235

MFC中TreeList的基本操作

【代码】MFC的基本操作。

行为艺术家Zzz的博客 560

MFC——对话框的创建及使用

文章目录MFC对话框的创建实例对话框程序的创建过程:对话框应用程序框架介绍设计界面工具箱MFC常用控件静态文本框CStatic普通按钮 CButton编辑框 CEdit组合框(下拉框)CComboBox列表控件 CListCtrl树控件 CTreeCtrl标签控件 CTabCtrl MFC对话框的创建实例 对话框程序的创建过程: 选择“文件 | 新建 | 项目”菜单; 在“新建项目”对...

跑不了的你的博客 2万+

MFC树控件的使用详解

本文介绍了形控件的配置与使用方法。主要内容包括:1. 通过HasLines属性添加节点间连线,用LinesAtRoot属性设置根节点连线;2. 使用HasButtons属性添加折叠按钮;3. 通过CImageList设置节点图标,包括资源准备代码实现;4. 设置默认选中项切换响应函数;5. 详细讲解了相关接口,如LoadIcon()、Create()、SetImageList()InsertItem()的使用方法。文章提供了完整的配置步骤代码示例,帮助开发者快速实现形控件的各项功能。

lzb_kkk的博客 1361

VS2010-MFC:单文档左侧可停靠对话框(包含树控件)的实现

在程序开发中我们经常看见有一些软件左侧有目录或者是图层,点击之后就可以右侧View窗口显示相关的内容,其实实现这种机制有两种方法,第一种就是对MFC的View窗口进行窗口分割,左侧的窗口view类派生于CTreeView,其中CTreeView自带一个变量用于View中的树控件的控制。第二种方法就是用一个可停靠的面板嵌套一个对话框,再在对话框中添加树控件,同样可以达到相同的目的。 以下详...

HW140701的博客 8965

MFC列表控件ListControl树控件TreeControl

列表控件  列表相关的类:CListCtrl-父类是CWnd,本质是一个控件; CListView-父类是CView,本质是一个视图。相当于在视图中嵌入了一个CListCtrl控件  列表控件的使用    1.1 显示方式:LVS_ICON/LVS_SMALLICON/LVS_LIST/LVS_REPORT   1.2 图标:CListCtrl::SetImageList;CListCt

超越 4426

MFC常用控件使用(文本框、编辑框、下拉框、列表控件、树控件)

本文章主要介绍下MFC常用控件的使用,包括静态文本框(Static Text)、编辑框(Edit Control)、下拉框(Combo Box)、列表控件(List Control)树控件(Tree Control)的使用。

new9232的博客 1万+

14 树控件及标签页编程

1、树控件 树控件(Tree Control)的常用属性如下: 常用属性设置: 属性 含义 has buttons True 有展开按钮 has lines True 有展开线 lines at root True 有根节点 ...

王木木 275

黑马MFC教程总结(后续更新)

1基于对话框学习控件 1.1对话框 模态非模态 1.2按钮 两个captain修改内容 直接输入内容 1.3点击触发事件 右侧属性闪电图标;右键按钮 添加事件处理程序;双击按 钮 1.4插入窗口 窗口 右键 添加类 1.5模态窗口创建 CDlgExe cdlg 1.5.1 dlg.DoModal() 1.6非模态创建 1.6.1 CDlgshow dlg 写到.h做成员 1...

__2得很别致 3849

MFC中的可拖拽树控件ctreeEx开发指南

在现代的软件应用中,拖拽操作提供了一种直观且用户友好的交互方式。特别是在形控件中,通过拖拽,用户可以快速地对数据项进行移动、排序或重新组织,极大地增强了软件的可用性效率。CTreeCtrl类是MFC(Microsoft Foundation Classes)中的一个控件类,用于创建管理形视图控件。形视图控件是一种图形界面元素,它以状层次结构展示信息,适用于表现如文件系统、组织结构等具有层次性的数据。

weixin_42518334的博客 1144

增强型MFC树控件(MyTreeCtrl)的开发与实现

在Windows编程中,CTreeCtrl控件是用于展示状层级结构数据的主要手段,其属于MFC(Microsoft Foundation Classes)库中的一个控件。本章将为你介绍CTreeCtrl控件的基础知识,为后续定制化增强功能提供基础。在编程中,形结构是一种常见且强大的数据结构,它模拟了现实世界中枝的分层结构。在MFC的CTreeCtrl控件中,形结构用于展示层次化数据。理解形结构的逻辑定义对于实现在中新增子节点兄弟节点功能至关重要。

weixin_35756690的博客 952

MFC/C++学习系列之简单记录11——树控件的使用

在之前的界面设计中使用得很少,但是可以学习一下,以备不时之需!学会了设置图标类型的树控件

arriettyandray的博客 814

基于VTK的MFC应用程序开发(3)

之前介绍了基于VTK的单文档应用程序开发,并以图像重采样为例,实现了一个简单的图像重采样的应用程序。对于多文档应用程序,与单文档应用程序基本一致,这里就不再讲述。对话框应用程序是MFC应用程序中一个使用非常广泛的框架,本节就以医学图像可视化中常用的四视图框架程序的实现为例,讲述基于VTK的对话框应用程序开发。 1.  利用VSCMake建立一个空的MFC对话框程序框架。 利用VS创建一个MF

东灵工作室 1万+
上一篇: MFC列表控件的用法(基于对话框的编程)
下一篇: MFC基于对话框——仿照Windows计算器制作C++简易计算器
L洛L
博客等级 码龄5年 1万+粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值