Compartir a través de


Clase CPropertyPage

Representa páginas individuales de una hoja de propiedades, también conocidas como cuadro de diálogo de pestaña.

Sintaxis

class CPropertyPage : public CDialog

Miembros

Constructores públicos

Nombre Descripción
CPropertyPage::CPropertyPage Construye un objeto CPropertyPage.

Métodos públicos

Nombre Descripción
CPropertyPage::CancelToClose Cambia el botón Aceptar para leer Cerrar y deshabilita el botón Cancelar después de un cambio irrecuperable en la página de una hoja de propiedades modal.
CPropertyPage::Construct Construye un objeto CPropertyPage. Use Construct si desea especificar los parámetros en tiempo de ejecución o si está usando matrices.
CPropertyPage::GetPSP Recupera la estructura de Windows PROPSHEETPAGE asociada al objeto CPropertyPage.
CPropertyPage::OnApply Lo llama el marco cuando se hace clic en el botón Aplicar ahora.
CPropertyPage::OnCancel Lo llama el marco cuando se hace clic en el botón Aplicar ahora.
CPropertyPage::OnKillActive Lo llama el marco cuando la página actual deja de estar activa. Realice la validación de datos aquí.
CPropertyPage::OnOK Lo llama el marco cuando se hace clic en el botón Aceptar, Aplicar ahora o Cerrar.
CPropertyPage::OnQueryCancel Lo llama el marco cuando se hace clic en el botón Cancelar y antes de que se haya realizado la cancelación.
CPropertyPage::OnReset Lo llama el marco cuando se hace clic en el botón Aplicar ahora.
CPropertyPage::OnSetActive Lo llama el marco cuando la página se convierte en la página activa.
CPropertyPage::OnWizardBack Lo llama el marco cuando se hace clic en el botón Atrás al usar una hoja de propiedades de tipo asistente.
CPropertyPage::OnWizardFinish Lo llama el marco cuando se hace clic en el botón Finalizar al usar una hoja de propiedades de tipo asistente.
CPropertyPage::OnWizardNext Lo llama el marco cuando se hace clic en el botón Siguiente al usar una hoja de propiedades de tipo asistente.
CPropertyPage::QuerySiblings Reenvía el mensaje a cada página de la hoja de propiedades.
CPropertyPage::SetModified Se llama para activar o desactivar el botón Aplicar ahora.

Miembros de datos públicos

Nombre Descripción
CPropertyPage::m_psp La estructura de Windows PROPSHEETPAGE. Proporciona acceso a los parámetros básicos de la hoja de propiedades.

Comentarios

Al igual que con los cuadros de diálogo estándar, usted deriva una clase de CPropertyPage por cada página de su hoja de propiedades. Para usar objetos derivados de CPropertyPage, cree primero un objeto CPropertySheet y, a continuación, cree un objeto para cada página que vaya en la hoja de propiedades. Llame a CPropertySheet::AddPage para cada página de la hoja y, a continuación, muestre la hoja de propiedades llamando a CPropertySheet::DoModal para una hoja de propiedades modal o CPropertySheet::Create para una hoja de propiedades no modal.

Puede crear un tipo de cuadro de diálogo de tabulación denominado asistente, que consta de una hoja de propiedades con una secuencia de páginas de propiedades que guían al usuario a través de los pasos de una operación, como configurar un dispositivo o crear un boletín. En un cuadro de diálogo de pestaña de tipo asistente, las páginas de propiedades no tienen pestañas y solo una página de propiedades está visible a la vez. Además, en lugar de tener botones Aceptar y Aplicar ahora, un cuadro de diálogo de pestaña de tipo asistente tiene un botón Atrás, un botón Siguiente o Finalizar, y un botón Cancelar.

Para obtener más información sobre cómo establecer una hoja de propiedades como asistente, consulte CPropertySheet::SetWizardMode. Para obtener más información sobre cómo usar objetos CPropertyPage, consulte el artículo Hojas de propiedades y páginas de propiedades.

Jerarquía de herencia

CObject

CCmdTarget

CWnd

CDialog

CPropertyPage

Requisitos

Encabezadoafxdlgs.h:

CPropertyPage::CancelToClose

A esta función se le llama cuando se ha realizado un cambio irrecuperable en los datos de una página de una hoja de propiedades modal.

void CancelToClose();

