Класс CPropertySheet

Представляет страницы свойств, также известные как диалоговые окна вкладки.

Синтаксис

class CPropertySheet : public CWnd

Участники

Открытые конструкторы

Имя Описание
CPropertySheet::CPropertySheet Формирует объект CPropertySheet.

Открытые методы

Имя Описание
CPropertySheet::AddPage Добавляет страницу в таблицу свойств.
CPropertySheet::Construct Формирует объект CPropertySheet.
CPropertySheet::Create Отображает лист свойств без режима.
CPropertySheet::DoModal Отображает модальный лист свойств.
CPropertySheet::EnableStackedTabs Указывает, использует ли лист свойств вкладки с накоплением или прокруткой.
CPropertySheet::EndDialog Завершает лист свойств.
CPropertySheet::GetActiveIndex Извлекает индекс активной страницы листа свойств.
CPropertySheet::GetActivePage Возвращает активный объект страницы.
CPropertySheet::GetPage Извлекает указатель на указанную страницу.
CPropertySheet::GetPageCount Извлекает количество страниц на листе свойств.
CPropertySheet::GetPageIndex Извлекает индекс указанной страницы листа свойств.
CPropertySheet::GetTabControl Извлекает указатель на элемент управления tab.
CPropertySheet::MapDialogRect Преобразует блоки диалогового окна прямоугольника в единицы экрана.
CPropertySheet::OnInitDialog Переопределите инициализацию листа свойств расширения.
CPropertySheet::PressButton Имитирует выбор указанной кнопки на листе свойств.
CPropertySheet::RemovePage Удаляет страницу из листа свойств.
CPropertySheet::SetActivePage Программным образом задает активный объект страницы.
CPropertySheet::SetFinishText Задает текст для кнопки "Готово".
CPropertySheet::SetTitle Задает подпись листа свойств.
CPropertySheet::SetWizardButtons Включает кнопки мастера.
CPropertySheet::SetWizardMode Включает режим мастера.

Открытые члены данных

Имя Описание
CPropertySheet::m_psh Структура Windows PROPSHEETHEADER . Предоставляет доступ к базовым параметрам листа свойств.

Замечания

Лист свойств состоит из CPropertySheet объекта и одного или нескольких CPropertyPage объектов. Платформа отображает лист свойств в виде окна с набором индексов вкладок и области, содержащей выбранную в данный момент страницу. Пользователь переходит на определенную страницу с помощью соответствующей вкладки.

CPropertySheet поддерживает расширенную структуру, представленную PROPSHEETHEADER в Windows 98 и Windows NT 2000. Структура содержит дополнительные флаги и элементы, поддерживающие использование фоновой растровой карты "водяного знака".

Чтобы автоматически отображать эти новые изображения в объекте листа свойств, передайте допустимые значения для растровых изображений и изображений палитры в вызове CPropertySheet::Construct или CPropertySheet::CPropertySheet.

CPropertySheet Хотя управление объектом не является производнымCDialog, управление CPropertySheet объектом похоже на управление CDialog объектом. Например, для создания листа свойств требуется двух частей: вызов конструктора, а затем вызов DoModal модального листа свойств или Create листа свойств без режима. CPropertySheet имеет два типа конструкторов: CPropertySheet::Construct и CPropertySheet::CPropertySheet.

При создании CPropertySheet объекта некоторые стили окон могут привести к возникновению исключения первого шанса. Это приводит к изменению стиля листа свойств перед созданием листа. Чтобы избежать этого исключения, необходимо задать следующие стили при создании CPropertySheet:

  • DS_3DLOOK

  • DS_CONTROL

  • WS_CHILD

  • WS_TABSTOP

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

  • DS_SHELLFONT

  • DS_LOCALEDIT

  • WS_CLIPCHILDREN

Любое другое Window Styles запрещено, и вы не должны включать их.

Обмен данными между CPropertySheet объектом и внешним объектом аналогичен обмену данными с CDialog объектом. Важно отметить, что параметры листа свойств обычно являются переменными CPropertyPage элементов объектов, а не CPropertySheet самого объекта.

Можно создать диалоговое окно вкладки типа мастера, состоящего из листа свойств с последовательностью страниц свойств, которые помогут пользователю выполнить шаги операции, например настроить устройство или создать информационный бюллетень. В диалоговом окне вкладки "Тип мастера" страницы свойств не имеют вкладок, и одновременно отображается только одна страница свойств. Кроме того, вместо кнопки "ОК" и "Применить сейчас" диалоговое окно вкладки "Тип мастера" имеет кнопку "Назад", "Далее" или "Готово", кнопку "Отмена" и кнопку "Справка".

