Читаем Программирование на Visual C++. Архив рассылки полностью

В палитре элементов найдите  "Tab Control" и поместите его в ваш диалог. Теперь два раза кликните по нему мышкой при нажатой клавише Ctrl. Вам будет предложено создать переменную класса, соглашайтесь. Введите m_Tab  в качестве имени и CTabCtrl в качестве типа. По умолчанию наш объект пока не содержит ни одной закладки. Чтобы они появились, их необходимо создать с помощью функции InsertItem. Это можно сделать в OnInitDialog:

BOOL CTabDlg::OnInitDialog {

 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.

Вот как это выглядит:

void CTabDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) {

 int id; // ID диалога

 // надо сначала удалить предыдущий диалог в Tab Control'е:

 if ((m_pTabDialog) {

  m_pTabDialog->DestroyWindow;

  delete m_pTabDialog;

 }

 // теперь в зависимости от того, какая закладка выбрана, 

 // выбираем соотв. диалог

 switch(m_Tab.GetCurSel+1) // +1 для того, чтобы порядковые номера закладок

 // и диалогов совпадали с номерами в case

 {

 // первая закладка

 case 1:

  id = IDD_TABPAGE1;

  m_pTabDialog = new CTabPage1;

  // тип указателя соответствует нужному диалогу,

  // иначе добавленный в диалог код не будет функционировать

  break;

 // вторая закладка

 case 2:

  id = IDD_TABPAGE2;

  m_pTabDialog = new CTabPage2;

  break;

  // все остальные закладки, если они есть,

  // будут здесь тоже представлены, каждая – отдельным case

  // а если обработка такого номера не предусмотрена

 default:

  m_pTabDialog = new CDialog; // новый пустой диалог

  return;

 } // end switch

 // создаем диалог

 m_pTabDialog->Create(id, (CWnd*)&m_Tabs); //параметры: ресурс диалога и родитель

 CRect rc; 

 m_Tab.GetWindowRect(&rc); // получаем "рабочую область"

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

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

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

А. Алексашин , Дэвид Томас , Эндрю Хант

Программирование / Книги по IT