Здравствуйте 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);
}
}
ЗЫ. Весь класс постить не буду тк он коммерческая тайна покрытая мраком.
Причем в мраке шляются зомби :-]