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) делится своим решением часто возникающей проблемы с сериализацией.

Перейти на страницу:

Похожие книги