树状控件的应用(选择出阵武将)

原创 2003年11月13日 00:00:00

           树状控件的应用

                          何志丹

下面是树状控件的一些应用,由于是由于用于演示,所以结构并不合理.其效果如图所示..

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />CSDN_Dev_Image_2003-11-111739510.png

步骤如下:

 

1,Insert -> new class,插入一个新类CMyCtrl,基类为CTreeCtrl.

 

2,利用类向导为CMyTree添加WM_PANIT的响应函数.

代码如下:

void CMyTree::OnPaint()

{

         CPaintDC dc(this);

         CWnd::DefWindowProc( WM_PAINT, (WPARAM)dc.GetSafeHdc(), 0 );

         HTREEITEM hItem = this->GetFirstVisibleItem();

         while(NULL != hItem)

         {

                   UINT selflag = TVIS_DROPHILITED | TVIS_SELECTED;

                   if(GetItemState( hItem, selflag ) & selflag)

                   {

                            hItem = GetNextVisibleItem(hItem);

                            continue ;

                   }

                   CRect r;

                   GetItemRect(hItem,&r,true);

                   {//擦除旧内容                             

                            COLORREF col = dc.GetBkColor();

                            CBrush brush(col);

                            CPen   pen(PS_NULL,1,col);

                            CBrush * pOldBrush = dc.SelectObject(&brush);

                            CPen   * pOldPen   = dc.SelectObject(&pen);

                            dc.Rectangle(&r);

                            dc.SelectObject(pOldBrush);

                            dc.SelectObject(pOldPen);                 

                   }

                   CString strText = GetItemText(hItem);

                   //设置颜色

                   dc.SetBkColor( GetSysColor( COLOR_WINDOW ) );

                   dc.SetTextColor(RGB(255,0,0));

                   //更改字体

                   LOGFONT logfont ;

                   GetFont()->GetLogFont( &logfont );

                   logfont.lfItalic = true;

                   CFont font;

                   font.CreateFontIndirect(&logfont);

                   dc.SelectObject(&font);

                   dc.TextOut(r.left + 2,r.top + 1,strText);

                  

                   hItem = GetNextVisibleItem(hItem);

         }

}

 

3,建立一个基于对话框的程序,增加一个树状控件,ctrl + w打开类向导,为它增加一个关联变量m_tree_ctrl.

 

4,对树状控件右键,选取属性,has buttons,has lines,lines at root都选上.

 

5,手动把CTreeCtrl        m_tree_ctrl;改成CMyTree     m_tree_ctrl;不要忘记了包含头文件,

#include "MyTree.h"

 

6,修改对话框的OnInitDialog

BOOL CTestTreeDlg::OnInitDialog()

{      

         …..

         HTREEITEM hRootItem = m_tree_ctrl.InsertItem("五虎上将!");

         m_tree_ctrl.InsertItem("关羽",hRootItem);

         m_tree_ctrl.InsertItem("张飞",hRootItem);

         m_tree_ctrl.InsertItem("赵云",hRootItem);

         m_tree_ctrl.InsertItem("马超",hRootItem);

         m_tree_ctrl.InsertItem("黄忠",hRootItem);

}

 

7,Ctrl + F5.效果如图.

CSDN_Dev_Image_2003-11-111739512.png

 

8,在资源管理器中增加一个位图,IDIDB_STATE.

CSDN_Dev_Image_2003-11-111739514.png

 

9, CMyTree中增加成员变量CImageList m_Images;

 

10,修改CMyTreePreSubclassWindow的响应函数.

 void CMyTree::PreSubclassWindow()

{

         SetBkColor(RGB(255,255,255));

        

         m_Images.Create (IDB_STATE, 18, 4, RGB (128, 0, 0));

         SetImageList (&m_Images, TVSIL_NORMAL);

         SetWindowLong(m_hWnd, GWL_STYLE, TVS_SHOWSELALWAYS|GetWindowLong(m_hWnd, GWL_STYLE));

        

         CTreeCtrl::PreSubclassWindow();

}

 

11,CMyTree=NM_CLICK的响应函数.

void CMyTree::OnClick(NMHDR* pNMHDR, LRESULT* pResult)

