想问问,TreeCtrl control 怎么样判断是展开了,并且读取它的每个结点的信息.

草履虫程序员 2006-02-25 09:07:13
请教,一个树型控件,从根开始到叶子有好几层,请问这个控件有没有展开如何判断,他得每层的结点信息如何读取?
...全文
379 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
草履虫程序员 2006-04-09
  • 打赏
  • 举报
回复
楼上的,我这个tree control控件在一个form里,而这个form所在的窗口是继于CFormView的,如果你这样做了,我该如何来放到自己的工程里,怎么样调用?
aa3000 2006-04-06
  • 打赏
  • 举报
回复
zzpzheng(Aeolus) 是正解,怎么不行呢?
草履虫程序员 2006-04-06
  • 打赏
  • 举报
回复
楼上这个好象不行吧。
MLiang 2006-04-06
  • 打赏
  • 举报
回复
class CTreeCtrlEx : public CTreeCtrl
{
DECLARE_DYNAMIC(CTreeCtrlEx)

public:
CTreeCtrlEx();
virtual ~CTreeCtrlEx();

protected:
DECLARE_MESSAGE_MAP()
public:
//获得hTreeItem的下一代子数的数量不包含跨代的(跟孙子没关系)
int GetSubItemCount(HTREEITEM hTreeItem)const;

//判断hItem是否含有满足条件(按照句柄或文字)的子树
BOOL ItemHasTheChild(HTREEITEM hItem, HTREEITEM hChild);
BOOL ItemHasTheChild(HTREEITEM hItem, CString strChild);

//获得第一个满足条件(Text)的子树选项
HTREEITEM GetFirstChildByText(HTREEITEM hItem, CString strChild);

//获取所选树的级别
int GetCurSelTreeLevel(void)const;
};

////////////////////////////////////////////////////////////////////////////////

// TreeCtrlEx.cpp : 实现文件
//

#include "stdafx.h"
#include "ExchangePlatform.h"
#include "TreeCtrlEx.h"


// CTreeCtrlEx

IMPLEMENT_DYNAMIC(CTreeCtrlEx, CTreeCtrl)
CTreeCtrlEx::CTreeCtrlEx()
{
}

CTreeCtrlEx::~CTreeCtrlEx()
{
}


BEGIN_MESSAGE_MAP(CTreeCtrlEx, CTreeCtrl)
END_MESSAGE_MAP()



// CTreeCtrlEx 消息处理程序

int CTreeCtrlEx::GetSubItemCount(HTREEITEM hTreeItem)const
{
int nCount = -1;
HTREEITEM hItem = GetChildItem(hTreeItem);

if(hItem)
nCount++;

do{
hItem = GetNextSiblingItem(hItem);
nCount++;
}
while(hItem);

return nCount;
}

BOOL CTreeCtrlEx::ItemHasTheChild(HTREEITEM hItem, HTREEITEM hChild)
{
if (!ItemHasChildren(hItem))
return FALSE;

//hItem的第一个子条目
HTREEITEM hItemTemp = GetChildItem(hItem);

int i = 0;
while(hItemTemp != NULL)
{
if (hItemTemp == hChild)
return TRUE;

hItemTemp = GetNextSiblingItem(hItem);
if(hItemTemp == NULL)
return FALSE;
}

return FALSE;
}

BOOL CTreeCtrlEx::ItemHasTheChild(HTREEITEM hItem, CString strChild)
{
if (!ItemHasChildren(hItem))
return FALSE;

//hItem的第一个子条目
HTREEITEM hItemTemp = GetChildItem(hItem);

int i = 0;
while(hItemTemp != NULL)
{
if (GetItemText(hItemTemp) == strChild)
return TRUE;

hItemTemp = GetNextSiblingItem(hItemTemp);

if(hItemTemp == NULL)
return FALSE;
}
return FALSE;
}

HTREEITEM CTreeCtrlEx::GetFirstChildByText(HTREEITEM hItem, CString strChild)
{
if (!ItemHasChildren(hItem))
return NULL;

//hItem的第一个子条目
HTREEITEM hItemTemp = GetChildItem(hItem);

while (hItemTemp != NULL)
{
CString strTemp = GetItemText(hItemTemp);

if (strTemp == strChild)
return hItemTemp;

hItemTemp = GetNextSiblingItem(hItemTemp);

if (NULL == hItemTemp)
return NULL;
}

return NULL;
}

int CTreeCtrlEx::GetCurSelTreeLevel(void)const
{
HTREEITEM hSelItem = GetSelectedItem();

if (hSelItem == NULL)
return -1;

HTREEITEM hParentItem = GetParentItem(hSelItem);

int nReslut = 0;
while (hParentItem != NULL)
{
nReslut++;
hParentItem = GetParentItem(hParentItem);
}

return nReslut;
}

