请教一个关于在标签窗口中使用CTreeView时,显示Tree的问题
开发工具是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())
{....
谢谢,问题比较急,请各位不吝赐教