当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 树视控件在多文档中的使用

VC++
在类VC的界面实现中加入目录树
软件换肤技术在 BCB 中的实现
利用非模窗口生成MDI介面
报表输出轻松搞定
Windows 中不规则窗体的编程实现
解说Win32的窗口子类化
使用测试优先方法开发用户界面
一个简单的登录对话框的实现
一个简单的日记本程序
从资源中加载皮肤
一个在RichEdit中添加表情图象的类
ActiveSkin 4.3 软件换肤在VC中的实现
一种另类“关于(About)”对话框的动态显示方法
对话框打印预览及打印
关于如何换肤、子类化的解决方案
制作 MSN、QQ 的消息提示窗口
如何对 BCGControlBarPro 进行换肤
定制个性化的对话框窗口类
改变窗口中的光标形状
更新MFC中的视图,跟踪.NET Framework中的事件

VC++ 中的 树视控件在多文档中的使用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 66 ::
收藏到网摘: n/a

树视控件在多文档中的使用


作者 5icomputer


下载源代码
 

    自从来到我们的论坛以来,认识了很多的朋友和编程的高手,从中学到了很多知识。我看在论坛中有很多人问关于树控的问题。故将树控的一些问题写出来,以供大家参考,同时也作为近一段时间来学习的总结。
    本文中主要讲到如何在多文档中加入一个ControlBar,以及如何在ControlBar中加入一个树控方法。这也是软件系统中常用的一种界面,希望能对大家有所帮助。

本例的运行结果如下:

    首先,新建一个多文档工程,将Sizecbar.cpp和Sizecbar.h复制到工程的文件加中,并将新文件加入到工程中。这样工程中加入了个新类CsizingControlBar。然后,利用Class Wizard 生成也基于CtoolBar的新类mybar。将基类改为CsizingControlBar。

在mybar类中加入OnUpdateCmdUI(CFrameWnd *pTarget, BOOL bDisableIfNoHndler)

代码如下:

void mybar::OnUpdateCmdUI(CFrameWnd *pTarget, BOOL bDisableIfNoHndler){	UpdateDialogControls(pTarget, bDisableIfNoHndler);}

再在CMainFrame中加入mybar 的成员变量m_CtrlBar;在CmainFrame的OnCreate函数中加入一下代码:

if(!m_CtrlBar.Create("数据浏览条",this, CSize(200,200),TRUE,123)){	TRACE0("Failed to create mybar\n");	return -1;	// fail to create}m_CtrlBar.SetBarStyle(m_CtrlBar.GetBarStyle()|	CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);m_CtrlBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_CtrlBar,AFX_IDW_DOCKBAR_LEFT); 

此时运行一下程序,将看到已经将mybar加入了工程中。下面将在mybar中加入一个树视控件。

新建个类MyTree 基于CTreeCtrl。再在mybar加入成员变量 MyTree m_TreeCtrl;

将mybar重载WM_CREATE消息函数。在其中加入如下代码。

m_TreeCtrl.Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER	| TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES	| TVS_DISABLEDRAGDROP|TVS_EDITLABELS|TVS_TRACKSELECT,	CRect(10, 10, 300, 100), this, ID_TREECTRL);	//	m_TreeCtrl.SetImageList(&m_images,TVSIL_NORMAL);	// set "normal" GUI-font	CFont *font = CFont::FromHandle((HFONT)::GetStockObject(DEFAULT_GUI_FONT));	m_TreeCtrl.SetFont(font);	HTREEITEM root = m_TreeCtrl.InsertItem("VCKBASE",0,0);	HTREEITEM subroot1=m_TreeCtrl.InsertItem("程序员社区",1,1,root);	HTREEITEM subroot2=m_TreeCtrl.InsertItem("文档中心",1,1,root);	HTREEITEM subroot3=m_TreeCtrl.InsertItem("代码仓库",1,1,root);	HTREEITEM subroot4=m_TreeCtrl.InsertItem("工具和资源",1,1,root);	HTREEITEM subroot5=m_TreeCtrl.InsertItem("客服中心",1,1,root);	HTREEITEM subroot6=m_TreeCtrl.InsertItem("个人专栏",1,1,root);	m_TreeCtrl.InsertItem("开发论坛",1,1,subroot1);	m_TreeCtrl.InsertItem("开发联盟",1,1,subroot1);	m_TreeCtrl.InsertItem("人才交流",1,1,subroot1);	m_TreeCtrl.InsertItem("用户注册",1,1,subroot1);	m_TreeCtrl.InsertItem("VCity",1,1,subroot1);	m_TreeCtrl.InsertItem("在线杂志",1,1,subroot2);	m_TreeCtrl.InsertItem("个人专辑",1,1,subroot2);	m_TreeCtrl.InsertItem("论坛精华",1,1,subroot2);	m_TreeCtrl.InsertItem("酷库",1,1,subroot2);	m_TreeCtrl.InsertItem("所有文章",1,1,subroot2);	m_TreeCtrl.InsertItem("所有代码",1,1,subroot3);	m_TreeCtrl.InsertItem("程序工具箱",1,1,subroot4);	m_TreeCtrl.InsertItem("程序工具箱",1,1,subroot5);	m_TreeCtrl.InsertItem("用户注册",1,1,subroot5);	m_TreeCtrl.InsertItem("修改信息",1,1,subroot5);	m_TreeCtrl.InsertItem("取回密码",1,1,subroot5);	m_TreeCtrl.InsertItem("问题解答",1,1,subroot5);	m_TreeCtrl.InsertItem("投稿",1,1,subroot5);	m_TreeCtrl.InsertItem("联系我们",1,1,subroot5);	m_TreeCtrl.SelectItem(root);	m_TreeCtrl.Expand(root, TVE_EXPAND); 

在重载mybar的WM_SIZE消息函数,并在其中加入如下代码:

CRect rc;	GetClientRect(&rc);	m_TreeCtrl.MoveWindow(&rc); 

在CCTreeControlBarView中,添加成员变量m_Title,添加成员函数DrawRect(CDC *pDC);

代码如下:

void CCTreeControlBarView::DrawRect(CDC* pDC){	CRect rect;	pDC->Rectangle(100,100,400,400);	rect.top=100;	rect.left=100;	rect.right=250;	rect.bottom