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);
Другие вопросы по тегам