如何应用CTreeCtrl,不创建对话框工程也不用CTreeView,重新写一个类实现树形控件

lizhaochai 2008-11-30 12:42:54
一般来说在MFC中创建一个基于对话框的工程然后应用树形控件就可以完成树形视图的建立,
或者用CTreeView,问题是假设我现在建的是个单文档工程,想要动态实现树形视图怎么实现?
网上google了很久就是没明白,即使我重新设计一个类,继承自其他的窗口类,
把CTreeCtr对象作为它的成员,可是就是无法显示。
希望大侠给指点一下,或举个简单建立个类的例子!谢谢,明天追加100分!
初学者问题大侠见笑了,虽然看了网上的例子还是不明白!希望大侠能给个简单例子!
...全文
284 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tinary3v0 2008-11-30
  • 打赏
  • 举报
回复
1.楼主如果直接想用CTreeCtrl,而不是想要给CTreeCtrl增加功能或者改变外观,那大可不必再重新写一个类。
2.如果楼主要想通过继承其他类来写一个自己的CTreeCtrl这样的类,现在就别考虑了,那样的话工作量会很大。
你不但要自己在窗口上绘制出CTreeCtrl本来就有的那些东西,还要添加鼠标响应键盘响应 等很多事件处理,做起来也不划算。
3.如果是简单的在单文档中显示CTreeCtrl,如果你现在没有让它显示出来,那可能就是像2楼所说的一样,你建立一个CTreeCtrl类对象
然后还需要使用Creat方法来创建它,因为它是一个窗体,你必须得生成它。
4.除了2楼所说的问题外,你是否给你动态创建的这个CTreeCtrl绑定了某个ID了?
要注意CTreeCtrl::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);最后一个值可是ID,这个ID可一定要有啊,
随便添加一个数字是不行的,需要到资源视图的StringTable里面去添加一个ID。比如:ID_MYCTREECTROL 我的CTreeCtrl
5.尽量不要把你的CTreeCtrl对象弄成局部变量,一旦你以后在View类中使用的时候,可能需要响应CTreeCtrl的某些消息或者调整它的位置等。
如果是临时变量,我想对大部分的程序来说都不可接收。
响应一个动态创建的CTreeCtrl需要自己来添加消息处理过程,用ClassWizard已经不能做了。 所以你需要自己在头文件中做好函数声明:
例如:
afx_msg void OnReturnTree1(NMHDR* pNMHDR, LRESULT* pResult);
DECLARE_EVENTSINK_MAP()
//}}AFX_MSG

在cpp文件中添加消息映射:
BEGIN_MESSAGE_MAP(C**view, CView)
//{{AFX_MSG_MAP(CIrregularDlg)
ON_NOTIFY(NM_RETURN, ID_MYCTREECTROL, OnReturnTree1) //这里就能看出ID的重要性了,通过ID才能做到消息映射
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

最后也是在Cpp文件中添加函数实现:
void C**view::OnReturnTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here

*pResult = 0;
}

6.只要你做好了创建过程和消息映射过程,CTreeCtrl在CView里面使用和在Dialog上使用没有什么区别。
cnzdgs 2008-11-30
  • 打赏
  • 举报
回复
把你的情况描述清楚一些,如果只是单文档中使用树视图,在创建项目的最后一步把视图类的基类改为CTreeView即可。
frisky_lobo 2008-11-30
  • 打赏
  • 举报
回复
可以考虑使用SDK,即用TreeView直接创建窗口,跳过MFC,这样也不需要对话框
season030441 2008-11-30
  • 打赏
  • 举报
回复
考虑一下 建一个对话框栏 将树形控件事先放到这个对话框中 然后通过控制对话框的显示来实现 动态实现
ilovedrv 2008-11-30
  • 打赏
  • 举报
回复
看下这篇帖子

在MFC中创建动态控件的生成与响应

http://hyzhujc.bokee.com/viewdiary.14014273.html
receive099 2008-11-30
  • 打赏
  • 举报
回复
不懂,帮顶
android2008 2008-11-30
  • 打赏
  • 举报
回复
不懂,帮顶
lizhaochai 2008-11-30
  • 打赏
  • 举报
回复
谢谢各位大侠,问题就是本人是个初学者,对GDI不是很熟悉又要完成任务
无奈!如果从头把GDI方面的知识啃一边也来不及,所以麻烦各位大侠详细点说明。
在此拜谢!
mynamelj 2008-11-30
  • 打赏
  • 举报
回复
这取取决于你的数据结构及GDI方面的熟悉度
Conry 2008-11-30
  • 打赏
  • 举报
回复
不只CTreeCtr对象作为它的成员,还要在包含CTreeCtr对象的窗口的OnCreate里面创建才行

int CYourWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
if (!m_wndTree.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|
TVS_HASBUTTONS|TVS_LINESATROOT|TVS_EDITLABELS,
CRect(0, 0, 0, 0), this, 100))
{
TRACE0("Failed to create treectrl\n");
return -1;
}


...
}
lizhaochai 2008-11-30
  • 打赏
  • 举报
回复
UP
内容概要:本文介绍了基于低秩逼近代理模型的N-1安全约束经济调度快速计算方法,并提供了完整的Matlab代码实现。该方法针对电力系统中N-1故障场景下的安全约束经济调度(SCED)问题,提出采用低秩逼近技术构建高效代理模型,有效降低高维优化问题的计算维度与复杂度,显著提升多场景下调度方案的求解效率。文中系统阐述了数学建模过程、代理模型构造原理、低秩近似算法推导及其实现流程,特别适用于含高比例可再生能源接入、存在大量不确定性因素的现代电力系统优化调度,能够在保障计算精度的同时满足实时性与准实时性应用需求。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员和工程技术人员,尤其适合从事电力系统经济调度、安全稳定分析、不确定性建模与高性能计算等相关领域的专业人士。; 使用场景及目标:①应用于大规模电力系统在N-1故障条件下的快速安全校核与经济调度决策支持;②为高渗透率新能源接入的电力系统提供高效的多场景优化求解方案;③支撑日前调度、实时调度等对计算速度与精度均有较高要求的工程应用场景。; 阅读建议:读者应结合所提供的Matlab代码深入理解算法实现细节,建议在标准测试系统上复现并调试程序,以掌握低秩逼近方法在电力系统优化中的具体应用技巧,并可根据实际研究方向进行模型拓展、性能对比与算法改进。
内容概要:本文档聚焦于电力系统黑启动与负荷恢复的研究,结合Matlab代码实现,系统探讨了电力系统在发生大面积停电事故后的恢复策略。研究内容涵盖了黑启动过程中的关键环节,如发电机组的启动顺序、恢复路径规划、负荷逐步投入等,并通过Matlab仿真对恢复流程进行建模与验证,旨在优化恢复时序与资源配置。文档还关联了智能优化算法、机器学习、路径规划、电力系统故障分析与调度优化等多种技术方向,展现了其在科研与工程实践中的广泛应用前景。配套代码和资料可通过提供的网盘链接下载,便于读者复现与拓展研究。; 适合人群:具备电力系统基本理论知识和Matlab编程能力的研究生、高校科研人员及从事电力系统运行、调度与控制相关工作的工程技术与研究人员。; 使用场景及目标:①用于电力系统恢复策略的教学演示与科研仿真分析;②支撑黑启动方案的设计、评估与优化决策;③为复杂电网故障后快速恢复供电提供算法模型与技术参考; 阅读建议:建议读者结合网盘中的完整代码资源,按照文档所述技术路线逐步实践,重点关注黑启动过程中机组启动逻辑与负荷恢复的协调机制,并可进一步拓展至多能源协同恢复、智能算法优化等前沿研究方向。
源码直接下载地址: https://pan.quark.cn/s/1eceaa56687c Chrome 开发者工具中文手册 =============== Chrome DevTools 是公认的优秀的前端调试工具,由于功能强大,所以使用起来有一定的学习门槛,与此同时 Chrome DevTools 暂时没有中文手册,对于不太熟悉英文的同学会比较吃力。 本项目的初衷是为想使用或者正在使用 Chrome DevTools 的同学提供一个中文手册,方便大家学习使用这个优秀的工具,提高前端开发效率和质量! 翻译流程 第一阶段 先将 Chrome DevTools 的内容按现有的目录结构翻译成中文,其中: 文章正文内容均放在 目录下,采用 格式。 文章中所用到的图片资源暂时先用现有英文手册的原始链接,后续图片资源会统一托管到七牛云存储 文件命名规则 文件名为 Chrome DevTools 对应文章超链接中 后的部分。 所有的空格和 用 代替。 例如: 这篇文档,对应 这个文件。 对于下级子页面文档,将其放在以父级文档名称命名的文件夹下面。 例如: 属于 那么将放置在 。 第二阶段 根据翻译文档,制作成似在线手册或者与官方文档似的网站,方便大家参阅。 参与项目 欢迎你参与翻译本项目,在翻译的过程中,可以锻炼你的英语能力和 Chrome DevTools 的实际应用能力,同时还为他人提供方便,何乐而不为? 一个个 commit 堆积起来就是一个了不起的 repo,欢迎你 Fork 并提交 Pull Request 或者 Issue ,哪怕是改正一个错别字、修正一个病句,我们都会很高兴。 参与方法和步骤如下: 登录 https://.com Fork 创建您的特性分支 (gi...

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