Чтобы создать диалоговое окно типа мастера, выполните те же действия, которые необходимо выполнить, чтобы создать стандартный лист свойств, но вызов перед вызовом SetWizardModeDoModal. Чтобы включить кнопки мастера, вызовите SetWizardButtonsфлаги для настройки их функции и внешнего вида. Чтобы включить кнопку "Готово ", вызовите SetFinishText после того, как пользователь принял меры на последней странице мастера.

Дополнительные сведения об использовании CPropertySheet объектов см. в статье "Листы свойств" и "Страницы свойств".

Иерархия наследования

CObject

CCmdTarget

CWnd

CPropertySheet

Требования

Заголовок.afxdlgs.h

CPropertySheet::AddPage

Добавляет указанную страницу с самой правой вкладкой на листе свойств.

void AddPage(CPropertyPage* pPage);

Параметры

pPage
Указывает на страницу, добавляемую на лист свойств. Не может иметь значение NULL.

Замечания

Добавьте страницы в лист свойств слева направо, которое вы хотите, чтобы они отображались.

AddPageCPropertyPage добавляет объект в CPropertySheet список страниц объекта, но не создает окно для страницы. Платформа откладывает создание окна для страницы, пока пользователь не выберет ее.

При добавлении страницы свойств используется AddPageCPropertySheet родительский элемент CPropertyPage. Чтобы получить доступ к листу свойств на странице свойств, вызовите CWnd::GetParent.

Не нужно ждать, пока не будет создано окно листа свойств для вызова AddPage. Как правило, перед вызовом или Createвызовом будет вызываться.AddPageDoModal

При вызове AddPage после отображения страницы свойств строка вкладки будет отражать только что добавленную страницу.

Пример

// Add three pages to a CPropertySheet object, then show the 
// CPropertySheet object as a modal dialog.  CStylePage, CShapePage,  
// and CColorPage are CPropertyPage-derived classes created 
// by the Add Class wizard.  

CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));

CStylePage     stylePage;
CColorPage     colorPage;
CShapePage     shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);

dlgPropertySheet.DoModal();

CPropertySheet::Construct

Формирует объект CPropertySheet.

void Construct(
    UINT nIDCaption,
    CWnd* pParentWnd = NULL,
    UINT iSelectPage = 0);

void Construct(
    LPCTSTR pszCaption,
    CWnd* pParentWnd = NULL,
    UINT iSelectPage = 0);

void Construct(
    UINT nIDCaption,
    CWnd* pParentWnd,
    UINT iSelectPage,
    HBITMAP hbmWatermark,
    HPALETTE hpalWatermark = NULL,
    HBITMAP hbmHeader = NULL);

void Construct(
    LPCTSTR pszCaption,
    CWnd* pParentWnd,
    UINT iSelectPage,
    HBITMAP hbmWatermark,
    HPALETTE hpalWatermark = NULL,
    HBITMAP hbmHeader = NULL);

Параметры

nIDCaption
Идентификатор подпись, который будет использоваться для листа свойств.

pParentWnd
Указатель на родительское окно листа свойств. Если NULLродительское окно будет главным окном приложения.

iSelectPage
Индекс страницы, которая изначально будет находиться сверху. Значение по умолчанию — первая страница, добавленная на лист.

pszCaption
Указатель на строку, содержащую подпись, которая будет использоваться для листа свойств. Не может иметь значение NULL.

hbmWatermark
Обработка растрового изображения водяного знака страницы свойств.

hpalWatermark
Обработайте палитру растрового изображения водяного знака и (или) растрового изображения заголовка.

hbmHeader
Обработка растрового изображения заголовка страницы свойств.

Замечания

Вызовите эту функцию-член, если один из конструкторов классов еще не был вызван. Например, вызов при Construct объявлении или выделении массивов CPropertySheet объектов. В случае массивов необходимо вызвать Construct каждый элемент в массиве.

Чтобы отобразить лист свойств, вызов DoModal или Create. Строка, содержащаяся в первом параметре, будет помещена в строку подпись для листа свойств.

Вы можете автоматически отображать изображения подложки и (или) заголовков Construct, если вы используете третий или четвертый прототип, указанный выше, и вы передаете допустимые значения для hbmWatermarkпараметров , hpalWatermarkи /или hbmHeader параметров.

Пример

В следующем примере показано, в каких обстоятельствах вы будете вызывать Construct.

const int c_cSheets = 3;
CPropertySheet   grpropsheet[c_cSheets];
// no need to call Construct for this next one
CPropertySheet   someSheet(_T("Some sheet"));

LPTSTR rgszSheets[c_cSheets] = {
   _T("Sheet 1"),
   _T("Sheet 2"),
   _T("Sheet 3")
};

