分隔视图与TreeView都是在界面中常用的元素,本文介绍了如果使用这两种元素,并说明了TreeView的显示与控制方法.如:如何使TreeView响应鼠标的单,双击,右击等事件.
-
首先说明如何分隔一个窗口.
在MFC中,分隔一个窗口,这个窗口必须是CWnd或其派生类.这里面以CFrameWnd为例.其它的也一样.
现在假如有一个类: class CMainFrame : public CframeWnn,我们在它的头文件中加入:
CSplitterWnd m_wndSplitter;
然后重载它的OnCreateClient函数.
在里面加入如下代码:
if(!m_wndSplitter.CreateStatic(this,1,2))
{
return FALSE;
}
if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMainView),size,pContext))
return FALSE;
if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CRoomsTree),size,pContext))
return FALSE;
(CMainView*)m_pView = (CMainView*)m_wndSplitter.GetPane(0,1);
(CRoomsTree*)m_pTree = (CRoomsTree*)m_wndSplitter.GetPane(0,0);
其中, CreateStatic函数的原型可以查下MSDN,利用它就可以做出各种不同的分隔效果.
上面代码中的CMainView和CRoomsTree都是视类的派生类.而CreatView函数也是可以查下MSDN,里面有具体的说明.
那么如何得到这两个类的指针呢?
(CMainView*)m_pView = (CMainView*)m_wndSplitter.GetPane(0,1);
(CRoomsTree*)m_pTree = (CRoomsTree*)m_wndSplitter.GetPane(0,0);
这两句就可以了.
下面运行程序,就可以看到效果了.
-
下面讲如果制作树视图(控件).
就拿上面的例子来说,我们在它的基础上加入一个树控件.
生成一个新类,就是上面的CRoomsTree,它的基类是CTreeView,在它的头文件中加入:
CTreeCtrl & m_Tree;
然后在构造函数中初始化它:
CRoomsTree::CRoomsTree():m_Tree(GetTreeCtrl())
这里是调用的它的考备构造函数,具体的找本C++的书看就行了.
下面讲如何给树的项目制作图标.
在其头文件中加入: CImageList m_ImageList ;
然后在需要显示树的时候(一般是OnCreate函数中):
m_ImageList.Create(IDB_TREEIMAGE,16,1,RGB(255,0,255));
这里面IDB_TREEIMAGE是一张位图在资源中的ID,这张位图要你自己画.
然后加上这句就把位图加到树上面了:
m_Tree.SetImageList(&m_ImageList,TVSIL_NORMAL);
下面讲如何给树插入项目:
用m_Tree.InsertItem,
这个函数的返回值是一个项目的句柄,参数有四个,1.项目的文字,2.项目被选中时要显示的图标在ImageList中的位置,3.项目没选中时的图标.4.该项目父项目的句柄,如果为NULL,该项目就显示在根位置.
好了,现在,随便插入几个项目,运行程序,就可以看到效果了.
那么,我们如何控制这个树呢?如何让它响应我们的操作?
就拿单击来说吧
响应它的: NM_CLICK消息,在消息回调中加入:
GetCursorPos(&m_CurrentPnt);
ScreenToClient(&m_CurrentPnt);
m_CurrentItem = m_Tree.GetSelectedItem();
*pResult = 0;
用这种方法得到单击时鼠标的位置,和当前被选择的项目的句柄,然后用:
CRect rect;
m_Tree.GetItemRect(m_AllItem,&rect,TRUE);
if (rect.PtInRect(m_CurrentPnt))
{
//
}
来看是不是点击了其中之一就可以了.
如果想知道到底是点击的哪个项目,就要用上面的办法把所有的项目检查一遍
这样,就差不多了.双击也是一样的.
在实际的操作中,会出现一个问题,就是双击的时候,它会触发单击和双击两个事件.
这怎么办呢?
我用的办法是,在类中设一开关变量,
单检查到有单击事件时,开关打开,并SetTimer,一般为500ms,然后,在双击事件中,关闭开关,在Timer的响应函数中,先检查开关是否打开,如果打开,再做相应的单击后的处理就可以了.
相关推荐
TreeView:具有高性能和丰富功能的Android树形视图
用jQuery实现的 TreeView树 动态加载 你想要的数据 很方便
在设计程序时,经常使用TreeView控件树状显示数据。例如在WINDOWS资源管理器中,利用TreeView控件显示层次。TreeView控件显示数据的好处是层次清晰,本实例利用TreeView控件显示商品信息。
包含主要内容:tabview实现视图标签页面+窗口分割+treeview显示内容+动态添加控件+在视图里面画图+链表存储+orale数据库(此程序未带,带了你就运行不了了),可以咨询本人,里面有联系方式)+带皮肤文件 ...
C#中使用treeview显示目录和文件的demo 运行前请先在D盘下新建目录 treetest ,然后在 treetest 下新建一些目录和文件,可以创建多级目录。
TreeView (树视图)遍历数据库的方法
自定义TreeView控件,通过递归地方式实现显示xml文件,可以通过右键增加兄弟节点、子节点,并且可以删除结点,可以用来学习如何手工绑定数据到TreeView控件中
vb6.0 treeview 显示内容的使用说明
TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录。TreeView控件中的各项信息都有一个与之相关的Node对象。TreeView显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图...
资源主要是结合博客文章:http://blog.csdn.net/eastmount/article/details/21241313主要讲述使用C# winForm实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录,并点击结点文件夹能在...
编写一个简单的树视图程序,创建一个根节点,命名为“我的电脑”。然后利用相关类和方法获得机器的磁盘目录信息添加到上述根节点下。
一个功能更加强大的TreeView组件,支持图形、树列表、拖放等功能。
用TreeView和ListView控件中显示数据 用TreeView和ListView控件中显示数据
教你如何用treeview来显示sqlserver数据库里的信息,项目简单明了,一学就会。
c#下文件系统的TreeView显示,有递归显示和按层打开两种方式
TreeView控件显示树状内容实例VB源码,几个基础的功能,献给新手
这是一个用TreeView控件显示数据库表信息的例子,在做分类或目录管理的时候经常会需要这样的功能。 SQLCreateTable.sql 是程序运行所需要的表结构和测试数据。参考一下就行了。 欢迎访问我的博客:...
VB6.0演示Treeview和ListView相结合的例子,在ListView中使用Treeview菜单,将ListView修饰了一下,好像看上去不太像ListView了,但在其中增加了树控视图,实际项目编写中,这种类似的功能还是使用率很高的。
控件显示某个文件夹下的文件夹和DWG文件,文件和文件夹前加图标,文件夹图标有打开和关闭状态显示,是自己开发过程中的测试代码。
TreeView与数据库关联,实现类似DB-TreeView的效果