分类: C/C++
2008-08-07 17:34:42
//将代码放在按钮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,"这是向导的第三步");这样一个基本的向导程序就完成了,其效果如图所示
三、自定义向导的实现
1. 工程的建立与基本界面的生成
生成一个MFC APPWIZARD 新工程,命名为CustomWizard,在Step1 中选择基于Dialog Based样式。
在自动生成的Dialog 资源中加入一个按钮IDC_BENGINWIZ 用来启动向导。
新建一个对话框 资源,命名为IDC_WIZARD,用来显示自定义向导界面,如图
依次创建向导的每页 的对话框资源,命名为IDD_STEP1,IDD_STEP2,IDD_STEP3,
(图4)
2. 生成所需要的类
为了方便叙述,表1将所用的类进行了归纳
(表1)
类名 | 基类 | 说明 |
CWizard | CDialog | 向导的框架 |
CStep1 | CDialog | 向导的第一步 |
CStep2 | CDialog | 向导的第二步 |
CStep3 | CDialog | 向导的第三步 |
CCustomWizardDlg | CDialog | 启动向导 |