C++, MFC Feature Pack,Mdi childs видимость
У меня есть приложение MDI MFC FEATURE PACK в версии 2008 года.
Мне нужно определить, какие дочерние окна видны, даже если пользователь создал несколько групп вкладок, а также то, что является последним активированным дочерним MDI. Я нашел это в моем мэйнфрейме CMDIFrameWndEx
класс, методы
m_wndClientArea.FindActiveTabWnd ();
m_wndClientArea.GetFirstTabWnd ();
m_wndClientArea.GetNextTabWnd ();
это потенциально может позволить мне перемещаться по всем группам вкладок. Проблема в том, что эти методы возвращают CMFCTabControl
который не предлагает какого-либо метода / члена для получения указателя на дочерние окна MDI на вкладке. Это только дает индекс активной вкладки. Так как мне получить CMDIChildWndEx*
указатель окна "впереди" данной группы вкладок?
2 ответа
Поскольку ваши экземпляры 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);