vc6.0下简单使用CTreeCtrl (转自http://www.cnblogs.com/sunnyjones/)

原创 2007年10月14日 21:55:00
今天简单的学了下CTreeCtrl,新建一个基于单文档的MFC工程,在resource的IDD_DIALOG1里添加一个tree control,将其styles勾上has buttons,has lines,lines at root,通过classWizard添加一个继承于CDialog的类CExDialog,添加私有成员变量CImageList m_imageList,然后就在OnInitDialog()函数里添加树控件的细节:
BOOL CExDialog::OnInitDialog() 
{
    CDialog::OnInitDialog();
    HICON hlcon[
8];
    
    m_imageList.Create( 
1616088 );

    hlcon[
0= AfxGetApp()->LoadIcon( IDI_ICON1 );
    hlcon[
1= AfxGetApp()->LoadIcon( IDI_ICON2 );
    hlcon[
2= AfxGetApp()->LoadIcon( IDI_ICON3 );
    hlcon[
3= AfxGetApp()->LoadIcon( IDI_ICON4 );
    hlcon[
4= AfxGetApp()->LoadIcon( IDI_ICON5 );
    hlcon[
5= AfxGetApp()->LoadIcon( IDI_ICON6 );
    hlcon[
6= AfxGetApp()->LoadIcon( IDI_ICON7 );
    hlcon[
7= AfxGetApp()->LoadIcon( IDI_ICON8 );

    
for ( int n = 0; n < 8; n ++ )
    
{
        m_imageList.Add( hlcon[n] );
    }


    CTreeCtrl
* pTree = (CTreeCtrl*)GetDlgItem( IDC_TREEVIEW1 );
    pTree
->SetImageList( &m_imageList, TVSIL_NORMAL );
    TV_INSERTSTRUCT tvinsert;
    tvinsert.hParent 
= NULL;
    tvinsert.hInsertAfter 
= TVI_LAST;
    tvinsert.item.mask 
= TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
    tvinsert.item.hItem 
= NULL;
    tvinsert.item.state 
= 0;
    tvinsert.item.stateMask 
= 0;
    tvinsert.item.cchTextMax 
= 6;
    tvinsert.item.iSelectedImage 
= 1;
    tvinsert.item.cChildren 
= 0;
    tvinsert.item.lParam 
= 0;
    tvinsert.item.iImage 
= 0;

//////////////////////////////////////////////////////////////////////////
    tvinsert.item.pszText = "HOMER";
    HTREEITEM hDad 
= pTree->InsertItem( &tvinsert );

//////////////////////////////////////////////////////////////////////////
    tvinsert.item.pszText = "Marge";
    HTREEITEM hMom 
= pTree->InsertItem( &tvinsert );

    tvinsert.hParent 
= hDad;
    tvinsert.item.pszText 
= "Bart";
    tvinsert.item.iImage 
= 3;
    pTree
->InsertItem( &tvinsert );

    tvinsert.hParent 
= hMom;
    tvinsert.item.pszText 
= "Lisa";
    tvinsert.item.iImage 
= 6;
    pTree
->InsertItem( &tvinsert );
    
    tvinsert.item.pszText 
= "Dilbart";
    HTREEITEM hOther 
= pTree->InsertItem( &tvinsert );

    tvinsert.hParent 
= hOther;
    tvinsert.item.pszText 
= "Dogbert";
    tvinsert.item.iImage 
= 7;
    pTree
->InsertItem( &tvinsert );

    tvinsert.item.pszText 
= "Ratbert";
    pTree
->InsertItem( &tvinsert );
        
    
return TRUE;  // return TRUE unless you set the focus to a control
                  
// EXCEPTION: OCX Property Pages should return FALSE
}
这样就建立了两个父节点,HOMER和Marge,tvinsert.item.iSelectedImage 设置了当选中这项时显示什么图标,tvinsert.item.iImage设置了当没有选中时显示的图标,tvinsert.item.pszText设置显示出来的文本。如果没有对tvinsert.hParent进行更改设置,那么新添加的节点和上一个节点的父节点为同一节点。
下面这段代码实现了选中某一项进行的更改操作:
void CExDialog::OnSelchangedTreeview1(NMHDR* pNMHDR, LRESULT* pResult) 
{
    NM_TREEVIEW
* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    
    CTreeCtrl
* pTree = (CTreeCtrl*)GetDlgItem(IDC_TREEVIEW1);
    HTREEITEM hSelected 
= pNMTreeView->itemNew.hItem;
    
if ( hSelected != NULL )
    
{
        
char text[31];
        TV_ITEM item;
        item.mask 
= TVIF_HANDLE | TVIF_TEXT;
        item.hItem 
= hSelected;
        item.pszText 
= text;
        item.cchTextMax 
= 30;
        VERIFY( pTree
->GetItem(&item) );
        SetDlgItemText( IDC_TREEVIEW1, text );
    }


    
*pResult = 0;
}
      有了这些代码还是不够的,如果想显示的话,我们要把这个头文件加入到TreeTestView.cpp里,添加OnLButtonDown事件,并添加一段代码:
CExDialog dlg;
    dlg.DoModal();
       ok,这样编译运行下,点击鼠标左键,就会出现一个树状控件,呵呵,简单吧。。。
这些只是实现了静态添加树节点。以后还要深入的学习! 

vc6.0下简单使用CTreeCtrl(转)

今天简单的学了下CTreeCtrl,新建一个基于单文档的MFC工程,在resource的IDD_DIALOG1里添加一个tree control,将其styles勾上has buttons,has l...
  • kaneself
  • kaneself
  • 2011年03月10日 00:33
  • 377

http://www.cnblogs.com/freeliver54/p/3725979.html

写在前面 服务号和订阅号 URL配置 创建菜单 查询、删除菜单 接受消息 发送消息(图文、菜单事件响应) 示例Demo下载 后记   最近公司在做微信开发,其实就是接口开发,网上找了很多资料,当然...
  • huningjun
  • huningjun
  • 2016年12月12日 11:50
  • 2345

搬家了,新地址http://www.cnblogs.com/clayman/

   终于决定搬家,难用都还可以勉强忍受,可是最近居然开始乱封blog了,怕怕。可惜那么多文章带不走,手动把部份我觉得比较有价值的文章搬过去了。呵呵,欢迎大家有空过去看看:)。 此blog将不再更新....
  • soilwork
  • soilwork
  • 2009年05月18日 00:59
  • 11950

敏捷的大拇指,中国第一家Swift开发者社区 http://www.swifthumb.com

论坛建好了  http://112.126.69.97/大家赶紧去注册占座啊,越早越资深啊,跟QQ号一样的...
  • Anewczs
  • Anewczs
  • 2014年06月09日 12:45
  • 2053

删除CTreeCtrl中某个节点的子节点

删除某个节点的子节点,下面提供两种方法: void CFileView::DelAllChildOfItem(HTREEITEM hItem) { BOOL bRet=FALSE; HTREEIT...
  • u012372584
  • u012372584
  • 2017年02月28日 09:08
  • 991

使用NSObject中的函数起线程

下面的这些函数是定义在NSObject中的,关于它们的具体含义,你可以在官方文档中找,或者google之,这里就不啰嗦了。 Sending Messages – performSelector...
  • NickTang
  • NickTang
  • 2011年10月14日 09:16
  • 4177

深入理解Java的接口和抽象类 (http://www.cnblogs.com/dolphin0520/p/3811437.html)

对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,...
  • guorun18
  • guorun18
  • 2016年03月24日 14:10
  • 282

宏观人工智能

在本篇文章中,我将对机器学习做个概要的介绍。本文的目的是能让即便完全不了解机器学习的人也能了解机器学习,并且上手相关的实践。...
  • wjb_2016
  • wjb_2016
  • 2016年06月30日 10:43
  • 642

runtime 运行时得问题

OC消息机制简述 ============== 参考链接:   各种语言都有些传递函数的方法:C语言中可以使用函数指针,C++中有函数引用、仿函数等,OC里有选择器(selector)和bloc...
  • super_man_ww
  • super_man_ww
  • 2015年12月16日 11:35
  • 427

LPCTSTR(http://www.cnblogs.com/sunnyjones/archive/2009/02/24/1397538.html)

LPCTSTR类型   如何理解LPCTSTR类型?    L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为...
  • googlg
  • googlg
  • 2011年07月29日 17:24
  • 633
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vc6.0下简单使用CTreeCtrl (转自http://www.cnblogs.com/sunnyjones/)
举报原因:
原因补充:

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