2 qq 28254507 qq_28254507 于 2016.02.14 11:52 提问

MFC 做的CTreeView根项不能打开的问题 5C

相关代码如下:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (!m_wndSplitter.CreateStatic(this, 1, 2))
{
return FALSE;
}
CRect rect;
GetClientRect(&rect);

m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(TreeView), CSize(rect.Width() / 3 - 170, rect.Height()), pContext);

if (!m_wndSplitter2.CreateStatic(&m_wndSplitter, 1, 2, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1))
    || !m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(EditView), CSize(rect.Width() / 3 - 50, rect.Height()), pContext)
    || !m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(EditView), CSize(rect.Width() / 3, rect.Height()), pContext))
{
    return FALSE;
}
return TRUE;
//return CFrameWnd::OnCreateClient(lpcs, pContext);

}

void TreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();

ptheTree = &GetTreeCtrl();
ptheTree->ModifyStyle(0, TVS_HASLINES | TVS_EDITLABELS | TVS_HASBUTTONS | TVS_EDITLABELS | TVS_LINESATROOT);
TVINSERTSTRUCT tvInsert;
HTREEITEM hTreeItem;
tvInsert.hInsertAfter = TVI_LAST;//TVI_LAST;
tvInsert.hParent = TVI_ROOT;
tvInsert.item.mask = TVIF_TEXT;
tvInsert.item.pszText = "搜索引擎";
hTreeItem = ptheTree->InsertItem(&tvInsert);
tvInsert.hParent = hTreeItem;
tvInsert.item.pszText = "Google";
ptheTree->InsertItem(&tvInsert);
tvInsert.item.pszText = "Baidu";
ptheTree->InsertItem(&tvInsert);
ptheTree->Expand(hTreeItem, TVE_EXPAND); //默认为合上的TVE_COLLAPSE,打开的TVE_EXPAND

}

做出来后效果这样图片说明

但是当我点根项时并没有展开(况且我类型设置了TVE_EXPAND,应该直接是打开的啊。。),而且单击根项应该选中高亮的也没有(实际效果是高亮一下后立刻恢复了,就跟刷新了似得)。

大家帮我看看问题可能出在哪。。

2个回答

caozhy
caozhy   Ds   Rxr 2016.02.15 06:04

ptheTree->Expand.Expand(hTreeItem, TVE_TOGGLE);
试试看这样

VisualEleven
VisualEleven   Ds   Rxr 2016.02.16 14:41

代码没啥问题,我试了一下,可以看到展开的效果的。图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
MFC CTreeView学习之初始化(一)
m_TreeCtrl = &GetTreeCtrl(); /* TVS_HASLINES 表示树控制在各子项之间存在连线; TVS_LINESATROOT 表示树控制在根项之间存在连线; TVS_HASBUTTONS 表示树控制视在父项左侧存在展开合拢控制按钮; TVS_EDITLABELS 表示可以控制鼠标单击修改树项的名称; TVS_SHOWSELALWAYS 表示选中项即使在窗口
MFC中CTreeView的使用
(一)树控制的主要功能 树控制和视(Tree Control&View)主要用来显示具有一定层次结构的数据项,如资源管理器中的磁盘目录等,以供用户在其中进行各种选择。树控制中的每个数据项包括数据项名 称的文本字符串和用于表示该数据项的图像,每个数据项下面均可包含各种子项,整个结构就象目录树一样。对于包含各种子项的数据项,可通过鼠标双击来展开或合拢,这可以 通过控制树的不同风格来实
MFC使用小结(二)CTreeView的麻烦
初次接触CTreeView有点不知从哪下手的感觉,网上查了一堆资料也还是有点懵,这经过几天的折磨,总算有点眉目了。 具体的使用我就不废话了,网上很多资料的,我就挑几个最麻烦的记录一下吧。   1.双击事件 整了一顿,愣是没找到事件在哪。最后,也是受前辈指点,在类这一栏里,属性,事件里,可以自动添加事件……VS的IDE还是挺强大的嘛。 废话少说,上代码,其中的TreeData是我自定义的一
[MFC]DriveTree应用:CTreeView的示例
1. 使用WIN32 API来检索系统的硬盘驱动并遍历文件系统:     1) 对于涉及硬盘、文件遍历的操作MFC并没有提供封装好的类,只能通过WIN32 API来进行;     2) 获取计算机的硬盘驱动列表:          i. DWORD ::GetLogicalDrive(VOID);          ii. 返回的硬盘驱动列表就保存在一个DWORD中,位0表示驱动器A是否存
[MFC]CTreeView树形视图、CTreeCtrl树形控件
1. 树形控件和树形视图:     1) 树形控件在Microsoft Windows95中就已经引入,如文件资源管理器中的树形文件列表就是使用树形控件实现的,这是树形控件最常见的应用;     2) 树形视图就是将整个树形控件作为视图模板的视图,就和之前做过的Phones列表视图一样,直接将CXXXView继承自CTreeCtrl即可;     3) 我们看到的资源管理器的左侧其实就是一个
CTreeView 的教程
整个网上搜了一圈没有好的CTreeView 的教程,所以自己谢谢看。 CTreeView class CTreeView : public CCtrlView
MFC中CTreeView
用一个多文档视图程序展现了一个CTreeView中树控件的使用,其中用到了遍历的知识。
CTreeView的用法
最近做东西,需要用CTreeView.先不说为什么要用这个.我就先说怎么用,我刚开始知道要用这个时,不会用.很多疑问.不说废话了,直接正题. widget('system.web.widgets.CTreeView',array( 'data'=>array( array( 'text'=>'个人基本
CTreeView
ClassWizard为CTreeCtrl(树控件)添加的NM_DBLCLK(双击)消息的响应函数中带有一个NMHDR * 型指针形参: 1.OnDblClkTree(NMHDR* pNMHDR, LRESULT* pResult) 这个陌生的指针类型常使初用树控件的编程者陷入迷茫之中。实际上我们完全不理会它,也可以实现树控件的双击响应,即在OnDblClk
MFC CTreeView学习之右键菜单_获取选中节点的方式HitTest和GetSelectedItem的区别(二)
CPoint pt; UINT nFlags; GetCursorPos(&pt); ::ScreenToClient(m_TreeCtrl->m_hWnd, &pt); HTREEITEM hItem2 = m_TreeCtrl->HitTest(pt, &nFlags); //获取选中节点  注:此处获取的是当前选中的节点 CString sMsg; sMsg.Format(_