社区
数据库
帖子详情
怎样得到一棵树的最后一级的HITEM?在线
juanling
2003-08-21 02:09:41
如何才能得到一棵树中的最小的节点(最后一级)的hitem?请给出具体代码,多谢!!
...全文
30
2
打赏
收藏
怎样得到一棵树的最后一级的HITEM?在线
如何才能得到一棵树中的最小的节点(最后一级)的hitem?请给出具体代码,多谢!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
akun
2003-08-21
打赏
举报
回复
只有能得到根节点,只有一个~~~
bcpl
2003-08-21
打赏
举报
回复
一棵树不一定只有一个最小节点,没法做
重载树控件CTreeCtrl,v1.1
如需要源代码,请发邮件给我。动态库中提供获取作者的Email接口函数 public: //功能:获取作者邮箱 //输入:无 //输出:无 //返回:作者信息 CString GetAutherEmail(); //功能:判断输入的节点句柄是否存在 //参数:[in] h
Item
节点句柄 //返回:true节点存在,false节点不存在 bool Find
Item
Exist(HTREE
ITEM
h
Item
); //功能:设置一个节点字体颜色 //参数:[in] h
Item
节点句柄 // [in] clrText 节点字体颜色 //返回:true设置字体颜色成功,false设置字体颜色失败 //注:内部不包含刷新 bool Set
Item
TextColor(HTREE
ITEM
h
Item
, COLORREF clrText); //功能:获取一个节点字体颜色 //参数:[in] h
Item
节点句柄 // [out] clrText 节点字体颜色 //返回:true获取字体颜色成功,false获取字体颜色失败 //注:内部不包含刷新 bool Get
Item
TextColor(HTREE
ITEM
h
Item
, COLORREF &clrText;); //功能:设置扩展按钮的边框颜色 //参数:[in] clrButtonBorder 扩展按钮的边框颜色 //返回:无 //注:内部包含刷新 void SetExpandedButtonBorder(COLORREF clrButtonBorder); //功能:设置扩展按钮的十字颜色 //参数:[in] clrButtonCross 扩展按钮的十字颜色 //返回:无 //注:内部包含刷新 void SetExpandedButtonCross(COLORREF clrButtonCross); //功能:刷新背景 //输入:无 //输出:无 void RedrawTreeCtrl(); //功能:设置画线的样式 //输入:[in] nPenStyle 画线样式 // [in] nWidth 画线宽度 // [in] crColor 画线颜色 //返回:无 //注:内部包含刷新 void SetPenLineStyle(int nPenStyle, int nWidth, COLORREF crColor); protected: //功能:判断输入的节点句柄是否存在 //参数:[in] h
Item
节点句柄 //返回:true节点存在,false节点不存在 bool FindChild
Item
Exist(HTREE
ITEM
hParant
Item
, HTREE
ITEM
h
Item
); //功能:绘制文字 //参数:[in] pDC 设备DC //返回:无 void OnDrawText(CDC *pDC); //功能:绘制一个节点文字 //参数:[in] pDC 设备DC // [in] h
Item
节点句柄 //返回:true成功,false失败 bool OnDraw
Item
Text(CDC *pDC, HTREE
ITEM
h
Item
); //功能:绘制展开按钮 //参数:[in] pDC 设备DC //返回:无 void OnDrawButton(CDC *pDC); //功能:绘制一个节点展开按钮 //参数:[in] pDC 设备DC // [in] h
Item
节点句柄 //返回:true成功,false失败 bool OnDraw
Item
Button(CDC *pDC, HTREE
ITEM
h
Item
); //功能:绘制一个节点展开按钮(节点展开) //参数:[in] pDC 设备DC // [in] h
Item
节点句柄 //返回:true成功,false失败 bool OnDraw
Item
ButtonExpanded(CDC *pDC, HTREE
ITEM
h
Item
); //功能:绘制一个节点展开按钮(节点未展开) //参数:[in] pDC 设备DC // [in] h
Item
节点句柄 //返回:true成功,false失败 bool OnDraw
Item
ButtonNotExpanded(CDC *pDC, HTREE
ITEM
h
Item
); //功能:绘制节点连接线 //参数:[in] pDC 设备DC //返回:无 void OnDrawLines(CDC *pDC); //功能:绘制根节点连接线 //参数:[in] pDC 设备DC //返回:无 void OnDraw
Item
Lines(CDC *pDC, HTREE
ITEM
h
Item
); private: //功能:获取画线的区域(排除扩展按钮的区域) //参数:无 //返回:创建的画线的区域 void CreateRgnForDrawLines(CRgn &rgnDraw;);
VC类似QQ游戏大厅导航的树型控件
第一步:新建一个基于对话框的MFC工程,拖动一棵标准树型控件放于界面之上。添加一个新类CTreeCtrlBT派生自CTreeCtrl。 第二步:为该类添加一些消息响应以及虚函数。其详细作用如下: void PreSubclassWindow(); //用于添加初始化控件的相关信息 WM_SIZE //控件区域发生变化时候的处理 WM_PAINT //绘制控件 WM_MOUSEMOVE //主要获取鼠标所在位置的单元项 第三步:TreeCtrlBT.h中首先声明一个结构用于保存单元项的相关信息,并把所有项的信息放入一个map。实现代码如下: typedef struct tag
Item
Msg { HTREE
ITEM
h
Item
; //项的句柄 CBitmap
Item
Bitmap; //项的位图 COLORREF crTransparent; //透明颜色 tag
Item
Msg() { h
Item
= NULL; crTransparent = RGB(255,255,255); } ~tag
Item
Msg() { if (
Item
Bitmap.GetSafeHandle() ) {
Item
Bitmap.DeleteObject(); } } }
ITEM
_MSG; typedef map
ITEM
MSG_MAP; 第四步:计算控件的客户区域大小,以及滚动条滚动的偏移量。详细过程参考源代码 Calculate函数。 第五步:添加接口函数以及成员变量。如下: (注意:TransparentBlt函数,需要包含msimg32.dll) //设置背景位图BOOL SetBackgroudBitmap( UINT nID );BOOL SetBackgroudBitmap(LPCTSTR lpszRecourceName);//设置某一项位图void Set
Item
Bitmap(HTREE
ITEM
h
Item
, UINT nIdBitmap);void Set
Item
Bitmap(HTREE
ITEM
h
Item
, LPCTSTR lpszBitmap);//设置展开收缩的图表void SetExpandBitmap(UINT nIdExpand, UINT nIdCollapse, COLORREF crTransparent = RGB(255,255,255));//插入新的项目HTREE
ITEM
Insert
Item
Ex(HTREE
ITEM
hParent, LPCTSTR lpsz
Item
, UINT nIdBitmap = 0, OLORREF crTransparent = RGB(255,255,255));HTREE
ITEM
Insert
Item
Ex(HTREE
ITEM
hParent, LPCTSTR lpsz
Item
, LPCTSTR lpszBitmap, COLORREF crTransparent = RGB(255,255,255));//开启横线void EnableRowLine( BOOL bEnable = TRUE );//是否开启横线BOOL IsEnableRowLine();//开启根节点背景void EnableRootBk( BOOL bEnable = TRUE );//是否开启根节点背景BOOL IsEnableRootBk();//获取某一项信息
ITEM
_MSG* Get
Item
Msg(HTREE
ITEM
h
Item
); 第六步:绘制控件。需要的绘制函数如下: //绘制渐变色矩形区域void GradientFillRect( CDC *pDC, CRect &rect, COLORREF col_from, COLORREF col_to, bool vert_grad ); //绘制控件背景void DrawBackgroudBitmap(CDC* pDc); //绘制单元项void Draw
Item
( CDC* pDC ); //绘制单元项下部横线void DrawRowLine(CPoint ptBegin, CPoint ptEnd, CDC *pDc = NULL); //绘制展开收缩按钮void DrawExpand(CRect rect, int state,
mfc经典案例
void CLeftView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); CRuntimeClass *prc =RUNTIME_CLASS(CLeftView); BOOL b = prc ->IsDerivedFrom(RUNTIME_CLASS(CDC)); b = this ->IsKindOf(RUNTIME_CLASS(CDC)); static int i = 0; if (i)return; ++i; ModifyStyle(0,TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS | TVS_HASLINES); m_ilist.Create(16,16,ILC_COLOR32,4,4); m_ilist.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); m_ilist.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); m_ilist.Add(AfxGetApp()->LoadIcon(IDI_FILE)); m_Tree.SetImageList(&m_ilist,TVSIL_NORMAL); m_h
Item
= m_Tree.Insert
Item
("我的电脑",0); DWORD dwDrives; char a; CString DriveName; dwDrives = GetLogicalDrives(); a = 'A'; while (dwDrives > 0) { if (dwDrives % 2 == 1) { DriveName.Format("%c:", a); m_Tree.Insert
Item
(DriveName, 1, 1, m_h
Item
); } a++; dwDrives /= 2; } m_Tree.Expand(m_h
Item
,TVE_EXPAND); }
c++文件浏览器
void CLeftView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); CRuntimeClass *prc =RUNTIME_CLASS(CLeftView); BOOL b = prc ->IsDerivedFrom(RUNTIME_CLASS(CDC)); b = this ->IsKindOf(RUNTIME_CLASS(CDC)); static int i = 0; if (i)return; ++i; ModifyStyle(0,TVS_LINESATROOT|TVS_HASBUTTONS|TVS_SHOWSELALWAYS | TVS_HASLINES); m_ilist.Create(16,16,ILC_COLOR32,4,4); m_ilist.Add(AfxGetApp()->LoadIcon(IDI_ICON1)); m_ilist.Add(AfxGetApp()->LoadIcon(IDI_ICON2)); m_ilist.Add(AfxGetApp()->LoadIcon(IDI_FILE)); m_Tree.SetImageList(&m_ilist,TVSIL_NORMAL); m_h
Item
= m_Tree.Insert
Item
("我的电脑",0); DWORD dwDrives; char a; CString DriveName; dwDrives = GetLogicalDrives(); a = 'A'; while (dwDrives > 0) { if (dwDrives % 2 == 1) { DriveName.Format("%c:", a); m_Tree.Insert
Item
(DriveName, 1, 1, m_h
Item
); } a++; dwDrives /= 2; } m_Tree.Expand(m_h
Item
,TVE_EXPAND); }
重写了MFC中TreeCtrl控件
重写了MFC中TreeCtrl控件,其中的Set
Item
Color(HTREE
ITEM
h
Item
, COLORREF color)可以实现设置TreeCtrl某一个节点的背景色
数据库
4,011
社区成员
39,816
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章