TC_ITEM tci; // в нее записываются параметры создаваемой закладки
memset(&tci,0,sizeof(tci));
tci.mask = TCIF_TEXT; // у закладки будет только текст
tci.pszText = "Закладка 1"; // название закладки
m_Tab.InsertItem(0, &tci); // первая закладка имеет индекс 0
tci.pszText = "Закладка 2";
m_Tab.InsertItem(1, &tci); //
вставляем вторую закладку
return TRUE;
}
Ну вот, у нас есть две закладки. Теперь нам нужно поместить что-нибудь внутрь.
Прежде всего, для каждой из закладок нужно создать диалог, который будет отображаться при выборе этой закладки. Например, создайте для начала два диалога – IDD_TABPAGE1 и IDD_TABPAGE2. В свойствах каждому поставьте тип "Child" – "дочерний" (properties|styles|style:Child) и "Без рамки" (properties|styles|border:None). Для каждого диалога нужно создать соответствующий класс. Это можно сделать, два раза кликнув по поверхности диалога в редакторе. У меня получились классы CTabPage1 и CTabPage2.
Нужные контролы и обработчики в диалоги можно поместить на данном этапе, а можно и потом (хотя для оценки размеров лучше все-таки это сделать сейчас. Потом можно будет внести любые изменения). Но для тестирования какие-нибудь отличительные знаки в них поставить нужно обязательно , а то вы просто не узнаете, какие диалоги где у вас выводятся – все будут одинаковые.
В классе вашего диалога, кому принадлежит TabCtrl (в примере — CTabDlg) добавьте переменную-указатель на текущий диалог:
protected:
CTabCtrl m_Tabs;
CDialog* m_pTabDialog; // <--- добавить
В конструкторе класса проинициализируйте ее в 0:
CTabDlg::CTabDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTabDlg::IDD, pParent) {
m_pTabDialog=0;
}
Зайдите в ClassWizard и для TabCtrl добавьте обработчик TCN_SELCHANGE (изменение закладки).
Теперь мы будем динамически удалять прошлый диалог/создавать новый и выводить его в TabControl.
Это необходимо для того, чтобы отобразить самую первую закладку.
Как вариант можно просто вызвать OnSelchangeTab1(0,0); но тогда из OnSelchangeTab1 нужно удалить последнюю строку (*pResult=0).
Можете вволю поэксперементировать со свойствами и стилями CTabCtrl. Мне, например, очень нравятся закладки, надписи на которых подсвечиваются при наведении курсора мыши, кстати это имеет место в MS Access 97 (стиль TCS_HOTTRACK).
И еще: не забудьте, если диалог у вас немодальный, вы должны обеспечить корректный обмен данными между активным диалогом в Tab Control и вашим приложением. Это делается точно так же, как и обычный обмен данными с немодальным диалогом.