C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 27. Создаем диалог с вкладками (PropertyPage) / Уроки MFC / Visual C++

Visual C++. MFC
Урок 27. Создаем диалог с вкладками (PropertyPage)

Этот урок (и, возможно, парочку следующих) мы посвятим использованию диалогов с вкладками. Выглядят они приблизительно так:

Диалог с вкладками

Для создания такого диалога в вашей программе сначала создайте проект на MFC AppWizard (EXE):

Проект MFC AppWizard (EXE)

На первом шаге мастера выберите SDI-тип интефейса (Single document), во всех последующих шагах все оставьте по умолчанию. В сгенегированной заготовке добавьте еще один элемент меню. Пусть его идентификатор для определенности будет ID_DIALOG_DIALOG, и его заголовок - Dialog. Добавьте обработчик для нашего нового меню в классе Вида (...View), используя ClassWizard (если забыли - Ctrl+W, вкладка MessageMaps, в combobox'е Class name выбираем класс вида, в левом списке ищем идентификатор диалога ID_DIALOG_DIALOG, в левом выбираем COMMAND), затем нажимаем на Add Function).

Теперь займемся непосредственно нашим диалогом. План здаесь такой: сначала мы для вкладок сделаем парочку диалоговых окон, производных от класса CPropertyPage. Для этих окон некоторые свойства нам надо будет поменять. Затем мы создадим новый класс (без конструктора диалогов), производный от CPropertySheet. В конструкторах этого класса мы вызовем его метод AddPage для добавления двух созданных ранее вкладок. После этого мы покажем наш диалог со вкладками при щелчке на меню. И, напоследок, посмотрим, как можно обменивать данные с нашем диалогом и с классом вида.

Начинаем наши шаги. Создайте диалог для первой вкладки. Уберите с него кнопки OK и Cancel - они нам не понадобятся. Добавьте на наго какой-нибудь элемент (пусть это для определенности будет CheckBox). Измените его заголовок на Options1, свойство Style на Child, Border на Thin, уберите галочку System menu:

Свойства вкладки

После этого вызовите ClassWizard, в появившемся диалоге выберите создание нового класса:

Создание нового класса

В появившемся диалоге New Class задаете имя класса (у нас это COptions1), и в качестве базового класса выберите CPropertyPage:

Параметры нового класса

Нажмите OK. Абсолютно аналогично создайте диалог для второй вкладки.

Теперь займемся основным классом. Вызовите диалог для создания нового класса. В качестве его базового класса выберите CPropertySheet, в качестве имени что-то вроде CDlg:

Параметры нового класса

Нажмите OK. В заголовочном файле класса CDlg подсоедините include'ом файлы классов двух вкладок и создайте две соответствующе переменные:

...
#include "Options1.h"
#include "Options2.h"
class CDlg : public CPropertySheet
{
    ...
public:
    COptions1 m_op1;
    COptions2 m_op2;
    ...

Затем измените два конструктора класса CDlg:

CDlg::CDlg(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
    AddPage(&m_op1);
    AddPage(&m_op2);
}

CDlg::CDlg(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
    AddPage(&m_op1);
    AddPage(&m_op2);
}

Изменяем обработчик для созданного ранее меню Dialog (не забудьте подключить в заголовочный файл для класса вида файл Dlg.h):

void CDlgWithTabsView::OnDialogDialog() 
{
    CDlg dlg("Диалог с вкладками");
    dlg.DoModal();
}

Компилируем, запускаем, выбираем меню. Появится наше окно с вкладками:

Окно с вкладками