现在的位置: 首页 > 综合 > 正文

新手使用CTreeCtrl

2013年07月03日 ⁄ 综合 ⁄ 共 1857字 ⁄ 字号 评论关闭

 

昨天写了篇关于ClistCtrl基本使用的东西,后来在学习使用CTreeCtrl时发现了前面文章的几点问题,诚惶诚恐,于是接着写这篇关于CtreeCtrl的学习心得,纠正一些观点,也算是前篇的姊妹篇吧(至于ClistViewCtreeView,以后碰到再写

O(∩_∩)O~)

还是先看一点点代码:(CUseTreeDlg::OnInitDialog()中)

// TODO: Add extra
initialization here

       m_pTreeCtrl=new CmyTreeCtrl();              //还是派生一个类哦

 

 m_pTreeCtrl->Create(WS_VISIBLE|WS_TABSTOP|WS_CHILD|WS_BORDER|TVS_HASBUTTONS|TVS_LINESATROOT|TVS_HASLINES|TVS_DISABLEDRAGDROP,CRect(10,
10, 200, 300),this,0 ); 
//
创建一个树形控件,不要在RESOURCE中创建。

 

//     DWORD dwStyle = GetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE);

//     dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;

//     SetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE,dwStyle);

 

       HTREEITEM hRoot=m_pTreeCtrl->InsertItem("总部");   

//创建完了就可以插入了,默认

//情况下是插入根节点,这里用hRoot保存返回的句柄,以便后面访问

       HTREEITEM hParent[5]; //定义5个句柄

       for(int i(0);i<5;++i)

       {

              hParent[i]=m_pTreeCtrl->InsertItem(CString("文件夹")+CString(i+49),hRoot);

//也是插入操作,注意那两个Cstring相加,结果很好吧(嘿嘿,其中缘由很简单哈);

//插入函数的第二个参数就是前面的句柄,表示在根节点下插入;最后返回一个自己的树节点句

//柄,以备后用,如下:

              m_pTreeCtrl->InsertItem("文件1",hParent[i]);

       }

       m_pTreeCtrl->Expand(hRoot,TVE_EXPAND);

//最后展开在树根节点展开,你可以用hParent代替hRoot,看下什么情况

       return TRUE;  //
return TRUE  unless you set the focus to
a control

树形控件的疑点除了创建,其次就是如何插入,也就是如何建立各个节点间的关系,如果节点比较死(不怎么变化),用几个循环就可以了建立起来了,但是如果是像我们的资源管理器中的那个树形(文件经常变换),就需要使用递归了,具体算法不好说哦,有兴趣的同学可以看下VC知识库中的源代码VC控件
TreeCtrl

ListCtrl
演示
,这个演示确实不错!。

 

好了,现在来说下昨天的问题,当时我自认为使用在资源中直接拖加的控件不好使,是因为我不知道怎么设置控件样式。我只知道Create函数可以设置STYLE,却不知

//     DWORD dwStyle = GetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE);

//     dwStyle |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;

//     SetWindowLong(m_TreeCtrl.m_hWnd,GWL_STYLE,dwStyle);

的含义,几次谋面,深有印象,却厌其麻烦嫌其丑陋。今天再看上述演示源代码时,才深深切切的感受到这2个函数的是非常有用的。

第一个参数都是窗体句柄,第二个参数是要获得和改变的具体内容,注意GetWindowLong返回一个信息,SetWindowLong依赖传入第三个参数设置信息。

上面的使用是改变树形的样式(GWL_STYLE),有了这2个函数,就可以先在资源对话框中拖控件,然后再设置其样式了,这样,就不需要派生一个类。该2个函数还有一些其他不错的应用,可以参看网上的资料,这里就不谈了。

抱歉!评论已关闭.