`
film
  • 浏览: 235028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

分隔视图与TreeView的显示和控制

MFC 
阅读更多

分隔视图与TreeView的显示和控制

分隔视图与TreeView都是在界面中常用的元素,本文介绍了如果使用这两种元素,并说明了TreeView的显示与控制方法.:如何使TreeView响应鼠标的单,双击,右击等事件.

  1. 首先说明如何分隔一个窗口.

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,利用它就可以做出各种不同的分隔效果.

上面代码中的CMainViewCRoomsTree都是视类的派生类.CreatView函数也是可以查下MSDN,里面有具体的说明.

那么如何得到这两个类的指针呢?

(CMainView*)m_pView = (CMainView*)m_wndSplitter.GetPane(0,1);

(CRoomsTree*)m_pTree = (CRoomsTree*)m_wndSplitter.GetPane(0,0);

这两句就可以了.

下面运行程序,就可以看到效果了.

  1. 下面讲如果制作树视图(控件).

就拿上面的例子来说,我们在它的基础上加入一个树控件.

生成一个新类,就是上面的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和listView控件查看本机磁盘文件夹及文件(WinForm)

    4. 使用 Splitter 控件来分隔控件:Splitter 控件用于分隔控件,例如分隔 TreeView 和 ListView 控件。 Splitter 控件可以设置其 Dock 属性来停靠在父容器的某一侧。 5. 使用 WinForm 事件处理机制:WinForm 事件...

    TreeView MenuItem SiteMapPath的学习笔记

    3. 添加`TreeView`控件:在ASP.NET页面中插入`TreeView`控件,并通过代码或设计视图设置其属性,如`DataSourceID`指向`SiteMap`数据源,`ExpandDepth`决定显示多少级节点。 4. 配置`MenuItem`:根据`TreeView`的`...

    QML TreeView添加节点间虚线

    在默认情况下,TreeView并不会显示节点间的分隔线,我们需要自定义样式来实现这一点。 在QML中,我们可以使用ItemDelegate来定制每个节点的显示,并结合Rectangle或Path来绘制虚线。例如,我们可以创建一个名为`...

    纯HTML CSS JS目录树形框TreeView

    虚线分隔线则通过CSS的border属性和box-sizing属性来绘制,通过调整边框宽度和位置实现虚线效果。 6. **性能优化**:在实现大型数据的TreeView时,可以采用懒加载策略,即只在需要时加载子节点,减少初始加载时间。...

    文件方式保存和恢复treeview  

    通过以上步骤,我们可以实现对TreeView控件的完整保存和恢复,使用户在退出程序后仍能保留之前的视图状态。这对于提供良好的用户体验至关重要。在实际项目中,可能还需要根据具体需求进行定制,比如加入加密、权限...

    后台管理左侧菜单树Js+TreeView

    在JavaScript中,可以使用各种库,如jQuery UI、AJS (AngularJS)、Vue.js等,或者自定义代码实现,来创建和控制这个TreeView。 标签 "后台管理" 暗示了这是一个用于内部系统管理的应用场景,通常需要具备用户权限...

    根据menu生成树

    其次,树视图(treeview)是另一种UI组件,它以树状结构显示数据,每个节点可以有零个或多个子节点,这种结构允许用户通过展开和折叠来查看和操作层级关系的数据。在Windows应用程序中,TreeView控件常常用于显示...

    listview控件的使用

    ListView支持多种视图模式,包括图标、列表、详细信息和小图标等,这使得它非常适合于显示和管理大量的结构化信息。在C++或MFC(Microsoft Foundation Classes)编程中,我们通常通过`CListCtrl`类来操作ListView...

    treeview,toolbar,TabStrip,MultiPage控件

    在Windows编程领域,控件是构建用户界面的基本元素,它们提供了与用户交互的功能。本话题主要探讨四个重要的控件:TreeView、Toolbar、TabStrip以及MultiPage,这些控件通常用于增强应用程序的用户友好性和功能多样...

    vb做的资源管理器(vb 编写的资源管理器)

    7. VSplitterCtrlSnk.cls: 这可能是一个自定义的类,用于实现分隔条(VSplitter)控件,用户可以通过它调整ListView和TreeView的显示区域大小。 8. LVHeaderSortIcons.cls: 列头排序图标,可能包含了ListView列头...

    VB6-cax.rar_vb6

    - `LVDefs.bas`:这可能是用于定义与列表视图(ListView)控件相关的常量、类型和函数的模块。ListView是Windows GUI编程中常见的控件,用于显示列表项,支持多种视图模式,如图标、列表和详细信息。 2. **树形...

    C#控件.rarC#控件.rarC#控件.rarC#控件.rar

    它的`Value`属性可以获取或设置当前选中的日期和时间,开发者还可以通过`Format`属性控制日期和时间的显示格式。 7. **TreeView控件**:TreeView控件用于显示层次结构的数据,例如文件系统目录结构。它包含节点...

    有用的资源文件有用的资源文件

    TreeView控件允许程序员创建一个可滚动的树形视图,其中每个节点可以代表一个项目或类别,节点可以展开或折叠以显示或隐藏子节点。在Windows Forms或WPF等.NET框架中,TreeView是常用的设计元素,常用于文件浏览器、...

    C#控件大全

    - **ListBox**和**ListView**:列表视图控件,用于显示多条数据。 2. 数据输入和显示控件: - **DateTimePicker**:用于选择日期和时间。 - **NumericUpDown**:数字增加减少的控件,常用于输入数值。 - **...

    Node.js-NodeListView节点ListView

    - Adapter是连接ListView与数据源的桥梁,负责将数据转化为ListView可显示的视图。 - Android提供了多种内置的Adapter,如ArrayAdapter、CursorAdapter等,开发者也可以自定义Adapter来满足特殊需求。 3. **...

    android IphoneTreeView源码.rar

    - `expand/collapseNode()`方法用于控制节点的展开和折叠,内部通过改变节点状态并刷新视图实现。 6. **自定义与扩展** - IphoneTreeView提供了丰富的自定义选项,如节点视图样式、动画效果、分隔线等,开发者...

    基于Splitter制作的C#节点树形菜单源代码.

    例如,在这个项目中,可能有一个树形视图控件用于展示菜单,而另一个面板用于显示菜单项被选择后的详细内容。 接下来,树形菜单是常见的UI元素,它以层次结构的形式呈现数据。在C#中,通常使用TreeView控件来实现这...

    linux下GTK编写网络聊天程序

    这可能需要使用GTK的对话框(dialog)和模型-视图-控制器(MVC)设计模式,以便在用户请求时动态加载和呈现历史数据。 至于"qq"标签,虽然没有明确提及,但可能是暗示这个项目的目标是创建一个类似QQ的聊天应用程序...

    vb控件大全vb控件大全vb控件大全

    3. 数据绑定控件:如DataGrid(数据网格)、ListView(列表视图)和TreeView(树视图)。这些控件用于显示和操作数据库中的数据,或以结构化的方式展示信息。 4. 表单布局控件:如Form、Panel和SplitContainer。...

Global site tag (gtag.js) - Google Analytics