65.9K
CodeProject is changing. Read more.
Home

Simple wizard property sheet class

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (6 votes)

Apr 10, 2000

viewsIcon

99382

downloadIcon

1978

A simply class to turn CPropertySheet into wizard mode without needing to alert the property pages within

  • Download source files - 2 Kb
  • Introduction

    Windows allows a simple transition of your property sheet into wizard mode. However, this transition requires the property pages within the sheet to know about this. They should call SetWizardButtons() with the correct parameters on becoming active - which of course breaks encapsulation. The page needs to know it's part of wizard-style property sheet, and it needs to know its position within the sheet.

    My CWizardPropertySheet class solves the problem for simple wizards by having the CPropertySheet-derived class handle the appropriate SetWizardButtons() calls by itself.

    The CWizardPropertySheet class

    The CWizardPropertySheet is a drop-in replacement for CPropertySheet. It works both in wizard and "normal" modes. (The application must call SetWizardMode() to activate wizard mode, just as it would with a normal CPropertyPage.)

    To use it, simply #include "WizardPropertySheet.h" and use CWizardPropertySheet wherever you would use CPropertySheet. (Alternatively, you may import the class by ClassWizard.)

    What does it do?

    The CWizardPropertySheet shows the property pages added by AddPage() call in order they have been added. It disables the Back button on the first page, and it changes Next to Finish on the last page.

    How does it accomplish that?

    The message map of the class contains handlers:
    ON_BN_CLICKED(ID_WIZBACK, OnWizBack)
    ON_BN_CLICKED(ID_WIZNEXT, OnWizNext)
    

    The ID_WIZBACK and ID_WIZNEXT constants are defined in afxres.h. The handlers do the proper SetWizardButtons() call and then call Default(); to allow page change to proceed.

    Don't forget!

    Don't forget to call SetWizardMode() before DoModal() to put the property sheet into wizard more.