Comentarios

Esta función cambiará el botón Aceptar a Cerrar y deshabilitará el botón Cancelar. Este cambio alerta al usuario de que un cambio es permanente y no se pueden cancelar las modificaciones.

La función miembro CancelToClose no hace nada en una hoja de propiedades no modal, porque esa hoja no tiene un botón Cancelar de forma predeterminada.

Ejemplo

Vea el ejemplo de CPropertyPage::QuerySiblings.

CPropertyPage::Construct

Llame a esta función miembro para construir un objeto 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);

Parámetros

nIDTemplate
Id. de la plantilla usada para esta página.

nIDCaption
Id. del nombre que se colocará en la pestaña de esta página. Si es 0, el nombre se tomará de la plantilla de diálogo de esta página.

lpszTemplateName
Contiene una cadena terminada en null que es el nombre de un recurso de plantilla.

nIDHeaderTitle
Id. del nombre que se colocará en la ubicación del título del encabezado de la página de propiedades. De manera predeterminada, 0.

nIDHeaderSubTitle
Id. del nombre que se colocará en la ubicación del subtítulo del encabezado de la página de propiedades. De manera predeterminada, 0.

Comentarios

El objeto se muestra después de cumplir todas las condiciones siguientes:

  • La página se ha agregado a una hoja de propiedades mediante CPropertySheet::AddPage.

  • Se ha llamado a la función DoModal o Create de la hoja de propiedades.

  • El usuario ha seleccionado (con pestañas) esta página.

Llame a Construct si no se ha llamado a uno de los otros constructores de clase. La función miembro Construct es flexible porque puede dejar en blanco la instrucción de parámetro y, a continuación, especificar varios parámetros y una construcción en cualquier punto de su código.

Debe usar Construct cuando trabaje con matrices y debe llamar a Construct en cada miembro de la matriz para que los miembros de datos tengan asignados los valores adecuados.

Ejemplo

// 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

Construye un objeto 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));

Parámetros

nIDTemplate
Id. de la plantilla usada para esta página.

nIDCaption
Id. del nombre que se colocará en la pestaña de esta página. Si es 0, el nombre se tomará de la plantilla de diálogo de esta página.

dwSize
lpszTemplateName Apunta a una cadena que contiene el nombre de la plantilla de esta página. No puede ser NULL.

nIDHeaderTitle
Id. del nombre que se colocará en la ubicación del título del encabezado de la página de propiedades.

nIDHeaderSubTitle
Id. del nombre que se colocará en la ubicación del subtítulo del encabezado de la página de propiedades.

Comentarios

El objeto se muestra después de cumplir todas las condiciones siguientes:

  • La página se ha agregado a una hoja de propiedades mediante CPropertySheet::AddPage.

  • Se ha llamado a la función DoModal o Create de la hoja de propiedades.

  • El usuario ha seleccionado (con pestañas) esta página.

Si tiene varios parámetros (por ejemplo, si usa una matriz), use CPropertySheet::Construct en lugar de CPropertyPage.

Ejemplo

// 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

Recupera la estructura de Windows PROPSHEETPAGE asociada al objeto CPropertyPage.

const PROPSHEETPAGE& GetPSP() const;

PROPSHEETPAGE& GetPSP();

Valor devuelto

Una referencia a la estructura PROPSHEETPAGE.

CPropertyPage::m_psp

m_psp es una estructura cuyos miembros almacenan las características de PROPSHEETPAGE.

PROPSHEETPAGE m_psp;

Comentarios

Utilice esta estructura para inicializar la apariencia de una página de propiedades después de construirla.

Para obtener más información sobre esta estructura, incluida una lista de sus miembros, vea PROPSHEETPAGE en Windows SDK.

Ejemplo

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

El marco llama a esta función miembro cuando el usuario elige el botón Aceptar o Aplicar ahora.

virtual BOOL OnApply();

Valor devuelto

Distinto de cero si se aceptan los cambios; de lo contrario, 0.

Comentarios

Cuando el marco llama a esta función, se aceptan los cambios realizados en todas las páginas de propiedades de la hoja de propiedades, la hoja de propiedades conserva el enfoque y OnApply devuelve TRUE (el valor 1). Antes de que el marco pueda llamar a OnApply, debe haber llamado a SetModified y establecer su parámetro en TRUE. Esto activará el botón Aplicar ahora en cuanto el usuario realice cualquier cambio en la página de propiedades.

Invalide esta función miembro para especificar la acción que realiza el programa cuando el usuario selecciona el botón Aplicar ahora. Al realizar la invalidación, la función debe devolver TRUE para aceptar los cambios y FALSE para evitar que los cambios surtan efecto.

La implementación predeterminada de OnApply llama a OnOK.

Para obtener más información sobre los mensajes de notificación enviados cuando el usuario presiona el botón Aplicar ahora o Aceptar en una hoja de propiedades, consulte PSN_APPLY en Windows SDK.

Ejemplo

Consulte el ejemplo de CPropertyPage::OnOK.

CPropertyPage::OnCancel

El marco llama a esta función miembro cuando se selecciona el botón Cancelar.

virtual void OnCancel();

Comentarios

Invalide esta función miembro para realizar acciones del botón Cancelar. El valor predeterminado niega cualquier cambio realizado.

Ejemplo

// 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

El marco llama a esta función miembro cuando la página ya no es la página activa.

virtual BOOL OnKillActive();

Valor devuelto

Distinto de cero si los datos se actualizaron correctamente; de lo contrario, 0.

Comentarios

Invalide esta función miembro para realizar tareas especiales de validación de datos.

La implementación predeterminada de esta función miembro copia la configuración de los controles en la página de propiedades a las variables miembro de la página de propiedades. Si los datos no se actualizaron correctamente debido a un error de validación de datos de diálogo (DDV), la página conserva el enfoque.

Una vez que esta función miembro devuelva un valor correctamente, el marco llamará a la función de OnOK la página.

Ejemplo

// 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

El marco llama a esta función miembro cuando el usuario elige el botón Aceptar o Aplicar ahora, inmediatamente después de que el marco llama a OnKillActive.

virtual void OnOK();

Comentarios

Cuando el usuario elige el botón Aceptar o Aplicar ahora, el marco recibe la notificación PSN_APPLY de la página de propiedades. La llamada a OnOK no se realizará si llama a CPropertySheet::PressButton porque la página de propiedades no envía la notificación en ese caso.

Invalide esta función miembro para implementar un comportamiento adicional específico en la página activa actualmente cuando el usuario descarta toda la hoja de propiedades.

La implementación predeterminada de esta función miembro marca la página como "limpia" para reflejar que los datos se actualizaron en la función OnKillActive.

Ejemplo

// 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

El marco llama a esta función miembro cuando el usuario selecciona el botón Cancelar y antes de que se haya realizado la acción de cancelación.

virtual BOOL OnQueryCancel();

Valor devuelto

Devuelve FALSE para evitar la operación de cancelación o TRUE para permitirla.

Comentarios

Invalide esta función miembro para especificar la acción que realiza el programa cuando el usuario selecciona el botón Cancelar.

La implementación predeterminada de OnQueryCancel devuelve TRUE.

Ejemplo

// 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

El marco llama a esta función miembro cuando el usuario elige el botón Cancelar.

virtual void OnReset();

Comentarios

Cuando el marco llama a esta función, se descartan los cambios realizados en todas las páginas de propiedades hechos por el usuario antes de elegir el botón Aplicar ahora y la hoja de propiedades conserva el enfoque.

Invalide esta función miembro para especificar la acción que realiza el programa cuando el usuario selecciona el botón Cancelar.

La implementación predeterminada de OnReset no hace nada.

Ejemplo

Consulte el ejemplo de CPropertyPage::OnCancel.

CPropertyPage::OnSetActive

El marco llama a esta función miembro cuando el usuario elige la página y esta se convierte en la página activa.

virtual BOOL OnSetActive();

Valor devuelto

Distinto de cero si la página se estableció correctamente como activa; de lo contrario, 0.

Comentarios

Invalide esta función miembro para realizar tareas cuando se activa una página. La invalidación de esta función miembro normalmente llamaría a la versión predeterminada después de actualizar los miembros de datos, para permitir que actualice los controles de la página con los nuevos datos.

La implementación predeterminada crea la ventana de la página, si no se creó anteriormente, y la convierte en la página activa.

Ejemplo

Consulte el ejemplo de CPropertySheet::SetFinishText.

CPropertyPage::OnWizardBack

