荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: littlebao (爱拼才会赢), 信区: Visual
标 题: 终于大功告成!!!!!!!!!!!!!!!!!!?
发信站: 荔园晨风BBS站 (Sun Aug 17 09:32:19 2003), 站内信件
昨晚百思不得其解之时我打算把CMainFrame的子窗口全部都列出来,但是令人疑惑的是
toolbar竟然也得不到,我在OnCreate()里看了好久,后来发现
只有在DockControlBar(&m_wndToolBar);之前调用
m_wndToolBar.GetParent()得到的指针才是指向CMainFrame,
所以我觉得问题就出在这个DockControlBar()因为我的另外两个子窗口
也用到了这个函数,追踪了一下源代码,一切真相大白,调用过程如下
(1)
DockControlBar(&m_wndToolBar);
(2)
void CFrameWnd::DockControlBar(CControlBar* pBar, UINT nDockBarID, LPCRECT
lpRect)
{
CDockBar* pDockBar = (nDockBarID == 0) ? NULL :
(CDockBar*)GetControlBar(nDockBarID);
DockControlBar(pBar, pDockBar, lpRect);
}
(3)
void CFrameWnd::DockControlBar(CControlBar* pBar, CDockBar* pDockBar, LPCRECT
lpRect)
{
.........
pDockBar->DockControlBar(pBar, lpRect);
}
(4)
void CDockBar::DockControlBar(CControlBar* pBar, LPCRECT lpRect)
{
........
if (pBar->GetParent() != this)
pBar->SetParent(this);//就是在这里做了偷梁换柱的勾当,断绝了父子关系
}
所以我把代码改成如下就行了:
CMainFrame * pFrame = (CMainFrame*)GetParent() ;
CCoolBar *pCoolBar = &pFrame->m_wndCoolBar2 ;
CWnd *pwnd = (CWnd*)pCoolBar->GetWindow(GW_CHILD) ;
CWnd *pChild = NULL ;
if(pwnd)
{
MessageBox("ok") ;
if(pwnd->IsKindOf(RUNTIME_CLASS(CFolderFrame)))
{
MessageBox("ok2") ;
pChild = pwnd->GetWindow(GW_CHILD) ;
while(pChild)
{
if(pChild->IsKindOf(RUNTIME_CLASS(COutPutTabView)))
{
MessageBox("success") ;
break ;
}
pChild = pChild->GetNextWindow() ;
}
}
}
最后要多谢oopilix为我了提供这么一个方案。
--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 61.144.235.40]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店