昨天QQ群里有人问我怎么实现CTreeCtrl的功能,说实话,我也是一个VC 的初级学者,没有弄过CTreeView的代码,参考了MSDN后,写了一小段代码,和大家一起分享,其中包括窗口切分,都是比较基础的内容。【以下代码是在VC .net 2005中调试成功】
 
1.首先建立一个“基于单文档”的MFC应用程序,在CMainFrame类中重载OnCreateClient()函数,其内部的代码为:
 
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
 
{
 
// TODO: Add your specialized code here and/or call the base class
 
m_wndSplitter.CreateStatic(this, 1, 2);//生成行列的静态窗口划分。
 
 
 
m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CMySplitterTreeView), CSize(0, 0), pContext);
 
m_wndSplitter.CreateView(0,1, RUNTIME_CLASS(CEditView), CSize(0, 0), pContext);
 
 
 
CRect r;
 
GetClientRect(&r);
 
 
 
//设置第行的高。
 
m_wndSplitter.SetRowInfo( 0, r.Height(), 0 );
 
//设置第列的宽。
 
m_wndSplitter.SetColumnInfo( 0, r.Width()/4, 0 );
 
 
 
return TRUE;
 
 
 
//将原来重载生成的返回代码注释掉。
 
//return CFrameWnd::OnCreateClient(lpcs, pContext);
 
}
 
 
 
2.上面的语句m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CMySplitterTreeView), CSize(0, 0), pContext);中的CMySplitterTreeView是自己添加的MFC类,其基类设置为CTreeView。
 
3.在生成的CMySplitterTreeView类中添加成员变量CTreeCtrl * ptheTree;【以备以后调用使用】。并重载OnInitialUpdate()函数,其内部的代码为:
 
 
 
void CMySplitterTreeView::OnInitialUpdate()
 
{
 
CTreeView::OnInitialUpdate();
 
 
 
// TODO: Add your specialized code here and/or call the base class
 
ptheTree = &GetTreeCtrl();
 
//::SetWindowLong(ptheTree->m_hWnd,TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS,NULL);
 
 
 
//修改CTreeCtrl控件的Style。
 
ptheTree->ModifyStyle(0,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);
 
 
 
TVINSERTSTRUCT tvInsert;
 
HTREEITEM hTreeItem;
 
tvInsert.hInsertAfter = NULL;//TVI_LAST;
 
tvInsert.hParent = TVI_ROOT;
 
tvInsert.item.mask = TVIF_TEXT;
 
tvInsert.item.pszText = L"一年级";
 
hTreeItem = ptheTree->InsertItem(&tvInsert);
 
tvInsert.hParent = hTreeItem;
 
tvInsert.item.pszText = L"1班";
 
ptheTree->InsertItem(&tvInsert);
 
tvInsert.item.pszText = L"2班";
 
ptheTree->InsertItem(&tvInsert);
 
ptheTree->Expand(hTreeItem,TVE_EXPAND); //默认为合上的【TVE_COLLAPSE】。
 
 
 
tvInsert.hParent = TVI_ROOT;
 
tvInsert.item.pszText = L"二年级";
 
hTreeItem = ptheTree->InsertItem(&tvInsert);
 
tvInsert.hParent = hTreeItem;
 
tvInsert.item.pszText = L"1班";
 
ptheTree->InsertItem(&tvInsert);
 
tvInsert.item.pszText = L"2班";
 
ptheTree->InsertItem(&tvInsert);
 
tvInsert.item.pszText = L"3班";
 
ptheTree->InsertItem(&tvInsert);
 
}
 
运行一下,就会发现在窗体被分割成两个部分,其中左侧的那个部分中有一个CTreeCtrl树形控
 

