Опубликован: 01.11.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 22:

Библиотека классов MFC среды проектирования Visual Studio. NET. Многостраничные диалоги

< Лекция 21 || Лекция 22: 12 || Лекция 23 >
Аннотация: В лекции рассматривается механизм создания и использования многостраничных диалогов, описывается применение списков изображений.

Создание многостраничных диалогов

Многостраничные диалоги отображаются как:

  • окна наборов свойств (property sheets);
  • диалоговые окна со вкладками (tab dialog boxes);
  • мастера, представляющие собой последовательность страниц свойств.

Примером мастеров могут служить мастера AppWizard, используемые для создания шаблона приложения. Для управления последовательностью страниц в мастерах используются кнопки Back, Next, Finish и Cancel. Чтобы создать окно набора свойств как мастер, следует перед вызовом метода DoModal вызвать метод SetWizardMode, а для доступа к командным кнопкам использовать метод SetWizardButtons.

Многостраничный диалог может быть реализован с помощью класса CPropertySheet, производного от CWnd. Объект класса CPropertySheet называется набором свойств или окном набора свойств.

Каждая страница из набора свойств может быть реализована объектом типа CPropertyPage, производного от CDialog.

Диалоговое окно класса CPropertyPage называется страницей свойств.

Окно набора свойств представляет собой специальный вид диалогового окна, используемый для изменения атрибутов некоторого внешнего объекта.

Окно набора свойств состоит из трех частей:

  • диалогового окна;
  • одной или нескольких страниц свойств, показываемых попеременно;
  • компонента "вкладка", содержащего заголовки вкладок для каждой страницы.

Для того чтобы использовать в приложении многостраничный диалог, нужно выполнить следующие шаги:

  1. Создать в редакторе ресурсов шаблон диалога отдельно для каждой страницы свойств.

    Шаблоны диалогов могут иметь различный размер - при размещении окна набора свойств будет выбран размер наибольшего шаблона диалога.

    На странице свойств окна Properties для каждого шаблона диалога следует установить значения для свойств

    • Caption - содержит заголовок вкладки, отображаемый для текущей страницы;
    • Style - имеет значение Child;
    • Border - указывает стиль рамки Thin;
    • Titlebar - установлено равным True;
    • Disabled - установлено равным True.
  2. Создать для каждого шаблона диалога класс, производный от CPropertyPage, и добавить в эти классы переменные-члены класса, используемые для доступа к странице свойств. Для каждой добавляемой в набор свойств страницы создать по одному объекту класса, производного от CPropertyPage
  3. Создать в коде программы объект класса CPropertySheet. Вызвать для каждой страницы (типа производного от CPropertyPage ) метод CPropertySheet::AddPage.
  4. Показать окно набора свойств, вызвав метод CPropertySheet::DoModal или CPropertySheet::Create.

Чтобы выполнить обмен данными с окном набора свойств, следует создать переменные для доступа к элементам управления страниц свойств и использовать DDX- и DDV-методы для обмена данными между элементами управления и переменными класса окна страницы свойств.

Обмен данными для окна набора свойств следует выполнять отдельно для каждой страницы свойств.

Например:

void CMyView::DoModalPropertySheet()  // Создание 
                // модального окна 
{              // набора свойств с двумя страницами
  CPropertySheet propsheet;  // Создание объекта "диалог"
  CMyPage1 page1;     // Создание объекта класса, 
                // производного от CPropertyPage
  CMyPage2 page2;     
  //...
  page1.m_nMember1 = m_nMember1;     // Обмен данными: 
  page1.m_nMember2 = m_nMember2;      // инициализация 
  page2.m_strMember3 = m_strMember3;  // переменных членов 
                           //класса
propsheet.AddPage(&page1);  // Добавление страницы свойств
  propsheet.AddPage(&page2);
   //...
   if (propsheeet.DoModal() == IDOK)
   {
     m_nMember1 = page1.m_nMember1;
     m_nMember2 = page1.m_nMember2;
     m_strMember3 = page2.m_strMember3;
     GetDocument()->SetModifiedFlag();
     GetDocument()->UpdateAllViews(NULL);
   }
}
< Лекция 21 || Лекция 22: 12 || Лекция 23 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);

Алексей Стародубов
Алексей Стародубов
Россия, Владимир
Кира Плосконосова
Кира Плосконосова
Россия, Москва