Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.
Работа с CTabCtrl (MFC)
A: (HOMO PROGRAMMATIS)
Оригинальная ссылка: нету

На нашем основном диалоге (там где будут сидеть вкладки) рисуем ТабКонтрол (он №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;
 
 }
Всё. Радуемся жизни :)


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS