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
CPropertyPage
Requisitos
Encabezado: afxdlgs.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
oCreate
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
oCreate
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);
}
Vea también
Ejemplo de MFCCMNCTRL1
Ejemplo de MFCCMNCTRL2
Ejemplo de MFCPROPDLG
Ejemplo de MFCSNAPVW
CDialog
(clase)
Gráfico de jerarquías
CPropertySheet
(clase)