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

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

< Лекция 21 || Лекция 22: 12 || Лекция 23 >

Класс CPropertySheet

Класс CPropertySheet инкапсулирует возможности управления многостраничным диалогом.

Класс CPropertySheet предоставляет ряд методов, включая следующие:

  • GetActiveIndex - метод возвращает индекс текущей страницы свойств.
  • GetPageCount - метод возвращает количество страниц свойств в окне набора свойств.
  • GetPage - метод возвращает указатель на страницу свойств, заданную по индексу.
  • GetActivePage - метод возвращает указатель на текущую активную страницу свойств.
  • SetActivePage - метод устанавливает новую текущую активную страницу.

    Например:

    BOOL CMySheet::OnInitDialog()   // Класс CMySheet 
                                 //наследует от CPropertySheet
    {
    BOOL bResult = CPropertySheet::OnInitDialog();
    CFrameWnd* frame = (CFrameWnd*) AfxGetMainWnd();
    CPSheetDoc* doc = (CPSheetDoc*) frame->GetActiveDocument();
       SetActivePage(doc->m_LastActivePage); // Устанавливаем 
                // текущей последнюю активную страницу
    return bResult;
    }
    BOOL CMyPropertySheet::OnCommand(WPARAM wParam, 
                                     LPARAM lParam) 
    { if (LOWORD(wParam) == IDOK)
      {
      CFrameWnd* frame = (CFrameWnd*) AfxGetMainWnd();
     CPSheetDoc* doc = (CPSheetDoc*)frame->GetActiveDocument();
        // Сохранение индекса последней активной страницы:
     doc->m_LastActivePage = GetPageIndex(GetActivePage()); 
                             // Или GetActiveIndex()
       }
       return CPropertySheet::OnCommand(wParam, lParam);
    }
  • SetTitle - метод устанавливает заголовок для окна набора свойств;
  • GetTabControl - метод возвращает указатель на объект класса CTabCtrl, обеспечивая доступ к элементу управления "вкладка".
  • SetFinishText - метод устанавливает текст, отображаемый на командной кнопке Finish, и делает ее доступной.
  • SetWizardButtons - метод устанавливает доступные командные кнопки для мастера, которые задаются комбинацией следующих флажков: PSWIZB_BACK, PSWIZB_NEXT, PSWIZB_FINISH, PSWIZB_DISABLEDFINISH.
  • SetWizardMode - метод устанавливает, что окно набора свойств будет мастером (при отображении окна вызовом метода DoModal возвращаемые значения будут ID_WIZFINISH или IDCANCEL).

    Например:

    CPropertySheet dlg;
    CPropertyPage page1, page2;
    dlg.AddPage(&page1);
    dlg.AddPage(&page2);
    dlg.SetWizardMode();
    dlg.DoModal();
  • AddPage - метод добавляет в окно набора свойств указанную страницу свойств;
  • RemovePage - метод удаляет указанную страницу свойств из окна набора свойств;
  • PressButton - метод имитирует выбор в окне набора свойств указанной командной кнопки.

Класс CPropertyPage

Объекты класса CPropertyPage представляют отдельные страницы набора свойств.

Непосредственным базовым классом для СPropertyPage является класс CDialog.

Класс CPropertyPage предоставляет ряд методов, включая следующие:

  • CancelToClose - метод вызывается для замены кнопки OK на кнопку Close.
  • SetModified - метод делает командную кнопку Apply доступной или недоступной.
  • QuerySiblings - метод используется для передачи сообщения другим страницам набора свойств.
  • OnCancel - метод вызывается средой выполнения при щелчке пользователя на командной кнопке Cancel.
  • OnKillActive - метод вызывается средой выполнения при смене текущей активной страницы свойств.
  • OnOK - метод вызывается средой выполнения при щелчке пользователя на командной кнопке OK.
  • OnSetActive - метод вызывается средой выполнения при выборе пользователем новой активной текущей страницы.
  • OnApply - метод вызывается средой выполнения при щелчке пользователя на командных кнопках OK или Apply.
  • OnWizardFinish - метод вызывается средой выполнения при щелчке пользователя на командной кнопке Finish.

Списки изображений

Класс CImageList

Класс CImageList реализует работу со списком одноразмерных изображений. Его непосредственным базовым классом является класс CObject.

Методы класса CImageList позволяют более эффективно управлять наборами больших и малых пиктограмм и наборами изображений.

Все изображения списка изображений хранятся в одном битовом массиве в экранном формате. Дополнительно список изображений может включать монохромный битовый массив, который содержит маску, используемую для отображения изображений с прозрачным фоном.

Пиктограммы всегда содержат маску для отображения с прозрачным фоном.

Создание объекта "список изображений" выполняется в два этапа.

  1. Вызывается конструктор класса CImageList.
  2. Вызывается метод Create, создающий список изображений и пристыковывающий его к объекту CImageList.

Например:

extern CImageList* pmyImageList;
pmyImageList->Create(32, 32, // Размер изображения
       ILC_COLOR16,       // 16-битовый цвет
         0,   // Первоначальное количество изображений
         4);

Класс CImageList предоставляет ряд переменных и методов, включая следующие:

  • m_hImageList - указатель списка изображений, сопоставленного данному объекту.
  • Create - конструктор объекта.
  • Attach - метод пристыковывает указанный список изображений к объекту типа CImageList.
  • Add - метод используется для добавления нового изображения к списку изображений.

    Например:

    extern CImageList* pmyImageList;
    // Добавление к списку изображений двух пиктограмм
    pmyImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON1));
    pmyImageList->Add(AfxGetApp()->LoadIcon(IDI_ICON2));
    // Добавление изображения, в котором все черные 
    // пиксели устанавливаются прозрачными
    CBitmap bm;
    bm.LoadBitmap(IDB_BITMAP1);
    pmyImageList->Add(&bm, RGB(0, 0, 0));
  • Replace - метод используется для удаления изображения из списка изображений.
< Лекция 21 || Лекция 22: 12 || Лекция 23 >
Александр Демьяненко
Александр Демьяненко

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

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

Добрый день!

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

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

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

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

Виктория Дразари
Виктория Дразари
Россия, г.Буденновск, с. Прасковея