for (int i = 0; i < c_cSheets; i++)
   grpropsheet[i].Construct(rgszSheets[i]);

CPropertySheet::CPropertySheet

Формирует объект CPropertySheet.

CPropertySheet();

explicit CPropertySheet(
    UINT nIDCaption,
    CWnd* pParentWnd = NULL,
    UINT iSelectPage = 0);

explicit CPropertySheet(
    LPCTSTR pszCaption,
    CWnd* pParentWnd = NULL,
    UINT iSelectPage = 0);

CPropertySheet(
    UINT nIDCaption,
    CWnd* pParentWnd,
    UINT iSelectPage,
    HBITMAP hbmWatermark,
    HPALETTE hpalWatermark = NULL,
    HBITMAP hbmHeader = NULL);

CPropertySheet(
    LPCTSTR pszCaption,
    CWnd* pParentWnd,
    UINT iSelectPage,
    HBITMAP hbmWatermark,
    HPALETTE hpalWatermark = NULL,
    HBITMAP hbmHeader = NULL);

Параметры

nIDCaption
Идентификатор подпись, который будет использоваться для листа свойств.

pParentWnd
Указывает на родительское окно листа свойств. Если NULLродительское окно будет главным окном приложения.

iSelectPage
Индекс страницы, которая изначально будет находиться сверху. Значение по умолчанию — первая страница, добавленная на лист.

pszCaption
Указывает на строку, содержащую подпись, которая будет использоваться для листа свойств. Не может иметь значение NULL.

hbmWatermark
Дескриптор фонового растрового изображения листа свойств.

hpalWatermark
Дескриптор палитры растрового изображения водяного знака и /или растрового изображения заголовка.

hbmHeader
Дескриптор растрового изображения заголовка страницы свойств.

Замечания

Чтобы отобразить лист свойств, вызов DoModal или Create. Строка, содержащаяся в первом параметре, будет помещена в строку подпись для листа свойств.

Если у вас несколько параметров (например, при использовании массива), используйте Construct вместо CPropertySheetнего.

Вы можете автоматически отображать образы подложки и (или) заголовков CPropertySheet, если вы используете третий или четвертый прототип, указанный выше, и вы передаете допустимые значения для hbmWatermarkпараметров , hpalWatermarkи (или) hbmHeader параметров.

Пример

// Declare a CPropertySheet object titled "Simple PropertySheet".
CPropertySheet dlgPropertySheet1(_T("Simple PropertySheet"));

// Declare a CPropertySheet object whose title is specified in the
// IDS_PROPERTYSHEET_TITLE string resource, and the second page is
// initially on top.  
CPropertySheet dlgPropertySheet2(IDS_PROPERTYSHEET_TITLE, this, 1);

CPropertySheet::Create

Отображает лист свойств без режима.

virtual BOOL Create(CWnd* pParentWnd = NULL,
    DWORD dwStyle = (DWORD)-1,
    DWORD dwExStyle = 0);

Параметры

pParentWnd
Указывает на родительское окно. Если NULLродительский элемент является рабочим столом.

dwStyle
Стили окон для листа свойств. Полный список доступных стилей см. в разделе "Стили окон".

dwExStyle
Расширенные стили окон для листа свойств. Полный список доступных стилей см. в разделе "Расширенные стили окон"

Возвращаемое значение

Ненулевое значение, если лист свойств создан успешно; в противном случае — 0.

Замечания

Вызов Create может находиться внутри конструктора или вызывать его после вызова конструктора.

Стиль по умолчанию, выраженный путем передачи -1 как dwStyle, фактически WS_SYSMENU|WS_POPUP|WS_CAPTION|DS_MODALFRAME|DS_CONTEXTHELP|WS_VISIBLE. Стиль расширенного окна по умолчанию, выраженный путем передачи 0 как dwExStyle, фактически WS_EX_DLGMODALFRAME.

Функция-член Create возвращается сразу после создания листа свойств. Чтобы уничтожить лист свойств, вызовите CWnd::DestroyWindow.

Таблицы свойств без режима, отображаемые с вызовом Create , не имеют ОК, Отмена, Применение и кнопка справки в качестве модальных листов свойств. Требуемые кнопки должны быть созданы пользователем.

Чтобы отобразить таблицу модальных свойств, вызовите DoModal вместо этого.

Пример