关于CTreeView中CTreeCtrl空间的使用的更多相关文章

  1. 第3/24周 区_SQL Server中管理空间的基本单位

    哇哦,SQL Server性能调优培训已经进入第3周了!同时你已经对SQL Server内核运行机制有了很好的认识.今天我会讲下SQL Server中的区管理,因为这是个很重要的话题,我们会在第23周 ...

  2. 77 swapon-激活Linux系统中交换空间

    Linux swapon命令用于激活Linux系统中交换空间,Linux系统的内存管理必须使用交换区来建立虚拟内存. 语法 /sbin/swapon -a [-v] /sbin/swapon [-v] ...

  3. PB中multieditline空间的“~r~n"转"~n"

    private: constant String MULEDIT_NEWLINE = "~r~n" //multilineEdit控件的换行符号 constant String M ...

  4. SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

    原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...

  5. MySQL中的空间扩展

    目录 19.1. 前言 19.2. OpenGIS几何模型 19.2.1. Geometry类的层次 19.2.2. 类Geometry 19.2.3. 类Point 19.2.4. 类Curve 1 ...

  6. 第3周 区_SQL Server中管理空间的基本单位

    原文:第3周 区_SQL Server中管理空间的基本单位 哇哦,SQL Server性能调优培训已经进入第3周了!同时你已经对SQL Server内核运行机制有了很好的认识.今天我会讲下SQL Se ...

  7. Oracle-11g 中使用表空间透明数据加密(TDE)

    Oracle-11g 中使用表空间透明数据加密(TDE)的限制 TDE 表空间加密方式会在数据读写过程中加解密数据.与在 SQL 层面做加解密的 TDE 列加密方式相比,其限制要大幅减少.例如:数据类 ...

  8. Reporting Service 2008 “报表服务器数据库内出错。此错误可能是因连接失败、超时或数据库中磁盘空间不足而导致的”

    今天遇到了两个关于Reporting Service的问题, 出现问题的环境为Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) .具体情况 ...

  9. Linux 磁盘空间查询&&解决Linux 中“磁盘空间不足”的问题

    一.linux 查看目录的剩余空间大小 两个命令df .du结合比较直观 df -h 查看整台服务器的硬盘使用情况 du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的 ...

随机推荐

  1. Es6中let与const的区别:(神奇的块级作用域)

    所谓的块级作用域:形成一个暂时性的死区:{    } 一.共同点: a:都是用来声明变量: b:都能形成一个块级作用域: c:都只能在声明变量的块级作用域里面有效: 二.不同点: 1.let: a:在 ...

  2. boost asio tcp 多线程

    common/pools.h // common/pools.h #pragma once #include <string> #include <boost/pool/pool.h ...

  3. vue axios----基于 Promise 的 HTTP 请求

    vue axiosvue2.0之axios接口請求管理功能特性axios API開始使用get請求post请求多个请求并发拦截器移除一个拦截器:自定义的 axios 实例添加拦截器:vue2.0之ax ...

  4. vue 学习二 深入vue双向绑定原理

    vue双向绑定原理 请示总体来讲 就是为data的中的每个属性字段添加一个getter/seter属性 以此来追踪数据的变化,而执行这部操作,依赖的就是js的Object.defineProperty ...

  5. d3操作svg路径动画,及dom移动

    图片跟随路径循环运动,dom也跟着路径运动(利用实时获取坐标位置的方法,改变transform) 1,准备路径 a,自己脑补路径 b,在ps上画好,然后在保存成png-24图片,背景透明,在网站htt ...

  6. 廖雪峰Java13网络编程-1Socket编程-2TCP编程

    1. Socket 在开发网络应用程序的时候,会遇到Socket这个概念. Socket是一个抽象概念,一个应用程序通过一个Socket来建立一个远程连接,而Socket内部通过TCP/IP协议把数据 ...

  7. NX二次开发-UFUN查询体的类型为实体还是片体UF_MODL_ask_body_type

    NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...

  8. union, enum, and struct, 以及结构填充和位字段实现。

    Table 4-9 Compiler storage of data objects by byte alignment Type Bytes Alignment char, bool, _Bool ...

  9. spark1.0.2读取hbase(CDH0.96.1)上的数据

    基本环境: 我是在win7环境下,spark1.0.2,HBase0.9.6.1 使用工具:IDEA14.1, scala 2.11.6, sbt.我现在是测试环境使用的是单节点 1.使用IDEA创建 ...

  10. ps-手捧城堡滴水云雾图

    1打开背景图 置入第二张图片 栅格化-加入蒙版-渐变 置入第三张图片 栅格化-用快速选择工具选取-加入蒙版 置入第四张图片 栅格化-调整图层-点击城堡建立蒙版-点击手的蒙版 ctrl-点击城堡的蒙版- ...