类似于那种安装时出现的对话框,一直点“下一步”
解决方案 »
- vc++ MFC Application程序怎么封装成OCx插件···
- 关于回调函数的问题
- 请教:获取的网页内容修改后写回去,出现乱码
- 想将传输的数据进行加密,但是加密中文后解密出来的是乱码?
- 远程协同学习系统中音频感知的集成开发
- 如何改变.exe中的变量i,使得i在两个进程开始执行时的值不一样?
- 不爽呀,散分
- 程序刚启动时,将主界面隐藏,只在托盘上显示一个图标,然后当我想让主界面出现的时候,却发现问题多多,望高手们能指点一二!(在线)
- 请问:在ATL中能不能使用MFC扩展dll?
- WINDOWS对一个文件重命名时出现一个框,然后获得焦点,还能换行,这是怎么做出来的?请指点一二。
- 请问:仅有256色的位图文件中的图像数据区,如何显示图像,又如何保存为bmp?
- 在vc中怎样利用控件的失去焦点的信息?????
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,"这是向导的第三步");
说的比较详细