// This code fragment shows how to create a modeless property sheet 
// dialog in a command message handler (OnModelessPropertySheet()) 
// of a CView-derived class.
void CPSheetView::OnModelessPropertySheet()
{
   // Declare a CPropertySheet object.  m_pdlgPropertySheet is a data
   // member of type CPropertySheet in CView-derived class.
   m_pdlgPropertySheet = new CPropertySheet(_T("Simple PropertySheet"));
   ASSERT(m_pdlgPropertySheet);

   // Add three pages to the CPropertySheet object.  Both m_pstylePage, 
   // m_pcolorPage, and m_pshapePage are data members of type 
   // CPropertyPage-derived classes in CView-derived class.
   m_pstylePage = new CStylePage;
   m_pcolorPage = new CColorPage;
   m_pshapePage = new CShapePage;
   m_pdlgPropertySheet->AddPage(m_pstylePage);
   m_pdlgPropertySheet->AddPage(m_pcolorPage);
   m_pdlgPropertySheet->AddPage(m_pshapePage);

   // Create a modeless CPropertySheet dialog.
   m_pdlgPropertySheet->Create();
}

 

// The code fragment below shows how to destroy the C++ objects for
// propertysheet and propertypage in the destructor of CView-derived
// class.
// NOTE:  DestroyWindow() is called in CPropertySheet::OnClose() so
// you do not need to call it here.  Property pages are children
// of the CPropertySheet, they will be destroyed by their parents.
CPSheetView::~CPSheetView()
{
   delete m_pshapePage;
   delete m_pstylePage;
   delete m_pcolorPage;
   delete m_pdlgPropertySheet;
}

CPropertySheet::DoModal

Отображает модальный лист свойств.

virtual INT_PTR DoModal();

Возвращаемое значение

IDOK или, если функция выполнена успешно; в IDCANCEL противном случае — 0 или –1. Если лист свойств был установлен в качестве мастера (см SetWizardMode.), DoModal возвращает ID_WIZFINISH или IDCANCEL.

Замечания

Возвращаемое значение соответствует идентификатору элемента управления, закрывающего лист свойств. После возврата этой функции окна, соответствующие листу свойств, и все страницы будут уничтожены. Сами объекты по-прежнему будут существовать. Как правило, вы получите данные из CPropertyPage объектов после DoModal возврата IDOK.

Чтобы отобразить лист свойств без режима, вызовите Create вместо этого.

При создании страницы свойств из соответствующего ресурса диалогового окна это может вызвать исключение первого шанса. Это приводит к изменению стиля ресурса диалогового окна на требуемый стиль перед созданием страницы. Так как ресурсы обычно доступны только для чтения, это приводит к исключению. Система обрабатывает исключение и делает копию измененного ресурса. Поэтому исключение первого шанса может быть проигнорировано.

Примечание.

Это исключение должно обрабатываться операционной системой, если выполняется компиляция с асинхронной моделью обработки исключений. Дополнительные сведения о моделях обработки исключений см. в разделе /EH (Модель обработки исключений). В этом случае не следует упаковывать вызовы в CPropertySheet::DoModal блок try-catch C++, в котором перехват обрабатывает все исключения, например catch (...). Этот блок обрабатывает исключение, предназначенное для операционной системы, и приводит к непредсказуемому поведению. Однако можно безопасно использовать обработку исключений C++ с определенными типами исключений или структурированной обработкой исключений, в которой исключение "Нарушение доступа" передается в операционную систему.

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

  • DS_3DLOOK

  • DS_CONTROL

  • WS_CHILD

  • WS_TABSTOP

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

  • DS_SHELLFONT

  • DS_LOCALEDIT

  • WS_CLIPCHILDREN

Отключите все остальные стили Windows, так как они несовместимы с листами свойств. Этот совет не применяется к расширенным стилям. Настройка этих стандартных стилей гарантирует, что лист свойств не должен быть изменен и не будет создавать исключение первого шанса.

Пример

Пример см. в примере CPropertySheet::AddPage.

CPropertySheet::EnableStackedTabs

Указывает, следует ли стекать строки вкладок на листе свойств.

void EnableStackedTabs(BOOL bStacked);

Параметры

bStacked
Указывает, включены ли вкладки с накоплением в листе свойств. Отключите строки тегов с накоплением, задав для этого значение bStackedFALSE.

Замечания

По умолчанию, если лист свойств имеет больше вкладок, чем будет помещаться в одну строку в ширину листа свойств, вкладки будут стекаться в нескольких строках. Чтобы использовать прокручивающиеся вкладки вместо вкладок с накоплением, вызов EnableStackedTabsbStacked с установленным значением FALSE перед вызовом DoModal или Create.

При создании модального или безрежимного листа свойств необходимо вызывать EnableStackedTabs вызов. Чтобы включить этот стиль в производный CPropertySheetкласс, напишите обработчик сообщений.WM_CREATE В переопределенной версии CWnd::OnCreateвызовите перед вызовом EnableStackedTabs( FALSE ) реализации базового класса.

