请教一个关于在标签窗口中使用CTreeView时,显示Tree的问题

shotgun79 2006-02-13 09:38:22
开发工具是vc++6.0,整个project是基于SDI的,我使用CJLibrary6.09中的创建工作区(CCJTabCtrlBar对象)的方法实现分页,没有使用MFC默认的分页方法,将view分为左右两个部分。在左侧的工作区中添加两个view形成两个标签窗口,并将其分别与两个CTreeView绑定,构成tree的数据来自数据库

//新建工作区
if(!m_wndWorkSpace1.Create(this,ID_WORKSPACE1,_T("资源查看器"),CSize(200,200),/*CBRS_LEFT*/CBRS_ORIENT_VERT))
{
TRACE0(_T("工作区1创建失败\n"));
return -1;
}

if(!m_wndWorkSpace2.Create(this,ID_WORKSPACE2,_T("素材文档查看器"),CSize((len-200)/2,200),/*CBRS_ORIENT_VERT*/CBRS_LEFT))//注意这个停靠方式需要确认一下
{
TRACE0(_T("工作区2创建失败\n"));
return -1;
}
......

//添加标签1
m_pSourceTreeDoc = DYNAMIC_DOWNCAST(CSourceTree,app->m_pSourceTreeTemplate->CreateNewDocument());
ASSERT_KINDOF(CSourceTree,m_pSourceTreeDoc);
m_wndWorkSpace1.AddView(_T("资源库"),RUNTIME_CLASS(CSourceTreeView),m_pSourceTreeDoc);
//添加标签2
m_pDestTreeDoc = DYNAMIC_DOWNCAST(CDestTree,app->m_pDestTreeTemplate->CreateNewDocument());
ASSERT_KINDOF(CDestTree,m_pDestTreeDoc);
m_wndWorkSpace1.AddView(_T("制品库"),RUNTIME_CLASS(CDestTreeView),m_pDestTreeDoc);

其中CSourceTreeView中tree显示的内容在OnInitialUpdate()中加载,CDestTreeView中tree显示的内容在程序运行过程中由用户手动向数据库中添加数据时即时构成。
在CSourceTreeView中创建的tree能够正常显示,但是CDestTreeView中内容被加载之后,能够发现tree已经被建立起来,但是显示不出来。
选中‘资源库’view时的显示效果如下图:
http://photo.8080.net/xiangce/2004111585949/l_2006213213339.JPG
选中‘制品库’view并由用户录入数据后显示效果如下图:
http://photo.8080.net/xiangce/2004111585949/l_2006213213412.JPG
能够发现在第二个图中CDestTreeView中的tree已经建立了起来,当鼠标移到某个节点上时,能够看到该节点的提示,并能选中某个节点,其内容会在最右侧的editview中显示出来。但是CDestTreeView中的tree就是看不到。请问这是怎么回事?

我做了一些尝试,发现如果在为工作区添加view时RUNTIME_CLASS()均绑定为CSourceTreeView,并且都在OnInitialUpdate()完成tree的创建,则在两个标签页中都可以正常显示;而如果均绑定为CDestTreeView,则显示效果均如上面图2的效果。这几个treeview的前景背景设置均使用默认值,没有改动。请指教。

创建tree的代码如下,两个视图中创建tree所用的代码相同,应该没有问题。
void CDestTreeView::CreateTree(CTreeCtrl& tree,int bookID)
{

if(tree && tree.GetSafeHwnd())
{
tree.DeleteAllItems();
CString strTemp;

m_imageList.Create(MAKEINTRESOURCE(IDB_BITMAP1),16,1,RGB(255,255,255));
tree.SetImageList(&m_imageList,TVSIL_NORMAL);

TV_INSERTSTRUCT tvinsert;
tvinsert.hParent = TVI_ROOT;
tvinsert.hInsertAfter = TVI_LAST;
tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
tvinsert.item.hItem = NULL;
tvinsert.item.state = 0;
tvinsert.item.stateMask = 0;
tvinsert.item.cchTextMax = 40;
tvinsert.item.iSelectedImage = 0;
tvinsert.item.cChildren = 0;

//向树中插入信息
//插入'教材'节点
if(NULL == pCBTBookRs) pCBTBookRs = new CCBTBookRs;
strTemp.Format(_T("BookID = %d"),bookID);
pCBTBookRs->m_strFilter = strTemp;
if(!pCBTBookRs->IsOpen()) pCBTBookRs->Open();
if(!pCBTBookRs->IsBOF()) pCBTBookRs->MoveFirst();
while(!pCBTBookRs->IsEOF())
{....

谢谢,问题比较急,请各位不吝赐教
...全文
212 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilyway 2006-02-15
  • 打赏
  • 举报
回复
CJLIB很久没用了,现在用BCG。
view的话,最好view继承treeview来做。
不用treeView的话也可以,建一个类,继承treectrl,然后在view中创建这个类的对象来做。
另外,你检查一下,是不是CREATEtree时初始参数没给对!
shotgun79 2006-02-14
  • 打赏
  • 举报
回复
直接点就是将两个TreeView分别绑定到两个标签窗口时,一个可以正常显示,另一个数据可以加载,但是显示不出来
lilyway 2006-02-13
  • 打赏
  • 举报
回复
能不能说的直接一点,实在没耐心看这么长

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