关于CTreeView中CTreeCtrl空间的使用
2011-06-03 00:10
197 查看
关于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树形控
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树形控
相关文章推荐
- 关于使用Compare类时:“未能找到类型或命名空间“Compare”,命名空间compare”的解决
- CTreeView和CTreeCtrl的使用方法(转)
- 关于结构体的内存空间使用
- 关于自定义view使用,命名空间问题,记录而已
- 关于Oracle 释放过度使用的Undo表空间
- 关于wince 使用占用空间大的内存变量问题(编译无错误但是无法运行的问题)
- oracle中关于undo表空间的使用
- 关于名空间的使用小结
- 关于oracle 11.2.0.4 使用asm磁盘组条件下对应用数据表空间文件的rename alias操作
- 关于结构体占用空间大小总结(#pragma pack的使用)
- 关于时间空间转换在java编程中的使用
- as3中关于命名空间的使用
- 关于结构体变量为什么要使用new 增加空间的疑惑
- oracle关于查询空间使用情况的几个sql语句
- [小调查] 关于大家使用CSDN空间的感受!
- 关于查询排序的空间使用问题
- 关于dotnet3.0,system.speech命名空间的使用。(英文)中文发音的官方解决方案。
- 关于UIPickerView空间的使用
- 嵌入式系统中关于程序中线程栈空间的使用
- 关于使用“硬盘坏道屏蔽修复工具HDD Regenerator”创建启动盘后的U盘空间缩小的处理办法