Пример

int CMyPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   // Set for Scrolling Tabs style
   EnableStackedTabs(FALSE);
   // Call the base class
   if (CPropertySheet::OnCreate(lpCreateStruct) == -1)
      return -1;

   return 0;
}

CPropertySheet::EndDialog

Завершает лист свойств.

void EndDialog(int nEndID);

Параметры

nEndID
Идентификатор, используемый в качестве возвращаемого значения листа свойств.

Замечания

Эта функция-член вызывается платформой при нажатии кнопки "ОК", "Отмена" или "Закрыть". Вызовите эту функцию-член, если происходит событие, которое должно закрыть лист свойств.

Эта функция-член используется только с модальным диалоговым окном.

Пример

Пример см. в примере CPropertySheet::PressButton.

CPropertySheet::GetActiveIndex

Возвращает номер индекса активной страницы окна листа свойств, а затем использует возвращаемый номер индекса в качестве параметра.GetPage

int GetActiveIndex() const;

Возвращаемое значение

Номер индекса активной страницы.

Пример

Пример см. в примере CPropertySheet::GetActivePage.

CPropertySheet::GetActivePage

Извлекает активную страницу окна листа свойств.

CPropertyPage* GetActivePage() const;

Возвращаемое значение

Указатель на активную страницу.

Замечания

Используйте эту функцию-член для выполнения некоторых действий на активной странице.

Пример

// The code fragment below sets the last active page (i.e. the 
// active page when the propertysheet was closed) to be the first 
// visible page when the propertysheet is shown. The last active 
// page was saved in m_LastActivePage, (a member variable of 
// CDocument-derived class) when OK was selected from the 
// propertysheet. CMyPropertySheet is a CPropertySheet-derived class.
BOOL CMyPropertySheet::OnInitDialog()
{
   BOOL bResult = CPropertySheet::OnInitDialog();

   CMDIFrameWnd* pframe = (CMDIFrameWnd*)AfxGetMainWnd();
   CMDIChildWnd* pchild = pframe->MDIGetActive();
   CPSheetDoc* doc = (CPSheetDoc*)pchild->GetActiveDocument();
   SetActivePage(doc->m_LastActivePage);

   return bResult;
}

BOOL CMyPropertySheet::OnCommand(WPARAM wParam, LPARAM lParam)
{
   if (LOWORD(wParam) == IDOK)
   {
      CMDIFrameWnd* pframe = (CMDIFrameWnd*)AfxGetMainWnd();
      CMDIChildWnd* pchild = pframe->MDIGetActive();
      CPSheetDoc* doc = (CPSheetDoc*)pchild->GetActiveDocument();
      doc->m_LastActivePage = GetPageIndex(GetActivePage()); // or GetActiveIndex()
   }

   return CPropertySheet::OnCommand(wParam, lParam);
}

CPropertySheet::GetPage

Возвращает указатель на указанную страницу в этом листе свойств.

CPropertyPage* GetPage(int nPage) const;

Параметры

nPage
Индекс требуемой страницы, начиная с 0. Должно быть от 0 до одного меньше количества страниц в листе свойств включительно.

Возвращаемое значение

Указатель на страницу, соответствующую параметру nPage .

Пример

Пример см. в примере CPropertyPage::OnWizardFinish.

CPropertySheet::GetPageCount

Определяет количество страниц, которые в настоящее время находятся на листе свойств.

int GetPageCount() const;

Возвращаемое значение

Количество страниц на листе свойств.

Пример

Пример см. в примере CPropertyPage::OnWizardFinish.

CPropertySheet::GetPageIndex

Извлекает номер индекса указанной страницы на листе свойств.

int GetPageIndex(CPropertyPage* pPage);

Параметры

pPage
Указывает на страницу с найденным индексом. Не может иметь значение NULL.

Возвращаемое значение

Номер индекса страницы.

Замечания

Например, вы будете использовать GetPageIndex для получения индекса страницы для использования SetActivePage или GetPage.

Пример

Пример см. в примере CPropertySheet::GetActivePage.

CPropertySheet::GetTabControl

Извлекает указатель на элемент управления табуляции, чтобы сделать что-то конкретное для элемента управления вкладки (т. е. использовать любой из API в CTabCtrl).

CTabCtrl* GetTabControl() const;

Возвращаемое значение

Указатель на элемент управления tab.

Замечания

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

Пример

