m_Tab.ScreenToClient(&rc); // преобразуем в относительные координаты
// исключаем область, где отображаются названия закладок:
m_Tab.AdjustRect(FALSE, &rc);
// помещаем диалог на место...
m_pTabDialog->MoveWindow(&rc);
// и показываем:
m_pTabDialog->ShowWindow(SW_SHOWNORMAL);
m_pTabDialog->UpdateWindow;
*pResult = 0;
}
Теперь последний штрих: в OnInitDialog нужно добавить следующий код:
…
m_Tab.InsertItem(1, &tci);
//-----------------
// добавить:
NMHDR hdr;
hdr.code = TCN_SELCHANGE;
hdr.hwndFrom = m_Tab.m_hWnd;
SendMessage(WM_NOTIFY, m_Tab.GetDlgCtrlID, (LPARAM)&hdr);
//-----------------
return TRUE;
}
Это необходимо для того, чтобы отобразить самую первую закладку.
Как вариант можно просто вызвать OnSelchangeTab1(0,0); но тогда из OnSelchangeTab1 нужно удалить последнюю строку (*pResult=0).
Можете вволю поэксперементировать со свойствами и стилями CTabCtrl. Мне, например, очень нравятся закладки, надписи на которых подсвечиваются при наведении курсора мыши, кстати это имеет место в MS Access 97 (стиль TCS_HOTTRACK).
И еще: не забудьте, если диалог у вас немодальный, вы должны обеспечить корректный обмен данными между активным диалогом в Tab Control и вашим приложением. Это делается точно так же, как и обычный обмен данными с немодальным диалогом.
Небезызвестный вам Борис Бердичевский (см. выпуск №3) делится своим решением часто возникающей проблемы с сериализацией.