C ++,MFC Feature Pack,Mdi childs可见性

我在vs2008中有一个MDI MFC FEATURE PACK应用程序。 我确实需要确定哪些子窗口是可见的,即使用户创建了多个选项卡组,以及最后激活的MDI子项是什么。我发现在我的大型机
CMDIFrameWndEx
类中,方法
m_wndClientArea.FindActiveTabWnd ();
m_wndClientArea.GetFirstTabWnd ();
m_wndClientArea.GetNextTabWnd (); 
这可能让我浏览所有标签grops。麻烦的是这些方法返回一个
CMFCTabControl
,它不提供任何方法/成员来获取指向选项卡中MDI子窗口的指针。它仅提供活动选项卡的索引。 那么如何获得给定制表组“前面”窗口的
CMDIChildWndEx*
指针?     
已邀请:
因为您的CMDIChildWndEx实例包含在选项卡控件包装器中,所以您可以获取活动选项卡,然后从中获取wnd,例如,
int nActive = pTabCtrl->GetActiveTab();
CWnd * pWnd = pTabCtrl->GetTabWndNoWrapper( nActive );

CMDIChildWndEx * pChild = dynamic_cast<CMDIChildWndEx*>(pWnd);
    
很高兴找到这段代码 - 正是我需要重绘每个标签组中的活动标签窗口,因为有多个(拆分)标签组,它们没有正确重绘。但是,要使循环工作,我必须执行以下操作(CChildFrame是我的派生帧类型):
m_arrpActiveChilds.RemoveAll (); 
const CObList& TabGroups =m_wndClientArea.GetMDITabGroups(); 
if (TabGroups.GetCount ()>0) { 
    POSITION crtPos = TabGroups.GetHeadPosition (); 
    CMFCTabCtrl* pCrtTabCtrl;

    do { 
        pCrtTabCtrl=DYNAMIC_DOWNCAST(CMFCTabCtrl, TabGroups.GetNext(crtPos)); 
        int nActive = pCrtTabCtrl->GetActiveTab(); 
        CWnd * pWnd = pCrtTabCtrl->GetTabWndNoWrapper( nActive ); 
        CChildFrame * pChild = dynamic_cast<CChildFrame*>(pWnd); 
        m_arrpActiveChilds.Add (pChild);
    } while(crtPos != NULL);
    

要回复问题请先登录注册