// Create and associate a tooltip control to the tab control of 
// CMyTTPropertySheet.  CMyTTPropertySheet is a CPropertySheet-derived
// class.
BOOL CMyTTPropertySheet::OnInitDialog()
{
   BOOL bResult = CPropertySheet::OnInitDialog();

   // Create a tooltip control.  m_pToolTipCtrl is a member variable
   // of type CToolTipCtrl* in CMyTTPropertySheet class.  It is 
   // initialized to NULL in the constructor, and destroyed in the 
   // destructor of CMyTTPropertySheet class.
   m_pToolTipCtrl = new CToolTipCtrl;
   if (!m_pToolTipCtrl->Create(this))
   {
      TRACE(_T("Unable To create ToolTip\n"));
      return bResult;
   }

   // Associate the tooltip control to the tab control
   // of CMyPropertySheet.
   CTabCtrl* ptab = GetTabControl();
   ptab->SetToolTips(m_pToolTipCtrl);

   // Get the bounding rectangle of each tab in the tab control of the
   // property sheet. Use this rectangle when registering a tool with 
   // the tool tip control.  IDS_FIRST_TOOLTIP is the first ID string 
   // resource that contains the text for the tool.
   int count = ptab->GetItemCount();
   int id = IDS_FIRST_TOOLTIP;
   for (int i = 0; i < count; i++)
   {
      CRect r;
      ptab->GetItemRect(i, &r);
      VERIFY(m_pToolTipCtrl->AddTool(ptab, id, &r, id));
      id++;
   }

   // Activate the tooltip control.
   m_pToolTipCtrl->Activate(TRUE);

   return bResult;
}

// Override PreTranslateMessage() so RelayEvent() can be 
// called to pass a mouse message to CMyTTPropertySheet's 
// tooltip control for processing.
BOOL CMyTTPropertySheet::PreTranslateMessage(MSG* pMsg)
{
   if (NULL != m_pToolTipCtrl)
      m_pToolTipCtrl->RelayEvent(pMsg);

   return CPropertySheet::PreTranslateMessage(pMsg);
}

CPropertySheet::m_psh

Структура, члены которой хранят характеристики PROPSHEETHEADER.

Замечания

Используйте эту структуру для инициализации внешнего вида листа свойств после его создания, но перед отображением функции-члена DoModal . Например, задайте dwSize элемент m_psh размера, который должен иметь лист свойств.

Дополнительные сведения об этой структуре, включая список его членов, см PROPSHEETHEADER . в пакете SDK для Windows.

Пример

// This code fragment shows how to change CPropertySheet's settings 
// before it is shown.  After the changes, CPropertySheet has the 
// caption "Simple Properties", no "Apply" button, and the 
// second page (CColorPage) initially on top.  

CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));

CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);

dlgPropertySheet.m_psh.dwFlags |= PSH_NOAPPLYNOW | PSH_PROPTITLE;
dlgPropertySheet.m_psh.pszCaption = _T("Simple");
dlgPropertySheet.m_psh.nStartPage = 1;

dlgPropertySheet.DoModal();

CPropertySheet::MapDialogRect

Преобразует блоки диалогового окна прямоугольника в единицы экрана.

void MapDialogRect(LPRECT lpRect) const;

Параметры

lpRect
Указывает на структуру RECT или CRect объект, содержащий координаты диалогового окна для преобразования.

Замечания

Единицы диалогового окна определяются в соответствии с текущим базовым блоком диалогового окна, производным от средней ширины и высоты символов в шрифте, используемом для текста диалогового окна. Одна горизонтальная единица — одна четвертая единица блока базовой ширины диалогового окна, а одна вертикальная единица — одно восьмое из базовой высоты диалогового окна.

Функция GetDialogBaseUnits Windows возвращает сведения о размере для системного шрифта, но при использовании стиля DS_SETFONT в файле определения ресурсов можно указать другой шрифт для каждого листа свойств. Функция Windows, описанная MapDialogRect в пакете SDK для Windows, использует соответствующий шрифт для этого диалогового окна.

Функция-член MapDialogRect заменяет блоки диалогового окна на lpRect единицы экрана (пиксели), чтобы прямоугольник можно было использовать для создания диалогового окна или размещения элемента управления в поле.

CPropertySheet::OnInitDialog

Переопределяется для инициализации листа свойств расширения.

virtual BOOL OnInitDialog();

Возвращаемое значение

Указывает, установлено ли приложение для ввода фокуса на один из элементов управления на листе свойств. Если OnInitDialog возвращается ненулевое значение, Windows задает фокус ввода первым элементом управления на листе свойств. Приложение может возвращать значение 0, только если он явно задал фокус ввода одному из элементов управления в листе свойств.

Замечания

Эта функция-член вызывается в ответ на WM_INITDIALOG сообщение. Это сообщение отправляется на лист свойств во время Create или DoModal вызовы, которые происходят непосредственно перед отображением листа свойств.

