Re: MDI кол-во окошек...
От: TepMuHyc  
Дата: 07.07.02 18:31
Оценка:
Здравствуйте Nickola999, Вы писали:

N>Подскажите пожалуйста как в MDI проиложении узнать кол-во открытых окошек, как переключаться между ними по нажитию МОЕЙ кнопки? И как-бы сделать навигацию: например ToolBar в котором при каждом открытии нового документа появляется новая кнопка, при нажатии на которую активируется определённое окошко?


Вот тебе код из живого приложения:

...по поводу "при каждом открытии нового документа появляется новая кнопка,"
void CTabBar::OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler)
{
        ....
//    enumerate child windows and figure out what of
//    them are MDI children and update tabs respecively
    ASSERT_KINDOF(CMDIFrameWnd, pTarget);
    CMDIChildWnd *pWnd = ((CMDIFrameWnd*)pTarget)->MDIGetActive();
    while( pWnd ) {
        if( (pWnd->GetStyle() & WS_VISIBLE) &&
            pWnd->IsKindOf(RUNTIME_CLASS(CMDIChildWnd)) )
        {
            UpdateTab(pWnd);//добавляем таб на тулбар,
                           //или проверяем что заголовок окошка не изменился

        }
        pWnd = (CMDIChildWnd*)pWnd->GetWindow(GW_HWNDNEXT);
    }
    RemoveUnusedTabs();//прибиваем табы для которых окошки уже закрыты.
        ....
}


...а это по поводу "при нажатии на которую активируется определённое окошко"
void CTabBar::OnTabSelChange(NMHDR *pNS, LRESULT *result)
{
    int nSel = tab().GetCurSel();
    TCITEM tci;
    tci.mask = TCIF_PARAM;
    if( tab().GetItem(nSel, &tci) )
    {
        CMDIChildWnd *pWnd = (CMDIChildWnd*)CWnd::FromHandle((HWND)tci.lParam);
        if( !pWnd || !pWnd->IsKindOf(RUNTIME_CLASS(CMDIChildWnd)) )
        {
            tab().DeleteItem(nSel);
            return;
        }
        pWnd->GetMDIFrame()->MDIActivate(pWnd);
    }
}


ЗЫ. Весь класс постить не буду тк он коммерческая тайна покрытая мраком.
Причем в мраке шляются зомби :-]
____________________
God obviously didn't debug, hasn't done any maintenance, and no documentation can be found. Truly amateur work.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.