FAQ по C/C++/Visual C++
Работа с сетью Работа с CTabCtrl (MFC) |
Составители: SUnteXx, Leprecon |
Работа с CTabCtrl (MFC) | |||
Создаём шаблоны диалогов в редакторе ресурсов (это наши будущие страницы), на второй странице их св-в (щелчок правой кнопкой мыши на диалоге -> 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; }Всё. Радуемся жизни :) |
На нашем основном диалоге (там где будут сидеть вкладки) рисуем ТабКонтрол (он №19 на панели инструментов) по размеру соответствующий желаемым размерам будущих страниц.|||
|
FAQ составлен по материалам Форума на Исходниках.Ру. Copyright © 2002 by Sources.ru. All rights reserved. |