Переопределите эту функцию-член, если необходимо выполнить специальную обработку при инициализации листа свойств. В переопределенной версии сначала вызовите базовый класс OnInitDialog , но игнорируйте возвращаемое значение. Обычно вы вернеесь TRUE из переопределенной функции-члена.

Для этой функции-члена не требуется запись карты сообщений.

CPropertySheet::PressButton

Имитирует выбор указанной кнопки на листе свойств.

void PressButton(int nButton);

Параметры

nButton
nButton : определяет нажатие кнопки. Этот параметр может принимать одно из следующих значений :

  • PSBTN_BACK Нажмите кнопку "Назад".

  • PSBTN_NEXT Нажмите кнопку "Далее".

  • PSBTN_FINISH Нажмите кнопку "Готово".

  • PSBTN_OK Нажмите кнопку "ОК".

  • PSBTN_APPLYNOW Нажмите кнопку "Применить сейчас".

  • PSBTN_CANCEL Нажмите кнопку "Отмена".

  • PSBTN_HELP Нажмите кнопку справки.

Замечания

Дополнительные сведения о сообщении Pressbutton пакета SDK для Windows см PSM_PRESSBUTTON . в статье.

Вызов, который PressButton не будет отправлять PSN_APPLY уведомление с страницы свойств в платформу. Чтобы отправить это уведомление, вызовите CPropertyPage::OnOK.

Пример

// Simulate the selection of OK and Cancel buttons when Alt+K and
// Alt+C are pressed.  CMyPropertySheet is a CPropertySheet-derived 
// class.
BOOL CMyPropertySheet::PreTranslateMessage(MSG* pMsg)
{
   if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
   {
      BOOL altkey = GetKeyState(VK_MENU) < 0;
      if (altkey)
      {
         BOOL handled = TRUE;
         switch (toupper((int)pMsg->wParam))
         {
         case 'C':                     // for Alt+C - Cancel button
            PressButton(PSBTN_CANCEL);   // or EndDialog(IDCANCEL);
            break;

         case 'K':                     // for Alt+K - OK button
            PressButton(PSBTN_OK);      // or EndDialog(IDOK);
            break;

         default:
            handled = FALSE;
         }

         if (handled)
            return TRUE;
      }
   }

   return CPropertySheet::PreTranslateMessage(pMsg);
}

CPropertySheet::RemovePage

Удаляет страницу из листа свойств и уничтожает связанное окно.

void RemovePage(CPropertyPage* pPage);
void RemovePage(int nPage);

Параметры

pPage
Указывает на страницу, удаленную из листа свойств. Не может иметь значение NULL.

nPage
Индекс страницы, который нужно удалить. Должно быть от 0 до одного меньше количества страниц в листе свойств включительно.

Замечания

Сам CPropertyPage объект не уничтожается, пока владелец CPropertySheet окна не будет закрыт.

CPropertySheet::SetActivePage

Изменяет активную страницу.

BOOL SetActivePage(int nPage);
BOOL SetActivePage(CPropertyPage* pPage);

Параметры

nPage
Индекс заданной страницы. Оно должно находиться в диапазоне от 0 до одного, чем число страниц в листе свойств включительно.

pPage
Указывает на страницу, заданную на листе свойств. Не может иметь значение NULL.

Возвращаемое значение

Ненулевое значение, если лист свойств активирован успешно; в противном случае — 0.

Замечания

Например, используйте SetActivePage , если действие пользователя на одной странице должно привести к тому, что другая страница станет активной.

Пример

Пример см. в примере CPropertySheet::GetActivePage.

CPropertySheet::SetFinishText

Задает текст в кнопке "Готово".

void SetFinishText(LPCTSTR lpszText);

Параметры

lpszText
Указывает на текст, отображаемый на кнопке "Готово".

Замечания

Вызов, SetFinishText чтобы отобразить текст на кнопке "Готово" и скрыть кнопки "Далее" и "Назад" после завершения действия пользователя на последней странице мастера.

Пример

// CShapePage is the last wizard property page. Enable the Back 
// button and change the Next button to Finish. The "Finish" button 
// will have "Done" as its caption.
BOOL CShapePage::OnSetActive()
{
   CPropertySheet* psheet = (CPropertySheet*)GetParent();
   psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
   psheet->SetFinishText(_T("Done"));

   return CPropertyPage::OnSetActive();
}

CPropertySheet::SetTitle

Указывает подпись листа свойств (текст, отображаемый в строке заголовка окна кадра).

void SetTitle(
    LPCTSTR lpszText,
    UINT nStyle = 0);

Параметры

