环境:MFC 多文档 (SDI)
问题:在TreeView的派生类(此类是我新建的,不是自动创建的,因此没有OnDraw等函数)中,
      用create动态创建TreeCtrl后,用insertitem可插入根节点(有显示),
      但无法插入子节点(无显示)。求解。
源码:
     int CFileView::OnCreate(LPCREATESTRUCT lpCreateStruct) // 此函数为我自己添加的消息响应
{
if (CTreeView::OnCreate(lpCreateStruct) == -1)
return -1; // TODO:  在此添加您专用的创建代码
CTreeCtrl* m_TreeCtrl = new CTreeCtrl; // 注意,我没在头文件中定义CTreeCtrl m_TreeCtrl !

m_TreeCtrl->Create(WS_VISIBLE | TVS_HASLINES,
               CRect(10,10,80,100),this,IDC_TREECTRL); // 若不加WS_VISIBLE 则连根节点都无法显示!
                                                       //  IDC_TREECTRL为在resource.h中自定义的值 // 在根节点上添加“文件”
HTREEITEM  hItem, hSubItem;
hItem = m_TreeCtrl->InsertItem(_T("文件"),TVI_ROOT,TVI_FIRST);
// 添加根节点的第一级子节点
hSubItem = m_TreeCtrl->InsertItem(_T("项目文件"),hItem,TVI_LAST);

// 继续添加第一级子节点,排在上一子节点的后面
hSubItem = m_TreeCtrl->InsertItem(_T("工程文件"),hItem,hSubItem);
return 0;
}运行结果: 在视图中只有 “文件” 没有“+”没有子节点
 

解决方案 »

  1.   

    其实已经成功了,只是没有那个缩放的“+”图标,在插入代码后面就是这句你就明白了
    m_TreeCtrl->Expand(hItem,TVE_EXPAND);//展开根结点
      

  2.   

    TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | TVS_CHECKBOXES | TVS_INFOTIP | TVS_FULLROWSELECT都加上,然后删除你不要的,就可以了,估计TVS_LINESATROOT缺了
      

  3.   

    我已手动添加鼠标响应消息,并且在对话框中测试可以用鼠标点击,并响应。但是我在开头说道(标题中写错了应该是MDI)的CTreeView派生的视图中却无法响应鼠标点击。我在视图类的OnCreate里动态创建的TreeCtrl控件,在同一个类中添加的鼠标消息响应,
    请问哪里出错了。。