CPropertyPage

表示属性表的各个页,也称为选项卡对话框。

语法

class CPropertyPage : public CDialog

成员

公共构造函数

名称 描述
CPropertyPage::CPropertyPage 构造 CPropertyPage 对象。

公共方法

名称 描述
CPropertyPage::CancelToClose 在模式属性表的页面发生不可恢复的更改后,将“确定”按钮更改为“关闭”,并禁用“取消”按钮
CPropertyPage::Construct 构造 CPropertyPage 对象。 如果想在运行时指定参数,或者如果正在使用数组,请使用 Construct
CPropertyPage::GetPSP 检索与 CPropertyPage 对象关联的 Windows PROPSHEETPAGE 结构。
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 对象,请参阅属性表和属性页一文。

继承层次结构

CObject

CCmdTarget

CWnd

CDialog

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
此页面使用的模板的 ID。

nIDCaption
要放置在此页面选项卡中的名称的 ID。 如果为 0,名称将取自该页面的对话框模板。

lpszTemplateName
包含一个以 null 结尾的字符串,它是模板资源的名称。

nIDHeaderTitle
要放置在属性页标题的标题位置的名称的 ID。 默认值为 0。

nIDHeaderSubTitle
要放置在属性页标题的副标题位置的名称的 ID。 默认值为 0。

备注

满足以下所有条件后显示对象:

如果尚未调用其他类构造函数之一,则调用 ConstructConstruct 成员函数很灵活,因为可以将参数语句留空,然后在代码中的任何位置指定多个参数和构造。

使用数组时必须使用 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
此页面使用的模板的 ID。

nIDCaption
要放置在此页面选项卡中的名称的 ID。 如果为 0,名称将取自该页面的对话框模板。

dwSize
lpszTemplateName 指向包含此页面模板名称的字符串。 不能是 NULL

nIDHeaderTitle
要放置在属性页标题的标题位置的名称的 ID。

nIDHeaderSubTitle
要放置在属性页标题的副标题位置的名称的 ID。

备注

满足以下所有条件后显示对象:

如果有多个参数(例如,如果使用数组),请使用 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

检索与 CPropertyPage 对象关联的 Windows PROPSHEETPAGE 结构。

const PROPSHEETPAGE& GetPSP() const;

PROPSHEETPAGE& GetPSP();

返回值

PROPSHEETPAGE 结构的引用。

CPropertyPage::m_psp

m_psp 是一个结构,其成员存储 PROPSHEETPAGE 的特征。

PROPSHEETPAGE m_psp;

备注

使用此结构可在构造属性页后对其外观进行初始化。

有关此结构的详细信息(包括其成员列表),请参阅 Windows SDK 中的 PROPSHEETPAGE

示例

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

若要详细了解用户按下属性表中的“立即应用”或“确定”按钮时发送的通知消息,请参阅 Windows SDK 中的 PSN_APPLY

示例

请参阅 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 通知。 如果调用 CPropertySheet::PressButton,则不会调用 OnOK,因为在这种情况下属性页不会发送通知。

用户关闭整个属性表时,重写此成员函数可实现特定于当前活动页的其他行为。

此成员函数的默认实现将页面标记为“清理”以反映数据已在 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();

备注

当框架调用此函数时,用户先前选择“立即应用”按钮对所有属性页所做的更改都将被放弃,并且属性表将保持焦点

重写此成员函数可指定程序在用户选择“取消”按钮时执行的操作

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 可销毁属性表。 不要从 OnWizardFinish 调用 DestroyWindow;这样做会导致堆损坏或其他错误。

可以重写此成员函数,以指定用户在按下“完成”按钮时必须采取的一些操作。 重写此函数时,返回 FALSE 以防属性表被销毁。

若要详细了解用户按下向导属性表中的“完成”按钮时发送的通知消息,请参阅 Windows SDK 中的 PSN_WIZFINISH

若要详细了解如何制作向导类型属性表,请参阅 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