Класс CPropertyPage
Представляет отдельные страницы вкладки свойств, также известные как диалоговое окно вкладки.
Синтаксис
class CPropertyPage : public CDialog
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CPropertyPage::CPropertyPage |
Формирует объект CPropertyPage . |
Открытые методы
Имя | Описание |
---|---|
CPropertyPage::CancelToClose |
Изменяет кнопку "ОК", чтобы прочитать "Закрыть" и отключает кнопку "Отмена", после неустранимого изменения на странице листа модального свойства. |
CPropertyPage::Construct |
Формирует объект CPropertyPage . Используйте Construct , если вы хотите указать параметры во время выполнения или используете массивы. |
CPropertyPage::GetPSP |
Извлекает структуру Windows PROPSHEETPAGE , связанную CPropertyPage с объектом. |
CPropertyPage::OnApply |
Вызывается платформой при нажатии кнопки "Применить сейчас ". |
CPropertyPage::OnCancel |
Вызывается платформой при нажатии кнопки "Отмена ". |
CPropertyPage::OnKillActive |
Вызывается платформой, когда текущая страница больше не является активной. Выполните проверку данных здесь. |
CPropertyPage::OnOK |
Вызывается платформой при нажатии кнопки "ОК", "Применить сейчас" или "Закрыть ". |
CPropertyPage::OnQueryCancel |
Вызывается платформой при нажатии кнопки "Отмена " и перед отменой. |
CPropertyPage::OnReset |
Вызывается платформой при нажатии кнопки "Отмена ". |
CPropertyPage::OnSetActive |
Вызывается платформой при создании активной страницы. |
CPropertyPage::OnWizardBack |
Вызывается платформой при нажатии кнопки "Назад " при использовании листа свойств типа мастера. |
CPropertyPage::OnWizardFinish |
Вызывается платформой при нажатии кнопки "Готово " при использовании листа свойств типа мастера. |
CPropertyPage::OnWizardNext |
Вызывается платформой при нажатии кнопки "Далее " при использовании листа свойств мастера типа. |
CPropertyPage::QuerySiblings |
Перенаправит сообщение на каждую страницу листа свойств. |
CPropertyPage::SetModified |
Вызов для активации или отключения кнопки "Применить сейчас ". |
Открытые члены данных
Имя | Описание |
---|---|
CPropertyPage::m_psp |
Структура Windows PROPSHEETPAGE . Предоставляет доступ к базовым параметрам страницы свойств. |
Замечания
Как и в стандартных диалоговых окнах, вы наследуете класс на CPropertyPage
каждой странице в листе свойств. Чтобы использовать CPropertyPage
производные объекты, сначала создайте объект, а затем создайте CPropertySheet
объект для каждой страницы, которая идет на листе свойств. Вызов CPropertySheet::AddPage
каждой страницы на листе, а затем отображение листа свойств путем вызова CPropertySheet::DoModal
модального листа свойств или CPropertySheet::Create
для листа свойств без режима.
Можно создать диалоговое окно вкладки типа мастера, состоящего из листа свойств с последовательностью страниц свойств, которые помогут пользователю выполнить шаги операции, например настроить устройство или создать информационный бюллетень. В диалоговом окне вкладки "Тип мастера" страницы свойств не имеют вкладок, и одновременно отображается только одна страница свойств. Кроме того, вместо кнопки "ОК " и "Применить теперь " диалоговое окно вкладки "Тип мастера" имеет кнопку "Назад ", "Далее " или "Готово " и кнопку "Отмена ".
Дополнительные сведения о создании листа свойств в качестве мастера см. в статье CPropertySheet::SetWizardMode
. Дополнительные сведения об использовании CPropertyPage
объектов см. в статье "Листы свойств и страницы свойств".
Иерархия наследования
CPropertyPage
Требования
Заголовок: afxdlgs.h
CPropertyPage::CancelToClose
Вызовите эту функцию после того, как неустранимое изменение было внесено в данные на странице таблицы модальных свойств.
void CancelToClose();
Замечания
Эта функция изменит кнопку "ОК" на "Закрыть" и отключит кнопку "Отмена". Это изменение предупреждает пользователя о том, что изменение является постоянным, и изменения не могут быть отменены.
Функция-член CancelToClose
ничего не делает в листе свойств без режима, так как в листе свойств без режима нет кнопки "Отмена " по умолчанию.
Пример
См. пример для CPropertyPage::QuerySiblings.
CPropertyPage::Construct
Вызовите эту функцию-член для создания CPropertyPage
объекта.
void Construct(
UINT nIDTemplate,
UINT nIDCaption = 0);
void Construct(
LPCTSTR lpszTemplateName,
UINT nIDCaption = 0);
void Construct(
UINT nIDTemplate,
UINT nIDCaption,
UINT nIDHeaderTitle,
UINT nIDHeaderSubTitle = 0);
void Construct(
LPCTSTR lpszTemplateName,
UINT nIDCaption,
UINT nIDHeaderTitle,
UINT nIDHeaderSubTitle = 0);
Параметры
nIDTemplate
Идентификатор шаблона, используемого для этой страницы.
nIDCaption
Идентификатор имени, который будет помещен на вкладку для этой страницы. Если значение 0, имя будет взято из шаблона диалогового окна для этой страницы.
lpszTemplateName
Содержит строку, завершающую значение NULL, которая является именем ресурса шаблона.
nIDHeaderTitle
Идентификатор имени, которое нужно поместить в заголовок заголовка страницы свойства. По умолчанию 0.
nIDHeaderSubTitle
Идентификатор имени, которое нужно поместить в подзаголовок заголовка страницы свойства. По умолчанию 0.
Замечания
Объект отображается после выполнения всех следующих условий:
Страница добавлена на лист свойств с помощью
CPropertySheet::AddPage
.Пользователь выбрал (на вкладке) эту страницу.
Вызовите Construct
, если один из других конструкторов классов не был вызван. Функция-член Construct
является гибкой, так как можно оставить инструкцию параметра пустой, а затем указать несколько параметров и построение в любой точке кода.
Необходимо использовать Construct
при работе с массивами, и необходимо вызывать Construct
каждый элемент массива, чтобы члены данных были назначены правильные значения.
Пример
// Declare a CPropertySheet object.
CPropertySheet sheet(_T("Simple PropertySheet"));
// Create three CPropertyPage objects whose template IDs are specified
// in rgID array, and add each page to the CPropertySheet object.
const int c_cPages = 3;
CPropertyPage pages[c_cPages];
UINT rgID[c_cPages] = { IDD_STYLE, IDD_COLOR, IDD_SHAPE };
for (int i = 0; i < c_cPages; i++)
{
pages[i].Construct(rgID[i]);
sheet.AddPage(&pages[i]);
}
// Display a modal CPropertySheet dialog.
sheet.DoModal();
CPropertyPage::CPropertyPage
Формирует объект CPropertyPage
.
CPropertyPage();
explicit CPropertyPage(
UINT nIDTemplate,
UINT nIDCaption = 0,
DWORD dwSize = sizeof(PROPSHEETPAGE));
explicit CPropertyPage(
LPCTSTR lpszTemplateName,
UINT nIDCaption = 0,
DWORD dwSize = sizeof(PROPSHEETPAGE));
CPropertyPage(
UINT nIDTemplate,
UINT nIDCaption,
UINT nIDHeaderTitle,
UINT nIDHeaderSubTitle = 0,
DWORD dwSize = sizeof(PROPSHEETPAGE));
CPropertyPage(
LPCTSTR lpszTemplateName,
UINT nIDCaption,
UINT nIDHeaderTitle,
UINT nIDHeaderSubTitle = 0,
DWORD dwSize = sizeof(PROPSHEETPAGE));
Параметры
nIDTemplate
Идентификатор шаблона, используемого для этой страницы.
nIDCaption
Идентификатор имени, который будет помещен на вкладку для этой страницы. Если значение 0, имя будет взято из шаблона диалогового окна для этой страницы.
dwSize
lpszTemplateName
Указывает на строку, содержащую имя шаблона для этой страницы. Не может быть NULL
.
nIDHeaderTitle
Идентификатор имени, которое нужно поместить в заголовок заголовка страницы свойства.
nIDHeaderSubTitle
Идентификатор имени, которое нужно поместить в подзаголовок заголовка страницы свойства.
Замечания
Объект отображается после выполнения всех следующих условий:
Страница добавлена на лист свойств с помощью
CPropertySheet::AddPage
.Пользователь выбрал (на вкладке) эту страницу.
Если у вас несколько параметров (например, если вы используете массив), используйте CPropertySheet::Construct
вместо CPropertyPage
него.
Пример
// Declare a CStylePage object, which is a CPropertyPage-derived class.
CStylePage stylePage;
// Declare a CPropertyPage object with IDD_SHAPE, the ID of the
// template used for this page.
CPropertyPage shapePage(IDD_SHAPE);
CPropertyPage::GetPSP
Извлекает структуру Windows PROPSHEETPAGE
, связанную CPropertyPage
с объектом.
const PROPSHEETPAGE& GetPSP() const;
PROPSHEETPAGE& GetPSP();
Возвращаемое значение
Ссылка на структуру PROPSHEETPAGE
.
CPropertyPage::m_psp
m_psp
— это структура, члены которой хранят характеристики PROPSHEETPAGE
.
PROPSHEETPAGE m_psp;
Замечания
Используйте эту структуру для инициализации внешнего вида страницы свойств после его создания.
Дополнительные сведения об этой структуре, включая список его членов, см PROPSHEETPAGE
. в пакете SDK для Windows.
Пример
CPropertySheet sheet(_T("Simple PropertySheet"));
// Change the settings of the three pages to enable property sheet's
// Help button when the page is active. CStylePage, CShapePage, and
// CColorPage are CPropertyPage-derived classes.
CStylePage pageStyle;
pageStyle.m_psp.dwFlags |= PSP_HASHELP;
CColorPage pageColor;
pageColor.m_psp.dwFlags |= PSP_HASHELP;
CShapePage pageShape;
pageShape.m_psp.dwFlags |= PSP_HASHELP;
sheet.AddPage(&pageStyle);
sheet.AddPage(&pageColor);
sheet.AddPage(&pageShape);
sheet.SetWizardMode();
sheet.DoModal();
CPropertyPage::OnApply
Эта функция-член вызывается платформой, когда пользователь нажимает кнопку "ОК " или "Применить сейчас ".
virtual BOOL OnApply();
Возвращаемое значение
Ненулевое значение, если изменения принимаются; в противном случае — 0.
Замечания
Когда платформа вызывает эту функцию, изменения, внесенные на все страницы свойств в листе свойств, принимаются, лист свойств сохраняет фокус и OnApply
возвращает TRUE
(значение 1). Перед OnApply
вызовом платформы необходимо вызвать SetModified
и задать для него значение TRUE
. Эта кнопка активирует кнопку "Применить сейчас ", как только пользователь вносит изменения на страницу свойств.
Переопределите эту функцию-член, чтобы указать, какое действие выполняет программа, когда пользователь нажимает кнопку "Применить сейчас ". При переопределении функция должна вернуться TRUE
к принятию изменений и FALSE
предотвратить принятие изменений.
Реализация вызовов OnApply
OnOK
по умолчанию.
Дополнительные сведения о сообщениях уведомлений, отправленных при нажатии кнопки "Применить сейчас " или "ОК " на листе свойств, см PSN_APPLY
. в пакете SDK для Windows.
Пример
См. пример CPropertyPage::OnOK.
CPropertyPage::OnCancel
Эта функция-член вызывается платформой при выборе кнопки "Отмена ".
virtual void OnCancel();
Замечания
Переопределите эту функцию-член, чтобы выполнить действия кнопки "Отмена ". Значение по умолчанию отрицает все внесенные изменения.
Пример
// Discard any selection the user made to this page. The object
// in the view will be painted with the initial color when the
// CPropertySheet dialog is first shown. CColorPage is a
// CPropertyPage-derived class.
void CColorPage::OnCancel()
{
// Reset the color saved in the document class. m_InitialColor
// is a member variable of CColorPage and it is the color shown
// in the view before CPropertySheet is shown.
// doc->m_Color is the color saved in the document class, and
// this is the color to be used by the view class.
CMDIFrameWnd* pFrame = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pChild = pFrame->MDIGetActive();
CPSheetDoc* doc = (CPSheetDoc*)pChild->GetActiveDocument();
doc->m_Color = m_InitialColor;
// Tell the view to paint with the initial color.
CView* view = pChild->GetActiveView();
view->Invalidate();
CPropertyPage::OnCancel();
}
// The default MFC implementation of OnReset() would call OnCancel().
void CColorPage::OnReset()
{
CPropertyPage::OnReset();
}
CPropertyPage::OnKillActive
Эта функция-член вызывается платформой, когда страница больше не является активной страницей.
virtual BOOL OnKillActive();
Возвращаемое значение
Ненулевое значение, если данные были успешно обновлены, в противном случае — значение 0.
Замечания
Переопределите эту функцию-член для выполнения специальных задач проверки данных.
Реализация этой функции-члена по умолчанию копирует параметры из элементов управления на странице свойств в переменные-члены страницы свойств. Если данные не были обновлены из-за ошибки проверки данных диалогового окна (DDV), страница сохраняет фокус.
После успешного возвращения этой функции-члена платформа вызовет функцию страницы OnOK
.
Пример
// Validate the value entered to the "Number" edit control. Its
// value must be at least one. If not, tell the user and set the
// focus to the "Number" edit control. CStylePage is a
// CPropertyPage-derived class.
BOOL CStylePage::OnKillActive()
{
int num = GetDlgItemInt(IDC_NUMOBJECTS);
if (num <= 0)
{
AfxMessageBox(_T("Number of objects must be at least 1."));
CEdit* edit = (CEdit*) GetDlgItem(IDC_NUMOBJECTS);
edit->SetFocus();
edit->SetSel(0, -1);
return 0;
}
return CPropertyPage::OnKillActive();
}
CPropertyPage::OnOK
Эта функция-член вызывается платформой, когда пользователь нажимает кнопку "ОК " или "Применить сейчас " сразу после вызова платформы OnKillActive
.
virtual void OnOK();
Замечания
Когда пользователь нажимает кнопку "ОК " или "Применить сейчас ", платформа получает PSN_APPLY
уведомление на странице свойств. OnOK
Вызов не будет выполнен, если вы вызываетеCPropertySheet::PressButton
, так как страница свойств не отправляет уведомление в этом случае.
Переопределите эту функцию-член, чтобы реализовать дополнительное поведение, определенное для текущей активной страницы, когда пользователь закрывает весь лист свойств.
Реализация этой функции-члена по умолчанию помечает страницу как чистую, чтобы отразить, что данные были обновлены в OnKillActive
функции.
Пример
// Accept the new color selection and dismiss the CPropertySheet
// dialog. The view's object will be painted with the new selected
// color. CColorPage is a CPropertyPage-derived class.
void CColorPage::OnOK()
{
// Store the new selected color to a member variable of
// document class. m_Color is a member varible of CColorPage
// and it stores the new selected color. doc->m_Color is
// the color saved in the document class and it is the color
// used by the view class.
CMDIFrameWnd* pframe = (CMDIFrameWnd*) AfxGetMainWnd();
CMDIChildWnd* pchild = pframe->MDIGetActive();
CPSheetDoc* doc = (CPSheetDoc*) pchild->GetActiveDocument();
doc->m_Color = m_Color;
// Tell the view to paint with the new selected color.
CView* view = pchild->GetActiveView();
view->Invalidate();
CPropertyPage::OnOK();
}
// The default MFC implementation of OnApply() would call OnOK().
BOOL CColorPage::OnApply()
{
return CPropertyPage::OnApply();
}
CPropertyPage::OnQueryCancel
Эта функция-член вызывается платформой, когда пользователь нажимает кнопку "Отмена " и перед выполнением действия отмены.
virtual BOOL OnQueryCancel();
Возвращаемое значение
Возвращается FALSE
, чтобы предотвратить операцию отмены или TRUE
разрешить ее.
Замечания
Переопределите эту функцию-член, чтобы указать действие, которое программа принимает, когда пользователь нажимает кнопку "Отмена ".
Реализация возвращаемых значений OnQueryCancel
TRUE
по умолчанию.
Пример
// Query the user whether to abort the changes if the new selected
// color (m_Color) is different from the initial color
// (m_InitialColor) when the CPropertySheet dialog is first shown.
// CColorPage is a CPropertyPage-derived class.
BOOL CColorPage::OnQueryCancel()
{
if (m_InitialColor != m_Color)
{
if (AfxMessageBox(_T("Abort the changes?"), MB_YESNO) == IDNO)
return FALSE;
}
return CPropertyPage::OnQueryCancel();
}
CPropertyPage::OnReset
Эта функция-член вызывается платформой, когда пользователь нажимает кнопку "Отмена ".
virtual void OnReset();
Замечания
Когда платформа вызывает эту функцию, изменения всех страниц свойств, внесенных пользователем ранее при нажатии кнопки Apply Now , удаляются, а лист свойств сохраняет фокус.
Переопределите эту функцию-член, чтобы указать, какое действие выполняет программа, когда пользователь нажимает кнопку "Отмена ".
Реализация по умолчанию OnReset
ничего не делает.
Пример
См. пример CPropertyPage::OnCancel.
CPropertyPage::OnSetActive
Эта функция-член вызывается платформой, когда страница выбирается пользователем и становится активной страницей.
virtual BOOL OnSetActive();
Возвращаемое значение
Ненулевое значение, если страница была успешно настроена; в противном случае — 0.
Замечания
Переопределите эту функцию-член для выполнения задач при активации страницы. Переопределение этой функции-члена обычно вызывает версию по умолчанию после обновления элементов данных, чтобы разрешить ей обновлять элементы управления страницы новыми данными.
Реализация по умолчанию создает окно для страницы, если оно не создано ранее, и делает его активной страницей.
Пример
См. пример для CPropertySheet::SetFinishText.
CPropertyPage::OnWizardBack
Эта функция-член вызывается платформой, когда пользователь нажимает кнопку "Назад " в мастере.
virtual LRESULT OnWizardBack();
Возвращаемое значение
0, чтобы автоматически перейти на следующую страницу; -1, чтобы предотвратить изменение страницы. Чтобы перейти к странице, отличной от следующей, верните идентификатор диалогового окна, который будет отображаться.
Замечания
Переопределите эту функцию-член, чтобы указать некоторые действия, которые пользователь должен предпринять при нажатии кнопки "Назад ".
Дополнительные сведения о создании листа свойств типа мастера см. в разделе CPropertySheet::SetWizardMode
.
Пример
// The Back button is selected from the propertysheet. Get the selected
// radio button of the page by looping through all buttons on the
// pages. m_radioColor is a member variable of
// CColorPage (a CPropertyPage-derived class). Its initial value
// is initialized in OnInitDialog().
LRESULT CColorPage::OnWizardBack()
{
for (int id = IDC_RADIOBLACK; id <= IDC_RADIOGREEN; id++)
{
CButton* button = (CButton*)GetDlgItem(id);
if (button->GetCheck() == 1)
{
m_radioColor = id - IDC_RADIOBLACK;
break;
}
}
return CPropertyPage::OnWizardBack();
}
CPropertyPage::OnWizardFinish
Эта функция-член вызывается платформой, когда пользователь нажимает кнопку "Готово " в мастере.
virtual BOOL OnWizardFinish();
Возвращаемое значение
Ненулевое значение, если лист свойств уничтожается после завершения работы мастера; в противном случае ноль.
Замечания
Когда пользователь нажимает кнопку "Готово" в мастере, платформа вызывает эту функцию; когда OnWizardFinish
возвращается TRUE
(ненулевое значение), лист свойств может быть уничтожен (но на самом деле не уничтожен). Вызов DestroyWindow
для уничтожения листа свойств. Не вызывайте DestroyWindow
из OnWizardFinish
него. Это приведет к повреждению кучи или другим ошибкам.
Вы можете переопределить эту функцию-член, чтобы указать некоторые действия, которые пользователь должен предпринять при нажатии кнопки "Готово ". При переопределении этой функции вернитесь FALSE
, чтобы предотвратить уничтожение листа свойств.
Дополнительные сведения об уведомлениях, отправленных при нажатии кнопки "Готово " на листе свойств мастера, см PSN_WIZFINISH
. в пакете SDK для Windows.
Дополнительные сведения о создании листа свойств типа мастера см. в разделе CPropertySheet::SetWizardMode
.
Пример
// Inform users regarding the selections they have made by
// navigating the pages in propertysheet.
BOOL CShapePage::OnWizardFinish()
{
CString report = _T("You have selected the following options:\n");
// Get the number of property pages from CPropertySheet.
CPropertySheet* sheet = (CPropertySheet*)GetParent();
int count = sheet->GetPageCount();
// Get the formatted string from each page. This formatted string
// will be shown in a message box. Each page knows about the
// string to be displayed. For simplicity, we derive a class
// from CPropertyPage called CMyPropertyPage. CMyPropertyPage
// has a pure virtual member function called GetPageSelections().
// All pages in the property sheet must be derived from
// CMyPropertyPage so we loop through each page to get the
// formatted string by calling the GetPageSelections() function.
for (int i = 0; i < count; i++)
{
CMyPropertyPage* page = (CMyPropertyPage*)sheet->GetPage(i);
CString str;
page->GetPageSelections(str);
report += _T("\n") + str;
}
AfxMessageBox(report);
return CPropertyPage::OnWizardFinish();
}
// An example of implementing the GetPageSelections() for CStylePage.
// CStylePage is a CMyPropertyPage-derived class, which in turn is a
// CPropertyPage-derived class.
void CStylePage::GetPageSelections(CString& str)
{
str.Format(_T("Number of objects to be created = %d"), m_NumObjects);
}
// An example of implementing the GetPageSelections() for CColorPage.
// CColorPage is a CMyPropertyPage-derived class, which in turn is a
// CPropertyPage-derived class.
void CColorPage::GetPageSelections(CString& str)
{
str = _T("Color selected is ");
switch (m_Color)
{
case RGB(0, 0, 0):
str += _T("Black");
break;
case RGB(255, 0, 0):
str += _T("Red");
break;
case RGB(0, 255, 0):
str += _T("Green");
break;
case RGB(0, 0, 255):
str += _T("Blue");
break;
default:
str += _T("Custom");
break;
}
}
// An example of implementing the GetPageSelections() for CShapePage.
// CShapePage is a CMyPropertyPage-derived class, which in turn is a
// CPropertyPage-derived class.
void CShapePage::GetPageSelections(CString& str)
{
CString shapename;
switch (m_Selection)
{
case IDC_RECTANGLE:
shapename = _T("Rectangle");
break;
case IDC_ROUND_RECTANGLE:
shapename = _T("Round Rectangle");
break;
case IDC_ELLIPSE:
shapename = _T("Ellipse");
break;
}
str.Format(_T("Shape to be created is %s"), shapename);
}
CPropertyPage::OnWizardNext
Эта функция-член вызывается платформой, когда пользователь нажимает кнопку "Далее " в мастере.
virtual LRESULT OnWizardNext();
Возвращаемое значение
0, чтобы автоматически перейти на следующую страницу; -1, чтобы предотвратить изменение страницы. Чтобы перейти к странице, отличной от следующей, верните идентификатор диалогового окна, который будет отображаться.
Замечания
Переопределите эту функцию-член, чтобы указать некоторые действия, которые пользователь должен предпринять при нажатии кнопки "Далее ".
Дополнительные сведения о создании листа свойств типа мастера см. в разделе CPropertySheet::SetWizardMode
.
Пример
// The Next button is selected from the propertysheet. Show the
// second page of the propertysheet ONLY if a non-zero value is
// entered to the Number edit control of the CStylePage. Otherwise
// display a message to the user and stay on the current page.
LRESULT CStylePage::OnWizardNext()
{
// Get the number from the edit control
int num = GetDlgItemInt(IDC_NUMOBJECTS);
if (num == 0)
{
// Display a message to the user
AfxMessageBox(_T("Supply a non-zero number on the edit control"), MB_OK);
// Stay on the current page
return -1;
}
// CPropertyPage::OnWizardNext returns zero and causes
// the property sheet to display the next page
return CPropertyPage::OnWizardNext();
}
CPropertyPage::QuerySiblings
Вызовите эту функцию-член, чтобы перенаправить сообщение на каждую страницу в листе свойств.
LRESULT QuerySiblings(
WPARAM wParam,
LPARAM lParam);
Параметры
wParam
Указывает дополнительные сведения, зависящие от сообщений.
lParam
Указывает дополнительные сведения, зависящие от сообщений
Возвращаемое значение
Ненулевое значение со страницы на листе свойств или 0, если все страницы возвращают значение 0.
Замечания
Если страница возвращает ненулевое значение, лист свойств не отправляет сообщение на последующие страницы.
Пример
// Validate the value entered in the Number edit control. If its
// value is not a natural number, request CPropertySheet (i.e. parent
// window of the page) to send a PSM_QUERYSIBLINGS message to each
// LOADED page (a page won't be loaded in memory until it is shown).
// If one of the pages returns a nonzero value in response to the
// PSM_QUERYSIBLINGS message, then inform the user and change the OK
// to Close and disable the Cancel button. CStylePage is a
// CPropertyPage-derived class.
BOOL CStylePage::OnApply()
{
int num = GetDlgItemInt(IDC_NUMOBJECTS);
if (num <= 0)
{
if (QuerySiblings(num, 0L))
{
AfxMessageBox(_T("Invalid data is entered. Choose Close ")
_T("button to close the dialog."));
CancelToClose();
}
}
return CPropertyPage::OnApply();
}
// This is an example of trapping the PSM_QUERYSIBLINGS in one of
// the pages. CColorPage is a CPropertyPage-derived class. Upon
// receiving this message, wParam contains the value passed to
// QuerySiblings() call. CColorPage will check this value and return
// FALSE only if the value is greater than 1.
ON_MESSAGE(PSM_QUERYSIBLINGS, &CColorPage::OnQuerySiblings)
LRESULT CColorPage::OnQuerySiblings(WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
return (wParam <= 0);
}
CPropertyPage::SetModified
Вызовите эту функцию-член, чтобы включить или отключить кнопку "Применить сейчас ", исходя из того, следует ли применять параметры на странице свойств к соответствующему внешнему объекту.
void SetModified(BOOL bChanged = TRUE);
Параметры
bChanged
TRUE
Значение , указывающее, что параметры страницы свойств были изменены с момента последнего применения; FALSE
Значение , указывающее, что параметры страницы свойств применены или должны игнорироваться.
Замечания
Платформа отслеживает, какие страницы "грязные", то есть страницы свойств, для которых вы назвали SetModified( TRUE )
. Кнопка "Применить сейчас " всегда будет включена при вызове SetModified( TRUE )
одной из страниц. Кнопка "Применить сейчас " будет отключена при вызове SetModified( FALSE )
одной из страниц, но только если ни одна из других страниц не является "грязной".
Пример
// OnColorClicked() is a member function of CColorPage (a
// CPropertyPage-derived class). It is called whenever a radio button
// is selected on the page. Call SetModified() to enable the Apply
// button whenever a new selection is made. m_Color is a member
// variable of CColorPage and it is to store the selected RGB color.
// Its entry in the message map looks like this:
// ON_CONTROL_RANGE(BN_CLICKED, IDC_BLACK, IDC_GREEN, CColorPage::OnColorClicked)
void CColorPage::OnColorClicked(UINT nCmdID)
{
COLORREF color = m_Color;
switch (nCmdID)
{
case IDC_RADIOBLACK:
color = RGB(0, 0, 0);
m_radioColor = crBlack;
break;
case IDC_RADIORED:
color = RGB(255, 0, 0);
m_radioColor = crRed;
break;
case IDC_RADIOGREEN:
color = RGB(0, 255, 0);
m_radioColor = crGreen;
break;
case IDC_RADIOBLUE:
color = RGB(0, 0, 255);
m_radioColor = crBlue;
break;
}
if (color != m_Color)
{
m_Color = color;
SetModified(); // Enable Apply Now button.
}
UpdateData(FALSE);
}
См. также
Пример MFC CMNCTRL1
Пример MFC CMNCTRL2
Пример MFC PROPDLG
Пример MFC SNAPVW
CDialog
Класс
Диаграмма иерархии
CPropertySheet
Класс