草履虫程序员 2006-04-06
  • 打赏
  • 举报
回复
zzpzheng(Aeolus),你好,给我你的一段代码,给我点如何判断当前展开在哪一层?
taole0160 2006-04-06
  • 打赏
  • 举报
回复
zzpzheng(Aeolus),是对的,我也是这么用的,没错
郑再鹏 2006-03-14
  • 打赏
  • 举报
回复
可以从根节点开始依次判断每个节点是否展开
UINT nState = GetItemState(hItem, TVIS_EXPANDED);
if (0 != (nState & TVIS_EXPANDED))
{
// 表示已经展开
}
else
{
// 没展开
}
MapleInHG 2006-02-27
  • 打赏
  • 举报
回复
连续使用GetParentItem取得父结点,直到父结点为空.
草履虫程序员 2006-02-26
  • 打赏
  • 举报
回复
再想请教一下,如何判断处在第几层上面?假如根结点开始到下面有好几层,判断一下,当前在第几层上.
vcmute 2006-02-25
  • 打赏
  • 举报
回复
GetFirstVisibleItem Retrieves the first visible item of the specified tree view item.
GetNextVisibleItem Retrieves the next visible item of the specified tree view item.
GetPrevVisibleItem Retrieves the previous visible item of the specified tree view item.
MapleInHG 2006-02-25
  • 打赏
  • 举报
回复
通过CTreeCtrl::EnsureVisible判断一个子项是否可见可知其父结点有没有展开.
获取结点数据可用:CTreeCtrl::GetItemText, CTreeCtrl::GetItemData等.
内容概要:本文围绕“基于超局部模型与自抗扰ESO观测器的无模型预测电流控制改进策略”展开研究,提出一种结合超局部模型(ULM)与扩张状态观测器(ESO)的无模型预测电流控制(MFPCC)改进方法,旨在提升永磁同步电机(PMSM)电流环的动态响应性能与抗干扰能力。该策略利用超局部模型对系统行为进行局部逼近,避免依赖精确数学模型,同时引入自抗扰控制中的ESO实时观测并补偿系统内外部扰动,有效抑制参数摄动、负载变化及模型不确定性带来的影响。研究通过Simulink搭建完整的控制系统仿真模型,对传统MFPCC与所提改进策略进行对比分析,验证了新方法在电流跟踪精度、响应速度和鲁棒性方面的优越性。; 适合人群:具备电机控制、现代控制理论及Simulink仿真基础的电气工程、自动化及相关专业的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高性能电机驱动系统中电流环控制器的设计与优化;②为无模型控制与自抗扰控制的融合应用提供技术参考;③支撑相关课题的仿真验证、论文复现与创新方法研究。; 阅读建议:建议读者结合Simulink仿真模型深入理解控制结构与参数整定过程,重点关注ESO的观测性能与扰动补偿机制,并可通过改变负载条件、参数偏差等工况进行鲁棒性测试,进一步掌握该改进策略的核心优势与适用边界。
内容概要:本文围绕Scratch图形化编程平台,详细阐述了《人体感应灯光系统》这一贴近生活的AI科创作品的设计与教学应用。通过模拟真实智能家居中人体感应灯的工作原理,利用Scratch的侦测、逻辑判断、亮度特效调节等功能,实现了人物靠近自动亮灯、延时熄灭及环境亮度自适应等仿真功能。文章系统拆解了从场景搭建、核心逻辑设计、分层编程实现到调试优化的完整开发流程,并提供了基础版与进阶版可直接导入的源码,支持零基础快速上手与高阶创新拓展。同时构建了“基础—进阶—高阶”三层阶梯式教学体系,适配常规课堂、创客社团与赛事培优等多元教学场景,推动中小学AI教育的生活化、实践化与创新化发展。 适合人群:小学高年级至初中阶段学生,信息技术教师,创客教育从业者,以及参与青少年科创赛事的师生。 使用场景及目标:①作为中小学人工智能通识课程的教学案例,帮助学生理解智能感应与控制逻辑;②用于校内创客社团开展项目式学习;③支撑学生参加AI科创类赛事,完成高质量作品创作与答辩准备;④布置为课后综合实践作业,提升动手能力与科技素养。 阅读建议:建议结合提供的Scratch源码进行实践操作,在复现基础上尝试参数调优与功能扩展,如增加音效提示、多区域感应等,深化对编程逻辑与智能系统设计的理解。

15,976

社区成员

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

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