На нашем основном диалоге (там где будут сидеть вкладки) рисуем ТабКонтрол
(он №19 на панели инструментов) по размеру соответствующий желаемым размерам
будущих страниц.
Создаём шаблоны диалогов в редакторе ресурсов (это наши будущие страницы),
на второй странице их св-в (щелчок правой кнопкой мыши на диалоге ->
Properties) ставим каждому
Style = child
Border = None
Title bar = no
Размеры диалогов значения не имеет, им вовсе не обязательно быть одинаковыми
и совпадать по размеру с ТабКонтролом.
Пусть класс нашего основного диалога зовётся COurDlg.
Тогда:
Члены класса COurDlg:
HWND m_TabPages[_d_TabPagesNum];
В заголовке класса COurDlg объявим количество будущих страниц в ТабКонтроле
#define _d_TabPagesNum 2
В конструкторе COurDlg::COurDlg
ZeroMemory(m_TabPages, sizeof(m_TabPages));
В COurDlg::OnInitDialog()
//......................... //.........................
//Счетчик для циклов int i;
//Создадим страницы если ещё не созданы //(!!!) здесь предполагается что идентификаторы шаблонов диалогов равны IDD_DIALOG1, IDD_DIALOG1 + 1 и т.д. if (!m_TabPages[0]) { for (i = 0; i < _d_TabPagesNum; i++) { m_TabPages[i] = CreateDialog(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDD_DIALOG1 + i), m_TabCtrl, NULL); } }
//Зададим страницам правильные размер и положение на ТабКонтроле CRect l_Rect; m_TabCtrl.GetClientRect(l_Rect); l_Rect.top += 25; l_Rect.left += 2; l_Rect.right -= 2; l_Rect.bottom -= 2;
for (i = 0; i < _d_TabPagesNum; i++) { ::MoveWindow(m_TabPages[i], l_Rect.left, l_Rect.top, l_Rect.Width(), l_Rect.Height(), true); } //Создаём закладки в контроле for (i = 0; i < _d_TabPagesNum; i++) { CString c_Caption; c_Caption.Format("%d", i); m_TabCtrl.InsertItem(i, c_Caption /*Впишите сюда свои названия закладок*/); }
//Делаем первую страницу активной m_TabCtrl.SetCurSel(0); ActivateTabPage(0);
Далее, создаём функцию-член класса COurDlg (она будет отображать нужную
нам страницу и прятать остальные)
void COurDlg::ActivateTabPage(int p_NumPageToActivate) { for (int i = 0; i < _d_TabPagesNum; i++) { ::ShowWindow(m_TabPages[i], ((i == p_NumPageToActivate) ? SW_SHOW : SW_HIDE)); } }
2) ТабКонтрол -> TCN_SELCHANGE
void COurDlg::OnSelchange***(NMHDR* pNMHDR, LRESULT* pResult) { ActivateTabPage(m_TabCtrl.GetCurSel()); *pResult = 0; }
3) Если вы также хотите обрабатывать смену страницы (в смысле - в зависимости
от каких-то критериев менять страницу или нет), то делаем так:
Создаём обработчик ТабКонтрол -> TCN_SELCHANGING
void COurDlg::OnSelchanging***(NMHDR* pNMHDR, LRESULT* pResult) { int l_OldPageNum = m_TabCtrl.GetCurSel();
//если разрешить менять страницу то *pResult = 0; //если запретить менять страницу то *pResult = 1; }
Всё. Радуемся жизни :) |