El marco llama a esta función miembro cuando el usuario selecciona el botón Atrás en un asistente.

virtual LRESULT OnWizardBack();

Valor devuelto

0 para avanzar automáticamente a la página siguiente; -1 para evitar que la página cambie. Para ir a cualquier página, salvo a la siguiente, devuelva el identificador del diálogo que se mostrará.

Comentarios

Invalide esta función miembro para especificar la acción que el usuario debe realizar cuando se presione el botón Atrás.

Para obtener más información sobre cómo crear una hoja de propiedades de tipo asistente, consulte CPropertySheet::SetWizardMode.

Ejemplo

// 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

El marco llama a esta función miembro cuando el usuario selecciona el botón Finalizar en un asistente.

virtual BOOL OnWizardFinish();

Valor devuelto

Distinto de cero si la hoja de propiedades se destruye cuando finaliza el asistente; de lo contrario, cero.

Comentarios

Cuando un usuario selecciona el botón Finalizar en un asistente, el marco llama a esta función; cuando OnWizardFinish devuelve TRUE (un valor distinto de cero), la hoja de propiedades se puede destruir (pero no se destruye realmente). Para destruir la hoja de propiedades, llame a DestroyWindow. No llame a DestroyWindow desde OnWizardFinish; al hacerlo, se corromperá el montón o se producirán otros errores.

Invalide esta función miembro para especificar alguna acción que el usuario debe realizar cuando se presiona el botón Finalizar. Al invalidar esta función, devuelva FALSE para evitar que se destruya la hoja de propiedades.

Para obtener más información sobre los mensajes de notificación enviados cuando el usuario presiona el botón Finalizar en una hoja de propiedades de asistente, consulte PSN_WIZFINISH en Windows SDK.

Para obtener más información sobre cómo crear una hoja de propiedades de tipo asistente, consulte CPropertySheet::SetWizardMode.

Ejemplo

// 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

El marco llama a esta función miembro cuando el usuario selecciona el botón Siguiente en un asistente.

virtual LRESULT OnWizardNext();

Valor devuelto

0 para avanzar automáticamente a la página siguiente; -1 para evitar que la página cambie. Para ir a cualquier página, salvo a la siguiente, devuelva el identificador del diálogo que se mostrará.

Comentarios

Invalide esta función miembro para especificar alguna acción que el usuario debe realizar cuando se presiona el botón Siguiente.

Para obtener más información sobre cómo crear una hoja de propiedades de tipo asistente, consulte CPropertySheet::SetWizardMode.

Ejemplo

// 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

Llame a esta función miembro para reenviar un mensaje a cada página de la hoja de propiedades.

LRESULT QuerySiblings(
    WPARAM wParam,
    LPARAM lParam);

Parámetros

wParam
Proporciona información adicional dependiente del mensaje.

lParam
Proporciona información adicional dependiente del mensaje

Valor devuelto

El valor distinto de cero de una página en la hoja de propiedades, o 0 si todas las páginas devuelven un valor de 0.

Comentarios

Si una página devuelve un valor distinto de cero, la hoja de propiedades no envía el mensaje a las páginas posteriores.

Ejemplo

// 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

Llame a esta función miembro para habilitar o deshabilitar el botón Aplicar ahora, con base en si la configuración de la página de propiedades se debe aplicar al objeto externo adecuado.

void SetModified(BOOL bChanged = TRUE);

Parámetros

bChanged
TRUE para indicar que los valores de la página de propiedades se han modificado desde la última vez que se aplicaron; FALSE para indicar que los valores de la página de propiedades se han aplicado o se deben omitir.

Comentarios

El marco realiza un seguimiento de cuáles son las páginas "sucias", es decir, las páginas de propiedades para las que se ha llamado a SetModified( TRUE ). El botón Aplicar ahora siempre se habilitará si se llama a SetModified( TRUE ) para una de las páginas. El botón Aplicar ahora se deshabilitará cuando llame a SetModified( FALSE ) en una de las páginas, pero solo si ninguna de las otras páginas está "sucia".

Ejemplo

// 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);
}

Consulte también

Ejemplo de MFCCMNCTRL1
Ejemplo de MFCCMNCTRL2
Ejemplo de MFCPROPDLG
Ejemplo de MFCSNAPVW
CDialog (clase)
Gráfico de jerarquías
CPropertySheet (clase)