{

         DWORD dw = GetMessagePos();

         CPoint pt(LOWORD(dw),HIWORD(dw));//鼠标的屏幕坐标

         //转换为相对树控件的坐标

         CPoint pt1 = pt;

         CRect rect;

         GetClientRect(rect);

         ClientToScreen(&rect);

        

         pt1.x -= rect.left;

         pt1.y -= rect.top;

        

         //判断在树控件中的位置

         TVHITTESTINFO tHitTestInfo;

         tHitTestInfo.pt = pt1;

         HitTest(&tHitTestInfo);   

        

         if (TVHT_ONITEMICON == tHitTestInfo.flags)

         {

                   int nImage,nSelectImage ;

                   GetItemImage(tHitTestInfo.hItem,nImage,nSelectImage);

                   if(0 == nImage)

                            SetItemImage(tHitTestInfo.hItem,3,3);

                   else if(3 == nImage)

                            SetItemImage(tHitTestInfo.hItem,0,0);

         }

        

         *pResult = 0;

}

 

12,把对话框标题改为请选择出阵的武将”.

 

13, BOOL CTestTreeDlg::OnInitDialog()

{      

         …..

         HTREEITEM hItem ;

         hItem = m_tree_ctrl.InsertItem("关羽");

         m_tree_ctrl.SetItemImage(hItem,1,1);

         m_tree_ctrl.InsertItem("张飞");

         m_tree_ctrl.InsertItem("赵云");

         m_tree_ctrl.InsertItem("马超");

         hItem = m_tree_ctrl.InsertItem("黄忠");

         m_tree_ctrl.SetItemImage(hItem,2,2);

}

 

14,把树状控件的has line取消掉.

 

15,再为对话框换一个好看的图标.

 

16,结果如最前面.

 

使用树形控件显示VB.NET层级数据

 如果您想在VB.NET中用树形结构来显示层级数据,那么树形控件(TreeView)是实现这一功能的不二选择。树形控件提供了大量的属性,您可以进行设定以满足您的需求。利用树形控件,您还可以在设计时或运...
  • forest1980
  • forest1980
  • 2011年03月19日 23:55
  • 233

实现弹出对话框选择武将

//武将名称列表 string array wujiang_name //武将名称对应的id列表 integer array wujiang_id //技能名称1,对应udg_omg1 st...
  • xiaozaq
  • xiaozaq
  • 2017年06月21日 17:24
  • 170

js树状选择器

代码块selector.jsp 操作...
  • sunhuwh
  • sunhuwh
  • 2015年07月06日 22:53
  • 808

VS2013/MFC编程入门之三十(常用控件:树形控件Tree Control 下)

前面一节讲了树形控件Tree Control的简介、通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例。        树形控件的创建 ...
  • zhaoyinhui0802
  • zhaoyinhui0802
  • 2016年12月03日 15:56
  • 2122

《太阁立志传4》 所有武将卡的取得

                    《太阁立志传4》 所有武将卡的取得                               dOSKEY lEE    想必大家都玩过《太阁立志传4》这个游...
  • doskey
  • doskey
  • 2002年12月21日 10:42
  • 4550

可多选的树状选择控件

效果如图:功能如下:1. 选择根节点,则全选所属的子节点。2. 选择子节点,则向上更新根节点状态。   规则是,当子节点全选时,所属根节点状态为选择状态;当子节点全不选时,所属根节点为非选状态;当子节...
  • iammac
  • iammac
  • 2010年07月12日 09:49
  • 471

C#0003--如何使用树状视图控件

C#0003--如何使用树状视图控件
  • u012025054
  • u012025054
  • 2014年05月27日 10:35
  • 1395

树形菜单控件

jQuery plugin: Treeview 这个插件能够把无序列表转换成可展开与收缩的Tree。 主页:http://bassistance.de/jquery-plugin...
  • yongjiucui
  • yongjiucui
  • 2012年02月08日 16:41
  • 1345

好用的树形下拉框组件(单选、多选均可)★★

我在很久以前曾发布过一个美化的单选下拉框组件,一度很火爆。相信现在读我帖子的人里面仍然有在用这个组件的。 以前那个帖子地址:http://www.iteye.com/topic/851317   ...
  • wanghl123321
  • wanghl123321
  • 2012年03月20日 17:50
  • 1546

web页面树形下拉选择框

介绍一个web页面属性下拉列表框的实现,采用jquery的ztree框架。项目中的效果如图: 1 下载ztree插件,地址:http://www.ztree.me/v3/main.php#_zT...
  • shanjingyuan
  • shanjingyuan
  • 2015年02月08日 15:01
  • 3017
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:树状控件的应用(选择出阵武将)
举报原因:
原因补充:

(最多只允许输入30个字)