树控件
在工具栏中找到 Tree Control 控件:
①如果想让树控件有线,那么就在右侧属性栏中选择Has Lines ,将False 改为True;
②如果想让根节点有线,则选择属性 Lines At Root ,将 False 改为 True。
右键添加变量,更改作用域为Private,设置变量名为m_tree
①将图标复制放到项目文件夹下,右键项目顶端,打开所在的文件夹,点开文件夹里的res文件(资源文件),将.ico图标文件放入。
②在资源视图中点击Icon,右击选择“添加资源”,导入,默认刚才的res文件路径,把图标都一次性添加进来。添加完成之后,就可以在Icon栏里查看到你所添加的文件
注:①如果添加资源发现没有我们之前导入的图标,如何解决?
答:先在.rc文件中用语句的方式定义,之后在资源视图中右键Icon选择添加资源,新建资源,建立所需要的N个Icon空白图标,之后在.rc文件中删除或者更改宏,即可将图标导入。
②关于如何打开.rc文件:
我们可以预先编写语句如:
icon[1] = AfxGetApp()->LoadIconW(IDI_ICON1);
icon[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
icon[2] = AfxGetApp()->LoadIconW(IDI_ICON3);
icon[3] = AfxGetApp()->LoadIconW(IDI_ICON4);
其实我们在这之前并没有导入IDI_ICON2等关联的图标,也没有定义这个宏,
删除之前res文件添加的一个图标,如果我们重新打开项目,点击资源视图,系统会自动弹出一个框:
点击编辑代码,即可进入到.rc文件。
最终语句的修正如图所示:
下图是定义的一个图像列表,由于其运行方式与堆栈有关,我们将之写道.h文件中,如果不写到这里就导致显示不出来我们所定义的图标。 划重点!!!!
相应的代码如下:在上述过程执行完毕后,在.cpp文件的.OnInitDialog 函数中添加如下代码
// TODO: 在此添加额外的初始化代码
//树控件使用
//1、设置图标
//准备HICON图标
HICON icon[4];
icon[0] = AfxGetApp()->LoadIconW(IDI_ICON1);//通过全局的应用对象加载你的图标,参数为图标的ID,在Icon栏里查看
icon[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
icon[2] = AfxGetApp()->LoadIconW(IDI_ICON3);
icon[3] = AfxGetApp()->LoadIconW(IDI_ICON4);
//CImageList list;//图像列表 必须保存住这个集合 因此写到.h中做成员属性
//创建图片集合
list.Create(30, 30, ILC_COLOR32, 4, 4);//前两个参数为图像的尺寸,第三个参数为色位,图像列表包含的图象数;为几张图片开辟空间,一般和前者同值。
//上面只说是四张图,具体怎么添加这四张图如下:
for(int i = 0; i < 4; i++)
{
list.Add(icon[i]);
}
m_tree.SetImageList(&list,TVSIL_NORMAL);//第一个是把列表放到树控件里去但要求是地址符。第二个是参数是正常模式,不需要管
//2、设置节点
HTREEITEM root = m_tree.InsertItem(TEXT("根节点"), 0, 0, NULL);//每一个节点都是一个新的item 该语句是添加第一个节点。参数:1 节点名称 2 显示哪个编号的图片 3 当你选中这个图片后你想显示什么样的内容,默认为0 4 该节点父节点
HTREEITEM parent = m_tree.InsertItem(TEXT("父节点"), 1, 1, root);
HTREEITEM sub1 = m_tree.InsertItem(TEXT("子节点1"), 2, 2, parent);
HTREEITEM sub2 = m_tree.InsertItem(TEXT("子节点2"), 3, 3, parent );
//设置默认项
m_tree.SelectItem(sub1);
最终的运行结果如图: