如何实现“上一步”、“下一步”的对话框

1.   类CPropertyPage   是从CDiaglog中派生出来的,具有Diaglog的基本性质,需要注意的是它的样式必须是Child。   
2.   类CPropertySheet   是一个属性表,也是一个窗体,相当一个容器,用来存放所有的CpropertyPage。它不是   从CDialog   派生出来的,但是它可以象普通对话框类似的操作,   如DoModal(),当用   DoModal()显示   后,它就包含了“取消”、“上一步”、“下一步”   等基本按钮。 
下面给出一个实例   
①   新建一个   VC++   MFC   AppWizard   工程,命名为TraditionalWizard,并选择Dialog   Based   样式。   
②   在自动生成   的Dialog   资源中加入一个按钮IDC_BENGINWIZ   用来启动向导。   
③   创建   CPropertyPage。新建Dialog   资源,命名为IDD_STEP1,注意一定要将新建对话框的Style属性设置成Child   和边界属性设置为Thin,并且不要生成一个新类。   
用ClassWizard   生成一个新类,命名为CStep1,基类为CPropertyPage,且将Dialog   ID   设置为刚生成的资源IDD_STEP1。这样就生成了一个新属性页Step1。如此操作就可以   同样生成Step2、Step3   属性页。为了方便显示,在每个对话框都放置了一个控件,用来表示当前是哪一步。 
④   创建   CPropertySheet。新建一个类,命名为CWizard,基类为CPropertySheet。并将属性页和属性表关联起来。代码为 


//将代码放在按钮IDC_BEGINWIZ的Click事件中 
CWizard   MyWizard(_T( "我的向导   "),this,1);   //生成一个属性表 
CStep1   MyStep1;     //属性页1   
CStep2   MyStep2;   //属性页2   
CStep3   MyStep3;   //属性页3   
MyWizard.AddPage(&MyStep1);   //添加属性页1   
MyWizard.AddPage(&MyStep2);   //添加属性页2   
MyWizard.AddPage(&MyStep3);   //添加属性页3 
MyWizard.SetWizardMode();       //将属性表设置成向导样式 
MyWizard.SetActivePage(&MyStep1);   //设置第一页为第一步 
MyWizard.DoModal();   //显示属性表 

⑤协调显示。在每一页为当前页时,都会触发OnSetActive事件,故对每一个属性页都要重载该函数,在CStep1类上选择Add   Virtual   Function   ...。因为显示第一页时,不存在“上一步”,故在CStep1的   OnSetActive函数中需要添加如下代码:   //代码放在OnSetActive函数中 
CPropertySheet*   pParent=(CPropertySheet*)GetParent();   //   获得属性表的指针 
pParent-> SetWizardButtons(PSWIZB_NEXT);   //   设置属性表的显示按钮只为下一步 
SetDlgItemText(IDC_TEXT1, "这是向导的第一步 ");   

同样在显示中间页时应该设置成即有“上一步”,也有“下一步”,代码为:   CPropertySheet*   pParent=(CPropertySheet*)GetParent();   
pParent-> SetWizardButtons(PSWIZB_NEXT|PSWIZB_BACK);     
SetDlgItemText(IDC_TEXT2, "这是向导的第二步 ");   

最后在显示最后一页时只显示“完成”和“上一步”,代码为:   CPropertySheet*   pParent=(CPropertySheet*)GetParent();   
pParent-> SetWizardButtons(PSWIZB_FINISH|PSWIZB_BACK);   
SetDlgItemText(IDC_TEXT3, "这是向导的第三步 ");   

你可能感兴趣的:(如何实现“上一步”、“下一步”的对话框)