CPropertySheet
Class
Represents property sheets, also known as tab dialog boxes.
Syntax
class CPropertySheet : public CWnd
Members
Public Constructors
Name | Description |
---|---|
CPropertySheet::CPropertySheet |
Constructs a CPropertySheet object. |
Public Methods
Name | Description |
---|---|
CPropertySheet::AddPage |
Adds a page to the property sheet. |
CPropertySheet::Construct |
Constructs a CPropertySheet object. |
CPropertySheet::Create |
Displays a modeless property sheet. |
CPropertySheet::DoModal |
Displays a modal property sheet. |
CPropertySheet::EnableStackedTabs |
Indicates whether the property sheet uses stacked or scrolling tabs. |
CPropertySheet::EndDialog |
Terminates the property sheet. |
CPropertySheet::GetActiveIndex |
Retrieves the index of the active page of the property sheet. |
CPropertySheet::GetActivePage |
Returns the active page object. |
CPropertySheet::GetPage |
Retrieves a pointer to the specified page. |
CPropertySheet::GetPageCount |
Retrieves the number of pages in the property sheet. |
CPropertySheet::GetPageIndex |
Retrieves the index of the specified page of the property sheet. |
CPropertySheet::GetTabControl |
Retrieves a pointer to a tab control. |
CPropertySheet::MapDialogRect |
Converts the dialog-box units of a rectangle to screen units. |
CPropertySheet::OnInitDialog |
Override to augment property sheet initialization. |
CPropertySheet::PressButton |
Simulates the choice of the specified button in a property sheet. |
CPropertySheet::RemovePage |
Removes a page from the property sheet. |
CPropertySheet::SetActivePage |
Programmatically sets the active page object. |
CPropertySheet::SetFinishText |
Sets the text for the Finish button. |
CPropertySheet::SetTitle |
Sets the caption of the property sheet. |
CPropertySheet::SetWizardButtons |
Enables the wizard buttons. |
CPropertySheet::SetWizardMode |
Enables the wizard mode. |
Public Data Members
Name | Description |
---|---|
CPropertySheet::m_psh |
The Windows PROPSHEETHEADER structure. Provides access to basic property sheet parameters. |
Remarks
A property sheet consists of a CPropertySheet
object and one or more CPropertyPage
objects. The framework displays a property sheet as a window with a set of tab indices and an area that contains the currently selected page. The user navigates to a specific page by using the appropriate tab.
CPropertySheet
provides support for the expanded PROPSHEETHEADER
structure introduced in Windows 98 and Windows NT 2000. The structure contains additional flags and members that support using a "watermark" background bitmap.
To display these new images automatically in your property sheet object, pass valid values for the bitmap and palette images in the call to CPropertySheet::Construct
or CPropertySheet::CPropertySheet
.
Even though CPropertySheet
is not derived from CDialog
, managing a CPropertySheet
object is like managing a CDialog
object. For example, creation of a property sheet requires two-part construction: call the constructor, and then call DoModal
for a modal property sheet or Create
for a modeless property sheet. CPropertySheet
has two types of constructors: CPropertySheet::Construct
and CPropertySheet::CPropertySheet
.
When you construct a CPropertySheet
object, some Window Styles can cause a first-chance exception to occur. This results from the system trying to change the style of the property sheet before the sheet is created. To avoid this exception, make sure that you set the following styles when you create your CPropertySheet
:
DS_3DLOOK
DS_CONTROL
WS_CHILD
WS_TABSTOP
The following styles are optional, and will not cause the first-chance exception:
DS_SHELLFONT
DS_LOCALEDIT
WS_CLIPCHILDREN
Any other Window Styles
are forbidden and you should not enable them.
Exchanging data between a CPropertySheet
object and an external object is similar to exchanging data with a CDialog
object. The important difference is that the settings of a property sheet are typically member variables of the CPropertyPage
objects rather than of the CPropertySheet
object itself.
You can create a type of tab dialog box called a wizard, which consists of a property sheet with a sequence of property pages that guide the user through the steps of an operation, such as setting up a device or creating a newsletter. In a wizard-type tab dialog box, the property pages do not have tabs, and only one property page is visible at a time. Also, instead of having OK and Apply Now buttons, a wizard-type tab dialog box has a Back button, a Next or Finish button, a Cancel button, and a Help button.
To create a wizard-type dialog box, follow the same steps that you would follow to create a standard property sheet, but call SetWizardMode
before you call DoModal
. To enable the wizard buttons, call SetWizardButtons
, using flags to customize their function and appearance. To enable the Finish button, call SetFinishText
after the user has taken action on the last page of the wizard.
For more information about how to use CPropertySheet
objects, see the article Property Sheets and Property Pages.
Inheritance Hierarchy
CPropertySheet
Requirements
Header: afxdlgs.h
CPropertySheet::AddPage
Adds the supplied page with the rightmost tab in the property sheet.
void AddPage(CPropertyPage* pPage);
Parameters
pPage
Points to the page to be added to the property sheet. Cannot be NULL
.
Remarks
Add pages to the property sheet in the left-to-right order you want them to appear.
AddPage
adds the CPropertyPage
object to the CPropertySheet
object's list of pages but does not actually create the window for the page. The framework postpones creation of the window for the page until the user selects that page.
When you add a property page using AddPage
, the CPropertySheet
is the parent of the CPropertyPage
. To gain access to the property sheet from the property page, call CWnd::GetParent
.
It is not necessary to wait until creation of the property sheet window to call AddPage
. Typically, you will call AddPage
before calling DoModal
or Create
.
If you call AddPage
after displaying the property page, the tab row will reflect the newly added page.
Example
// Add three pages to a CPropertySheet object, then show the
// CPropertySheet object as a modal dialog. CStylePage, CShapePage,
// and CColorPage are CPropertyPage-derived classes created
// by the Add Class wizard.
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));
CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);
dlgPropertySheet.DoModal();
CPropertySheet::Construct
Constructs a CPropertySheet
object.
void Construct(
UINT nIDCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
void Construct(
LPCTSTR pszCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
void Construct(
UINT nIDCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
void Construct(
LPCTSTR pszCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
Parameters
nIDCaption
ID of the caption to be used for the property sheet.
pParentWnd
Pointer to the parent window of the property sheet. If NULL
, the parent window will be the main window of the application.
iSelectPage
The index of the page that will initially be on top. Default is the first page added to the sheet.
pszCaption
Pointer to a string containing the caption to be used for the property sheet. Cannot be NULL
.
hbmWatermark
Handle to the watermark bitmap of the property page.
hpalWatermark
Handle to the palette of the watermark bitmap and/or header bitmap.
hbmHeader
Handle to the header bitmap of the property page.
Remarks
Call this member function if one of the class constructors has not already been called. For example, call Construct
when you declare or allocate arrays of CPropertySheet
objects. In the case of arrays, you must call Construct
for each member in the array.
To display the property sheet, call DoModal
or Create
. The string contained in the first parameter will be placed in the caption bar for the property sheet.
You can display watermark and/or header images automatically if you use the third or fourth prototypes of Construct
, listed above, and you pass valid values for the hbmWatermark
, hpalWatermark
, and/or hbmHeader
parameters.
Example
The following example demonstrates under what circumstances you would call Construct
.
const int c_cSheets = 3;
CPropertySheet grpropsheet[c_cSheets];
// no need to call Construct for this next one
CPropertySheet someSheet(_T("Some sheet"));
LPTSTR rgszSheets[c_cSheets] = {
_T("Sheet 1"),
_T("Sheet 2"),
_T("Sheet 3")
};
for (int i = 0; i < c_cSheets; i++)
grpropsheet[i].Construct(rgszSheets[i]);
CPropertySheet::CPropertySheet
Constructs a CPropertySheet
object.
CPropertySheet();
explicit CPropertySheet(
UINT nIDCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
explicit CPropertySheet(
LPCTSTR pszCaption,
CWnd* pParentWnd = NULL,
UINT iSelectPage = 0);
CPropertySheet(
UINT nIDCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
CPropertySheet(
LPCTSTR pszCaption,
CWnd* pParentWnd,
UINT iSelectPage,
HBITMAP hbmWatermark,
HPALETTE hpalWatermark = NULL,
HBITMAP hbmHeader = NULL);
Parameters
nIDCaption
ID of the caption to be used for the property sheet.
pParentWnd
Points to the parent window of the property sheet. If NULL
, the parent window will be the main window of the application.
iSelectPage
The index of the page that will initially be on top. Default is the first page added to the sheet.
pszCaption
Points to a string containing the caption to be used for the property sheet. Cannot be NULL
.
hbmWatermark
A handle to the background bitmap of the property sheet.
hpalWatermark
A handle to the palette of the watermark bitmap and/or header bitmap.
hbmHeader
A handle to the header bitmap of the property page.
Remarks
To display the property sheet, call DoModal
or Create
. The string contained in the first parameter will be placed in the caption bar for the property sheet.
If you have multiple parameters (for example, if you are using an array), use Construct
instead of CPropertySheet
.
You can display watermark and/or header images automatically if you use the third or fourth prototypes of CPropertySheet
, above, and you pass valid values for the hbmWatermark
, hpalWatermark
, and/or hbmHeader
parameters.
Example
// Declare a CPropertySheet object titled "Simple PropertySheet".
CPropertySheet dlgPropertySheet1(_T("Simple PropertySheet"));
// Declare a CPropertySheet object whose title is specified in the
// IDS_PROPERTYSHEET_TITLE string resource, and the second page is
// initially on top.
CPropertySheet dlgPropertySheet2(IDS_PROPERTYSHEET_TITLE, this, 1);
CPropertySheet::Create
Displays a modeless property sheet.
virtual BOOL Create(CWnd* pParentWnd = NULL,
DWORD dwStyle = (DWORD)-1,
DWORD dwExStyle = 0);
Parameters
pParentWnd
Points to parent window. If NULL
, parent is the desktop.
dwStyle
Window styles for property sheet. For a complete list of available styles, see Window Styles.
dwExStyle
Extended window styles for property sheet. For a complete list of available styles, see Extended Window Styles
Return Value
Nonzero if the property sheet is created successfully; otherwise 0.
Remarks
The call to Create
can be inside the constructor, or you can call it after the constructor is invoked.
The default style, expressed by passing -1 as dwStyle
, is actually WS_SYSMENU|WS_POPUP|WS_CAPTION|DS_MODALFRAME|DS_CONTEXTHELP|WS_VISIBLE
. The default extended window style, expressed by passing 0 as dwExStyle
, is actually WS_EX_DLGMODALFRAME
.
The Create
member function returns immediately after creating the property sheet. To destroy the property sheet, call CWnd::DestroyWindow
.
Modeless property sheets displayed with a call to Create
do not have OK, Cancel, Apply Now, and Help buttons as modal property sheets do. Desired buttons must be created by the user.
To display a modal property sheet, call DoModal
instead.
Example
// This code fragment shows how to create a modeless property sheet
// dialog in a command message handler (OnModelessPropertySheet())
// of a CView-derived class.
void CPSheetView::OnModelessPropertySheet()
{
// Declare a CPropertySheet object. m_pdlgPropertySheet is a data
// member of type CPropertySheet in CView-derived class.
m_pdlgPropertySheet = new CPropertySheet(_T("Simple PropertySheet"));
ASSERT(m_pdlgPropertySheet);
// Add three pages to the CPropertySheet object. Both m_pstylePage,
// m_pcolorPage, and m_pshapePage are data members of type
// CPropertyPage-derived classes in CView-derived class.
m_pstylePage = new CStylePage;
m_pcolorPage = new CColorPage;
m_pshapePage = new CShapePage;
m_pdlgPropertySheet->AddPage(m_pstylePage);
m_pdlgPropertySheet->AddPage(m_pcolorPage);
m_pdlgPropertySheet->AddPage(m_pshapePage);
// Create a modeless CPropertySheet dialog.
m_pdlgPropertySheet->Create();
}
// The code fragment below shows how to destroy the C++ objects for
// propertysheet and propertypage in the destructor of CView-derived
// class.
// NOTE: DestroyWindow() is called in CPropertySheet::OnClose() so
// you do not need to call it here. Property pages are children
// of the CPropertySheet, they will be destroyed by their parents.
CPSheetView::~CPSheetView()
{
delete m_pshapePage;
delete m_pstylePage;
delete m_pcolorPage;
delete m_pdlgPropertySheet;
}
CPropertySheet::DoModal
Displays a modal property sheet.
virtual INT_PTR DoModal();
Return Value
IDOK
or IDCANCEL
if the function was successful; otherwise 0 or -1. If the property sheet has been established as a wizard (see SetWizardMode
), DoModal
returns either ID_WIZFINISH
or IDCANCEL
.
Remarks
The return value corresponds to the ID of the control that closed the property sheet. After this function returns, the windows corresponding to the property sheet and all the pages will have been destroyed. The objects themselves will still exist. Typically, you will retrieve data from the CPropertyPage
objects after DoModal
returns IDOK.
To display a modeless property sheet, call Create
instead.
When a property page is created from its corresponding dialog resource, it can cause a first-chance exception. This results from the property page changing the style of the dialog resource to the required style before the page is created. Because resources are generally read-only, this causes an exception. The system handles the exception, and makes a copy of the modified resource. The first-chance exception can therefore be ignored.
Note
This exception must be handled by the operating system if you are compiling with the asynchronous exception handling model. For more information about exception handling models, see /EH
(Exception Handling Model). In this case, do not wrap calls to CPropertySheet::DoModal
with a C++ try-catch block in which the catch handles all exceptions, for example, catch (...)
. This block would handle the exception intended for the operating system, and cause unpredictable behavior. However, you can safely use C++ exception handling with specific exception types or structured exception handling where the Access Violation exception is passed through to the operating system.
To avoid generating this first-chance exception, you can manually guarantee that the property sheet has the correct Window Styles. You need to set the following styles for a property sheet:
DS_3DLOOK
DS_CONTROL
WS_CHILD
WS_TABSTOP
You can use the following optional styles without causing a first-chance exception:
DS_SHELLFONT
DS_LOCALEDIT
WS_CLIPCHILDREN
Disable all other Windows styles because they are not compatible with property sheets. This advice does not apply to extended styles. Setting these standard styles appropriately will guarantee that the property sheet does not have to be modified and will avoid generating the first-chance exception.
Example
See the example for CPropertySheet::AddPage
.
CPropertySheet::EnableStackedTabs
Indicates whether to stack rows of tabs in a property sheet.
void EnableStackedTabs(BOOL bStacked);
Parameters
bStacked
Indicates whether stacked tabs are enabled in the property sheet. Disable stacked rows of tags by setting bStacked
to FALSE
.
Remarks
By default, if a property sheet has more tabs than will fit in a single row in the width of the property sheet, the tabs will stack in multiple rows. To use scrolling tabs instead of stacking tabs, call EnableStackedTabs
with bStacked
set to FALSE
before calling DoModal
or Create
.
You must call EnableStackedTabs
when you create a modal or a modeless property sheet. To incorporate this style in a CPropertySheet
-derived class, write a message handler for WM_CREATE
. In the overridden version of CWnd::OnCreate
, call EnableStackedTabs( FALSE )
before calling the base class implementation.
Example
int CMyPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// Set for Scrolling Tabs style
EnableStackedTabs(FALSE);
// Call the base class
if (CPropertySheet::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
CPropertySheet::EndDialog
Terminates the property sheet.
void EndDialog(int nEndID);
Parameters
nEndID
Identifier to be used as return value of the property sheet.
Remarks
This member function is called by the framework when the OK, Cancel, or Close button is pressed. Call this member function if an event occurs that should close the property sheet.
This member function is only used with a modal dialog box.
Example
See the example for CPropertySheet::PressButton
.
CPropertySheet::GetActiveIndex
Gets the index number of the property sheet window's active page and then uses the returned index number as the parameter for GetPage
.
int GetActiveIndex() const;
Return Value
The index number of the active page.
Example
See the example for CPropertySheet::GetActivePage
.
CPropertySheet::GetActivePage
Retrieves the property sheet window's active page.
CPropertyPage* GetActivePage() const;
Return Value
The pointer to the active page.
Remarks
Use this member function to perform some action on the active page.
Example
// The code fragment below sets the last active page (i.e. the
// active page when the propertysheet was closed) to be the first
// visible page when the propertysheet is shown. The last active
// page was saved in m_LastActivePage, (a member variable of
// CDocument-derived class) when OK was selected from the
// propertysheet. CMyPropertySheet is a CPropertySheet-derived class.
BOOL CMyPropertySheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
CMDIFrameWnd* pframe = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pchild = pframe->MDIGetActive();
CPSheetDoc* doc = (CPSheetDoc*)pchild->GetActiveDocument();
SetActivePage(doc->m_LastActivePage);
return bResult;
}
BOOL CMyPropertySheet::OnCommand(WPARAM wParam, LPARAM lParam)
{
if (LOWORD(wParam) == IDOK)
{
CMDIFrameWnd* pframe = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pchild = pframe->MDIGetActive();
CPSheetDoc* doc = (CPSheetDoc*)pchild->GetActiveDocument();
doc->m_LastActivePage = GetPageIndex(GetActivePage()); // or GetActiveIndex()
}
return CPropertySheet::OnCommand(wParam, lParam);
}
CPropertySheet::GetPage
Returns a pointer to the specified page in this property sheet.
CPropertyPage* GetPage(int nPage) const;
Parameters
nPage
Index of the desired page, starting at 0. Must be between 0 and one less than the number of pages in the property sheet, inclusive.
Return Value
The pointer to the page corresponding to the nPage
parameter.
Example
See the example for CPropertyPage::OnWizardFinish
.
CPropertySheet::GetPageCount
Determines the number of pages currently in the property sheet.
int GetPageCount() const;
Return Value
The number of pages in the property sheet.
Example
See the example for CPropertyPage::OnWizardFinish
.
CPropertySheet::GetPageIndex
Retrieves the index number of the specified page in the property sheet.
int GetPageIndex(CPropertyPage* pPage);
Parameters
pPage
Points to the page with the index to be found. Cannot be NULL
.
Return Value
The index number of a page.
Remarks
For example, you would use GetPageIndex
to get the page index in order to use SetActivePage
or GetPage
.
Example
See the example for CPropertySheet::GetActivePage
.
CPropertySheet::GetTabControl
Retrieves a pointer to a tab control to do something specific to the tab control (that is, to use any of the APIs in CTabCtrl
).
CTabCtrl* GetTabControl() const;
Return Value
A pointer to a tab control.
Remarks
For example, call this member function if you want to add bitmaps to each of the tabs during initialization.
Example
// Create and associate a tooltip control to the tab control of
// CMyTTPropertySheet. CMyTTPropertySheet is a CPropertySheet-derived
// class.
BOOL CMyTTPropertySheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
// Create a tooltip control. m_pToolTipCtrl is a member variable
// of type CToolTipCtrl* in CMyTTPropertySheet class. It is
// initialized to NULL in the constructor, and destroyed in the
// destructor of CMyTTPropertySheet class.
m_pToolTipCtrl = new CToolTipCtrl;
if (!m_pToolTipCtrl->Create(this))
{
TRACE(_T("Unable To create ToolTip\n"));
return bResult;
}
// Associate the tooltip control to the tab control
// of CMyPropertySheet.
CTabCtrl* ptab = GetTabControl();
ptab->SetToolTips(m_pToolTipCtrl);
// Get the bounding rectangle of each tab in the tab control of the
// property sheet. Use this rectangle when registering a tool with
// the tool tip control. IDS_FIRST_TOOLTIP is the first ID string
// resource that contains the text for the tool.
int count = ptab->GetItemCount();
int id = IDS_FIRST_TOOLTIP;
for (int i = 0; i < count; i++)
{
CRect r;
ptab->GetItemRect(i, &r);
VERIFY(m_pToolTipCtrl->AddTool(ptab, id, &r, id));
id++;
}
// Activate the tooltip control.
m_pToolTipCtrl->Activate(TRUE);
return bResult;
}
// Override PreTranslateMessage() so RelayEvent() can be
// called to pass a mouse message to CMyTTPropertySheet's
// tooltip control for processing.
BOOL CMyTTPropertySheet::PreTranslateMessage(MSG* pMsg)
{
if (NULL != m_pToolTipCtrl)
m_pToolTipCtrl->RelayEvent(pMsg);
return CPropertySheet::PreTranslateMessage(pMsg);
}
CPropertySheet::m_psh
A structure whose members store the characteristics of PROPSHEETHEADER
.
Remarks
Use this structure to initialize the appearance of the property sheet after it is constructed but before it is displayed with the DoModal
member function. For example, set the dwSize
member of m_psh
to the size you want the property sheet to have.
For more information on this structure, including a listing of its members, see PROPSHEETHEADER
in the Windows SDK.
Example
// This code fragment shows how to change CPropertySheet's settings
// before it is shown. After the changes, CPropertySheet has the
// caption "Simple Properties", no "Apply" button, and the
// second page (CColorPage) initially on top.
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));
CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);
dlgPropertySheet.m_psh.dwFlags |= PSH_NOAPPLYNOW | PSH_PROPTITLE;
dlgPropertySheet.m_psh.pszCaption = _T("Simple");
dlgPropertySheet.m_psh.nStartPage = 1;
dlgPropertySheet.DoModal();
CPropertySheet::MapDialogRect
Converts the dialog-box units of a rectangle to screen units.
void MapDialogRect(LPRECT lpRect) const;
Parameters
lpRect
Points to a RECT
structure or CRect
object that contains the dialog-box coordinates to be converted.
Remarks
Dialog-box units are stated in terms of the current dialog-box base unit derived from the average width and height of characters in the font used for dialog-box text. One horizontal unit is one-fourth of the dialog-box base-width unit, and one vertical unit is one-eighth of the dialog-box base height unit.
The GetDialogBaseUnits
Windows function returns size information for the system font, but you can specify a different font for each property sheet if you use the DS_SETFONT style in the resource-definition file. The MapDialogRect
Windows function, described in the Windows SDK, uses the appropriate font for this dialog box.
The MapDialogRect
member function replaces the dialog-box units in lpRect
with screen units (pixels) so that the rectangle can be used to create a dialog box or position a control within a box.
CPropertySheet::OnInitDialog
Overrides to augment property sheet initialization.
virtual BOOL OnInitDialog();
Return Value
Specifies whether the application has set the input focus to one of the controls in the property sheet. If OnInitDialog
returns nonzero, Windows sets the input focus to the first control in the property sheet. The application can return 0 only if it has explicitly set the input focus to one of the controls in the property sheet.
Remarks
This member function is called in response to the WM_INITDIALOG
message. This message is sent to the property sheet during the Create
or DoModal
calls, which occur immediately before the property sheet is displayed.
Override this member function if you need to perform special processing when the property sheet is initialized. In the overridden version, first call the base class OnInitDialog
but disregard its return value. You will normally return TRUE
from your overridden member function.
You do not need a message-map entry for this member function.
CPropertySheet::PressButton
Simulates the choice of the specified button in a property sheet.
void PressButton(int nButton);
Parameters
nButton
nButton
: Identifies the button to be pressed. This parameter can be one of the following values:
PSBTN_BACK
Chooses the Back button.PSBTN_NEXT
Chooses the Next button.PSBTN_FINISH
Chooses the Finish button.PSBTN_OK
Chooses the OK button.PSBTN_APPLYNOW
Chooses the Apply Now button.PSBTN_CANCEL
Chooses the Cancel button.PSBTN_HELP
Chooses the Help button.
Remarks
See PSM_PRESSBUTTON
for more information about the Windows SDK Pressbutton message.
A call to PressButton
will not send the PSN_APPLY
notification from a property page to the framework. To send this notification, call CPropertyPage::OnOK
.
Example
// Simulate the selection of OK and Cancel buttons when Alt+K and
// Alt+C are pressed. CMyPropertySheet is a CPropertySheet-derived
// class.
BOOL CMyPropertySheet::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
{
BOOL altkey = GetKeyState(VK_MENU) < 0;
if (altkey)
{
BOOL handled = TRUE;
switch (toupper((int)pMsg->wParam))
{
case 'C': // for Alt+C - Cancel button
PressButton(PSBTN_CANCEL); // or EndDialog(IDCANCEL);
break;
case 'K': // for Alt+K - OK button
PressButton(PSBTN_OK); // or EndDialog(IDOK);
break;
default:
handled = FALSE;
}
if (handled)
return TRUE;
}
}
return CPropertySheet::PreTranslateMessage(pMsg);
}
CPropertySheet::RemovePage
Removes a page from the property sheet and destroys the associated window.
void RemovePage(CPropertyPage* pPage);
void RemovePage(int nPage);
Parameters
pPage
Points to the page to be removed from the property sheet. Cannot be NULL
.
nPage
Index of the page to be removed. Must be between 0 and one less than the number of pages in the property sheet, inclusive.
Remarks
The CPropertyPage
object itself is not destroyed until the owner of the CPropertySheet
window is closed.
CPropertySheet::SetActivePage
Changes the active page.
BOOL SetActivePage(int nPage);
BOOL SetActivePage(CPropertyPage* pPage);
Parameters
nPage
Index of the page to set. It must be between 0 and one less than the number of pages in the property sheet, inclusive.
pPage
Points to the page to set in the property sheet. It cannot be NULL
.
Return Value
Nonzero if the property sheet is activated successfully; otherwise 0.
Remarks
For example, use SetActivePage
if a user's action on one page should cause another page to become the active page.
Example
See the example for CPropertySheet::GetActivePage
.
CPropertySheet::SetFinishText
Sets the text in the Finish command button.
void SetFinishText(LPCTSTR lpszText);
Parameters
lpszText
Points to the text to be displayed on the Finish command button.
Remarks
Call SetFinishText
to display the text on the Finish command button and hide the Next and Back buttons after the user completes action on the last page of the wizard.
Example
// CShapePage is the last wizard property page. Enable the Back
// button and change the Next button to Finish. The "Finish" button
// will have "Done" as its caption.
BOOL CShapePage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*)GetParent();
psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
psheet->SetFinishText(_T("Done"));
return CPropertyPage::OnSetActive();
}
CPropertySheet::SetTitle
Specifies the property sheet's caption (the text displayed in the title bar of a frame window).
void SetTitle(
LPCTSTR lpszText,
UINT nStyle = 0);
Parameters
nStyle
Specifies the style of the property sheet title. The style must be specified at 0 or as PSH_PROPTITLE
. If the style is set as PSH_PROPTITLE
, the word "Properties" appears after the text specified as the caption. For example, calling SetTitle
("Simple", PSH_PROPTITLE
) will result in a property sheet caption of "Simple Properties."
lpszText
Points to the text to be used as the caption in the title bar of the property sheet.
Remarks
By default, a property sheet uses the caption parameter in the property sheet constructor.
Example
// Declare a CPropertySheet object with a caption "Simple PropertySheet".
CPropertySheet dlgPropertySheet(_T("Simple PropertySheet"));
// Add three pages to the CPropertySheet object. CStylePage, CColorPage,
// and CShapePage are CPropertyPage-derived classes created
// by the Add Class wizard.
CStylePage stylePage;
CColorPage colorPage;
CShapePage shapePage;
dlgPropertySheet.AddPage(&stylePage);
dlgPropertySheet.AddPage(&colorPage);
dlgPropertySheet.AddPage(&shapePage);
// Change the caption of the CPropertySheet object
// from "Simple PropertySheet" to "Simple Properties".
dlgPropertySheet.SetTitle(_T("Simple"), PSH_PROPTITLE);
// Show the CPropertySheet object as MODAL.
dlgPropertySheet.DoModal();
CPropertySheet::SetWizardButtons
Enables or disables the Back, Next, or Finish button in a wizard property sheet.
void SetWizardButtons(DWORD dwFlags);
Parameters
dwFlags
A set of flags that customize the function and appearance of the wizard buttons. This parameter can be a combination of the following values:
PSWIZB_BACK
Back buttonPSWIZB_NEXT
Next buttonPSWIZB_FINISH
Finish buttonPSWIZB_DISABLEDFINISH
Disabled Finish button
Remarks
Call SetWizardButtons
only after the dialog is open; you can't call SetWizardButtons
before you call DoModal
. Typically, you should call SetWizardButtons
from CPropertyPage::OnSetActive
.
If you want to change the text on the Finish button or hide the Next and Back buttons once the user has completed the wizard, call SetFinishText
. Note that the same button is shared for Finish and Next. You can display a Finish or a Next button at one time, but not both.
Example
A CPropertySheet
has three wizard property pages: CStylePage
, CColorPage
, and CShapePage
. The code fragment below shows how to enable and disable the Back and Next buttons on the wizard property page.
// CStylePage is the first wizard property page. Disable the Back
// button but enable the Next button.
BOOL CStylePage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*) GetParent();
psheet->SetWizardButtons(PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
// CColorPage is the second wizard property page. Enable both the
// Back button and the Next button.
BOOL CColorPage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*)GetParent();
psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_NEXT);
return CPropertyPage::OnSetActive();
}
// CShapePage is the last wizard property page. Enable the Back
// button and change the Next button to Finish. The "Finish" button
// will have "Done" as its caption.
BOOL CShapePage::OnSetActive()
{
CPropertySheet* psheet = (CPropertySheet*)GetParent();
psheet->SetWizardButtons(PSWIZB_BACK | PSWIZB_FINISH);
psheet->SetFinishText(_T("Done"));
return CPropertyPage::OnSetActive();
}
CPropertySheet::SetWizardMode
Establishes a property page as a wizard.
void SetWizardMode();
Remarks
A key characteristic of a wizard property page is that the user navigates using Next or Finish, Back, and Cancel buttons instead of tabs.
Call SetWizardMode
before calling DoModal
. After you call SetWizardMode
, DoModal
will return either ID_WIZFINISH
(if the user closes with the Finish button) or IDCANCEL
.
SetWizardMode
sets the PSH_WIZARD
flag.
Example
CPropertySheet sheet(_T("Simple PropertySheet"));
CStylePage pageStyle;
CColorPage pageColor;
CShapePage pageShape;
sheet.AddPage(&pageStyle);
sheet.AddPage(&pageColor);
sheet.AddPage(&pageShape);
sheet.SetWizardMode();
sheet.DoModal();
See also
MFC Sample CMNCTRL1
MFC Sample CMNCTRL2
MFC Sample PROPDLG
MFC Sample SNAPVW
CWnd
Class
Hierarchy Chart