C ++, MFC Feature Pack, Mdi childs видимость - PullRequest
0 голосов
/ 01 марта 2011

У меня есть приложение MDI MFC FEATURE PACK в версии 2008.

Мне нужно определить, какие дочерние окна видны, даже если пользователь создал несколько групп вкладок, а также чтопоследний активированный MDI ребенок.Я обнаружил, что в моем классе CMDIFrameWndEx мэйнфреймов есть методы

m_wndClientArea.FindActiveTabWnd ();
m_wndClientArea.GetFirstTabWnd ();
m_wndClientArea.GetNextTabWnd (); 

, которые потенциально могут позволить мне перемещаться по всем группам вкладок.Проблема в том, что эти методы возвращают CMFCTabControl, который не предлагает какого-либо метода / члена для получения указателя на дочерние окна MDI на вкладке.Он только дает индекс активной вкладки.Итак, как мне получить указатель CMDIChildWndEx* окна "впереди" данной группы вкладок?

Ответы [ 2 ]

1 голос
/ 02 июля 2011

Было замечательно найти этот код - именно то, что мне было нужно для перерисовки моих активных окон вкладок в каждой группе вкладок, поскольку с несколькими (разделенными) группами вкладок они перерисовывались неправильно.Однако, чтобы цикл работал, мне нужно было сделать следующее (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);
1 голос
/ 09 марта 2011

Поскольку ваши экземпляры CMDIChildWndEx обернуты в оболочку управления вкладками, вы можете получить активную вкладку и затем wnd из нее, например,

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

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