Класс 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
самого объекта.
Можно создать диалоговое окно вкладки типа мастера, состоящего из листа свойств с последовательностью страниц свойств, которые помогут пользователю выполнить шаги операции, например настроить устройство или создать информационный бюллетень. В диалоговом окне вкладки "Тип мастера" страницы свойств не имеют вкладок, и одновременно отображается только одна страница свойств. Кроме того, вместо кнопки "ОК" и "Применить сейчас" диалоговое окно вкладки "Тип мастера" имеет кнопку "Назад", "Далее" или "Готово", кнопку "Отмена" и кнопку "Справка".
Чтобы создать диалоговое окно типа мастера, выполните те же действия, которые необходимо выполнить, чтобы создать стандартный лист свойств, но вызов перед вызовом SetWizardMode
DoModal
. Чтобы включить кнопки мастера, вызовите SetWizardButtons
флаги для настройки их функции и внешнего вида. Чтобы включить кнопку "Готово ", вызовите SetFinishText
после того, как пользователь принял меры на последней странице мастера.
Дополнительные сведения об использовании CPropertySheet
объектов см. в статье "Листы свойств" и "Страницы свойств".
Иерархия наследования
CPropertySheet
Требования
Заголовок: afxdlgs.h
CPropertySheet::AddPage
Добавляет указанную страницу с самой правой вкладкой на листе свойств.
void AddPage(CPropertyPage* pPage);
Параметры
pPage
Указывает на страницу, добавляемую на лист свойств. Не может иметь значение NULL
.
Замечания
Добавьте страницы в лист свойств слева направо, которое вы хотите, чтобы они отображались.
AddPage
CPropertyPage
добавляет объект в CPropertySheet
список страниц объекта, но не создает окно для страницы. Платформа откладывает создание окна для страницы, пока пользователь не выберет ее.
При добавлении страницы свойств используется AddPage
CPropertySheet
родительский элемент CPropertyPage
. Чтобы получить доступ к листу свойств на странице свойств, вызовите CWnd::GetParent
.
Не нужно ждать, пока не будет создано окно листа свойств для вызова AddPage
. Как правило, перед вызовом или Create
вызовом будет вызываться.AddPage
DoModal
При вызове 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
Указывает, включены ли вкладки с накоплением в листе свойств. Отключите строки тегов с накоплением, задав для этого значение bStacked
FALSE
.
Замечания
По умолчанию, если лист свойств имеет больше вкладок, чем будет помещаться в одну строку в ширину листа свойств, вкладки будут стекаться в нескольких строках. Чтобы использовать прокручивающиеся вкладки вместо вкладок с накоплением, вызов EnableStackedTabs
bStacked
с установленным значением 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
осуществляется только после открытия диалогового окна. Перед вызовом не удается вызватьDoModal
SetWizardButtons
. Как правило, следует вызывать 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
. После вызова SetWizardMode
DoModal
возвращается ID_WIZFINISH
либо (если пользователь закрывается с помощью кнопки "Готово") или IDCANCEL
.
SetWizardMode
PSH_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
Класс
Диаграмма иерархии