如题。

解决方案 »

  1.   

    这个非常棒:
    http://www.codeproject.com/dialog/wizard2000.asp
      

  2.   

    简单的方法就是重载CPropertyPage::OnWizardFinish,在其中return TRUE;
      

  3.   

    我是这个意思:我的向导有三个属性页A、B、C,B(的某个成员,不妨记做x)的初始化与用户在A中的选择有关,如果用户在A中进行了正确的选择,x的初始化成功,于是向导继续进行;否则,x的初始化失败,向导退出,消失,不继续进行下去。
    怎么做呢?
      

  4.   

    我试了一下,可以这么做:
    1。在属性页B中加入一个属性表的指针成员:
    class CMysheet;//此句不能少
    /////////////////////////////////////////////////////////////////////////////
    // CPageB dialogclass CPageB : public CPropertyPage
    {
    DECLARE_DYNCREATE(CPageB)// Construction
    public:

    CMysheet*  m_pSheet;
    ..............................2。在属性表的构造函数中加上:
    CMysheet::CMysheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
    {
    AddPage( &m_PageA );
    AddPage( &m_PageB );
    AddPage( &m_PageC ); m_PageB.m_pSheet = this;
    }CMysheet::CMysheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(pszCaption, pParentWnd, iSelectPage)
    {
    AddPage( &m_PageA );
    AddPage( &m_PageB );
    AddPage( &m_PageC ); m_PageB.m_pSheet = this;
    }3.在属性页B的OnWizardNext函数中加上:
    LRESULT CPageB::OnWizardNext() 
    {
    // TODO: Add your specialized code here and/or call the base class
           if ( 数据校验不成功)
           {
    m_pSheet->EndDialog( IDCANCEL );
            } return CPropertyPage::OnWizardNext();
    }同时在属性页B的cpp文件中加上:#include "Mysheet.h"
      

  5.   

    看来CPropertySheet差不多是个对话框。如此说来,就很简单了,用不着在属性页中添加Sheet指针: CPropertySheet* pParent=(CPropertySheet*)GetParent();
    pParent->EndDialog(IDCANCEL); 即可。谢谢,结帐!