我在vs2008中有一个MDI MFC FEATURE PACK应用程序。
我确实需要确定哪些子窗口可见,即使用户创建了多个选项卡组,以及最后激活的MDI子项是什么。我在我的大型机{{1}}类中发现了方法
CMDIFrameWndEx
可能让我浏览所有标签grops。麻烦的是这些方法返回m_wndClientArea.FindActiveTabWnd ();
m_wndClientArea.GetFirstTabWnd ();
m_wndClientArea.GetNextTabWnd ();
,它不提供任何方法/成员来获取指向选项卡中MDI子窗口的指针。它仅提供活动选项卡的索引。
那么如何获得给定制表组的“前面”窗口的CMFCTabControl
指针?
答案 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);