nStyle
Задает стиль заголовка листа свойств. Стиль должен быть указан в 0 или как PSH_PROPTITLE. Если стиль задан какPSH_PROPTITLE, слово "Свойства" отображается после текста, указанного в качестве подпись. Например, вызов SetTitle("Simple", PSH_PROPTITLE) приведет к подпись листа свойств "Простые свойства".

lpszText
Указывает на текст, используемый в качестве подпись в строке заголовка листа свойств.

Замечания

По умолчанию лист свойств использует параметр подпись в конструкторе листа свойств.

Пример

// Declare a CPropertySheet object with a caption "Simple PropertySheet".
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));

// Add three pages to the CPropertySheet object. CStylePage, CColorPage,
// and CShapePage are CPropertyPage-derived classes created
// by the Add Class wizard.
CStylePage     stylePage;
CColorPage     colorPage;
CShapePage     shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);

// Change the caption of the CPropertySheet object 
// from "Simple PropertySheet" to "Simple Properties".
dlgPropertySheet.SetTitle(_T("Simple"), PSH_PROPTITLE);

// Show the CPropertySheet object as MODAL.
dlgPropertySheet.DoModal();

CPropertySheet::SetWizardButtons

Включает или отключает кнопку "Назад", "Далее" или "Готово" на листе свойств мастера.

void SetWizardButtons(DWORD dwFlags);

Параметры

dwFlags
Набор флагов, которые настраивают функцию и внешний вид кнопок мастера. Этот параметр может быть сочетанием следующих значений:

  • PSWIZB_BACK Кнопка "Назад"

  • PSWIZB_NEXT Кнопка "Далее"

  • PSWIZB_FINISH Кнопка "Готово"

  • PSWIZB_DISABLEDFINISH Кнопка "Отключено готово"

Замечания

Вызов SetWizardButtons осуществляется только после открытия диалогового окна. Перед вызовом не удается вызватьDoModalSetWizardButtons. Как правило, следует вызывать SetWizardButtons из CPropertyPage::OnSetActive.

Если вы хотите изменить текст на кнопке "Готово" или скрыть кнопки "Далее" и "Назад" после завершения работы мастера, вызовите вызов SetFinishText. Обратите внимание, что одна и та же кнопка используется для "Готово" и "Далее". Вы можете одновременно отобразить кнопку "Готово" или "Далее", но не одновременно.

Пример

У него CPropertySheet есть три страницы свойств мастера: CStylePage, CColorPageи CShapePage. В приведенном ниже фрагменте кода показано, как включить и отключить кнопки "Назад " и "Далее " на странице свойств мастера.

// CStylePage is the first wizard property page.  Disable the Back 
// button but enable the Next button.
BOOL CStylePage::OnSetActive() 
{
   CPropertySheet* psheet = (CPropertySheet*) GetParent();   
   psheet->SetWizardButtons(PSWIZB_NEXT);
   
   return CPropertyPage::OnSetActive();
}

 

// CColorPage is the second wizard property page. Enable both the 
// Back button and the Next button.
BOOL CColorPage::OnSetActive()
{
   CPropertySheet* psheet = (CPropertySheet*)GetParent();
   psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);

   return CPropertyPage::OnSetActive();
}

 

// CShapePage is the last wizard property page. Enable the Back 
// button and change the Next button to Finish. The "Finish" button 
// will have "Done" as its caption.
BOOL CShapePage::OnSetActive()
{
   CPropertySheet* psheet = (CPropertySheet*)GetParent();
   psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
   psheet->SetFinishText(_T("Done"));

   return CPropertyPage::OnSetActive();
}

CPropertySheet::SetWizardMode

Устанавливает страницу свойств в качестве мастера.

void SetWizardMode();

Замечания

Ключевой особенностью страницы свойств мастера является переход пользователя с помощью кнопок Next или Finish, Back и Cancel вместо вкладок.

Вызов SetWizardMode перед вызовом DoModal. После вызова SetWizardModeDoModal возвращается ID_WIZFINISH либо (если пользователь закрывается с помощью кнопки "Готово") или IDCANCEL.

SetWizardModePSH_WIZARD задает флаг.

Пример

CPropertySheet sheet(_T("Simple PropertySheet"));

CStylePage pageStyle;
CColorPage pageColor;
CShapePage pageShape;

sheet.AddPage(&pageStyle);
sheet.AddPage(&pageColor);
sheet.AddPage(&pageShape);

sheet.SetWizardMode();

sheet.DoModal();

См. также

Пример MFC CMNCTRL1
Пример MFC CMNCTRL2
Пример MFC PROPDLG
Пример MFC SNAPVW
CWnd Класса
Диаграмма иерархии