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

lizhaochai 2008-11-30 12:42:54
一般来说在MFC中创建一个基于对话框的工程然后应用树形控件就可以完成树形视图的建立,
或者用CTreeView,问题是假设我现在建的是个单文档工程,想要动态实现树形视图怎么实现?
网上google了很久就是没明白,即使我重新设计一个类,继承自其他的窗口类,
把CTreeCtr对象作为它的成员,可是就是无法显示。
希望大侠给指点一下,或举个简单建立个类的例子!谢谢,明天追加100分!
初学者问题大侠见笑了,虽然看了网上的例子还是不明白!希望大侠能给个简单例子!
...全文
303 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
内容概要:本文基于Matlab/Simulink平台,对电励磁同步电机在异步牵入、稳态运行及能耗制动三个阶段的全周期动态特性进行建模仿真与系统研究。研究构建了完整的电机数学模型与仿真系统,重点分析了电机从异步启动到同步运行的过渡过程、稳态运行时的电磁与机械性能,以及执行能耗制动时的减速特性与能量耗散机理。通过仿真,揭示了励磁电流、负载转矩与转速在不同工况下的动态响应规律与耦合关系,为电机的控制策略设计与性能优化提供了理论依据和数据支持。; 适合人群:具备电机学、电力电子与电力拖动基础知识的电气工程及相关专业的研究生、科研人员与工程技术人员。; 使用场景及目标:①研究电励磁同步电机的启动特性,解决异步牵入过程不稳定或失败的问题;②分析电机在不同负载下的稳态运行性能,优化运行效率;③设计和验证能耗制动策略,精确控制制动过程的减速时间和能量消耗。; 阅读建议:在学习过程中,应结合电机的基本原理,深入理解仿真模型中各模块(如电机本体、励磁控制、负载模型)的搭建逻辑,并通过调整仿真参数(如励磁电压、负载大小)来观察和分析系统动态响应,以加深对电机全周期运行特性的理解。
内容概要:通过介绍短时倒谱(Cepstrogram)计算方法,开展时-倒频分析研究,深入探讨倒谱分析机理、短时倒谱构建逻辑及时-倒频分析的内涵。文中系统对比了时-倒频分析与全局倒谱、传统时频分析方法的差异,阐明其在卷积特征解耦、非平稳信号跟踪、微弱周期特征增强及多维特征融合方面的技术优势,并分析其在语音识别、机械故障诊断、音频处理和非平稳时序信号分析中的典型应用,同时指出其在分辨率、计算复杂度等方面的局限性并提出优化方向。; 适合人群:具备一定信号处理或数据分析基础,从事机械、通信、声学或自动化等领域研究的研发人员及研究生。; 使用场景及目标:① 掌握短时倒谱与时-倒频分析的理论基础与实现方法;② 应用于语音信号处理、机械设备故障诊断、音频相似性检测等工程实践;③ 对比传统方法,提升对复杂非平稳信号中隐含周期特征的识别能力; 阅读建议:此资源以Matlab代码实现为核心,强调理论与实践结合,建议读者在理解核心算法原理的基础上,动手运行代码并调试参数,结合具体应用场景深化对方法适用性与局限性的认识。

15,976

社区成员

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

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