打扫打扫的

来源:互联网 发布:java有运算符重载吗 编辑:程序博客网 时间:2024/05/17 07:15
关于CTreeView中CTreeCtrl空间的使用
2007-08-24 13:08:27

昨天QQ群里有人问我怎么实现CTreeCtrl的功能,说实话,我也是一个VC 的初级学者,没有弄过CTreeView的代码,参考了MSDN后,写了一小段代码,和大家一起分享,其中包括窗口切分,都是比较基础的内容。【以下代码是在VC .net 2005中调试成功】

1.首先建立一个“基于单文档”的MFC应用程序,在CMainFrame类中重载OnCreateClient()函数,其内部的代码为:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)

{

     // TODO: Add your specialized code here and/or call the base class

     m_wndSplitter.CreateStatic(this, 1, 2);//生成行列的静态窗口划分。

 

     m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CMySplitterTreeView), CSize(0, 0), pContext);

     m_wndSplitter.CreateView(0,1, RUNTIME_CLASS(CEditView), CSize(0, 0), pContext);

 

     CRect r;

     GetClientRect(&r);

 

     //设置第行的高。

     m_wndSplitter.SetRowInfo( 0, r.Height(), 0 );

     //设置第列的宽。

     m_wndSplitter.SetColumnInfo( 0, r.Width()/4, 0 );

    

     return TRUE;

 

     //将原来重载生成的返回代码注释掉。

     //return CFrameWnd::OnCreateClient(lpcs, pContext);

}

 

2.上面的语句m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CMySplitterTreeView), CSize(0, 0), pContext);中的CMySplitterTreeView是自己添加的MFC类,其基类设置为CTreeView。

3.在生成的CMySplitterTreeView类中添加成员变量CTreeCtrl * ptheTree;【以备以后调用使用】。并重载OnInitialUpdate()函数,其内部的代码为:

 

void CMySplitterTreeView::OnInitialUpdate()

{

     CTreeView::OnInitialUpdate();

 

     // TODO: Add your specialized code here and/or call the base class

     ptheTree = &GetTreeCtrl();

     //::SetWindowLong(ptheTree->m_hWnd,TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS,NULL);

 

     //修改CTreeCtrl控件的Style

     ptheTree->ModifyStyle(0,TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS);

 

     TVINSERTSTRUCT tvInsert;

     HTREEITEM hTreeItem;

     tvInsert.hInsertAfter = NULL;//TVI_LAST;

     tvInsert.hParent = TVI_ROOT;

     tvInsert.item.mask = TVIF_TEXT;

     tvInsert.item.pszText = L"一年级";

     hTreeItem = ptheTree->InsertItem(&tvInsert);

     tvInsert.hParent = hTreeItem;

     tvInsert.item.pszText = L"1";

     ptheTree->InsertItem(&tvInsert);

     tvInsert.item.pszText = L"2";

     ptheTree->InsertItem(&tvInsert);

     ptheTree->Expand(hTreeItem,TVE_EXPAND); //默认为合上的【TVE_COLLAPSE】。

 

     tvInsert.hParent = TVI_ROOT;

     tvInsert.item.pszText = L"二年级";

     hTreeItem = ptheTree->InsertItem(&tvInsert);

     tvInsert.hParent = hTreeItem;

     tvInsert.item.pszText = L"1";

     ptheTree->InsertItem(&tvInsert);

     tvInsert.item.pszText = L"2";

     ptheTree->InsertItem(&tvInsert);

     tvInsert.item.pszText = L"3";

     ptheTree->InsertItem(&tvInsert);

}

运行一下,就会发现在窗体被分割成两个部分,其中左侧的那个部分中有一个CTreeCtrl树形控

原创粉丝点击