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

时间:2011-03-01 13:59:19

标签: visual-c++ mfc-feature-pack mdichild active-window

我在vs2008中有一个MDI MFC FEATURE PACK应用程序。

我确实需要确定哪些子窗口可见,即使用户创建了多个选项卡组,以及最后激活的MDI子项是什么。我在我的大型机{{​​1}}类中发现了方法

CMDIFrameWndEx

可能让我浏览所有标签grops。麻烦的是这些方法返回m_wndClientArea.FindActiveTabWnd (); m_wndClientArea.GetFirstTabWnd (); m_wndClientArea.GetNextTabWnd (); ,它不提供任何方法/成员来获取指向选项卡中MDI子窗口的指针。它仅提供活动选项卡的索引。 那么如何获得给定制表组的“前面”窗口的CMFCTabControl指针?

2 个答案:

答案 0 :(得分:1)

因为您的CMDIChildWndEx实例包含在选项卡控件包装中,您可以获取活动选项卡,然后获取该选项,例如。

int nActive = pTabCtrl->GetActiveTab();
CWnd * pWnd = pTabCtrl->GetTabWndNoWrapper( nActive );

CMDIChildWndEx * pChild = dynamic_cast<CMDIChildWndEx*>(pWnd);

答案 1 :(得分:1)

很高兴找到这段代码 - 正是我需要重绘每个标签组中的活动标签窗口,因为有多个(拆分)标签组,它们没有正确重绘。但是,要使循环工作,我必须执行以下操作(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);