MFC 向导对话框的设置与显示

1.设置Dialog           (基础的设置)

2.创建属性页类,并重写相关函数

   选定一个Dialog,然后添加class,名字CStep1,由于属性页对话框类继承于CPropertyPage类,所以基类选择处选择CPropertyPage。

   创建完该类之后就是重写其中的相关函数。

   CPropertyPage类提供了一些消息处理函数,来响应属性页对话框的各种消息。我们重载这些消息处理函数,就可以自定义对属性页对话框操作的处理。可重载的消息处理函

   数包括:

       OnApply:处理属性页的“Apply”按钮被单击的消息

       OnCancel:处理属性页的“Cancel”按钮被单击的消息

       OnKillActive:处理属性页当前活动状态被切换的消息,常用于数据验证

       OnOK:处理属性页的“OK”按钮、“Apply”按钮或者“Close”按钮被单击的消息

       OnQueryCancel:处理属性页的“Cancel”按钮被单击前发出的消息

       OnReset:处理属性页的“Reset”按钮被单击的消息

       OnSetActive:处理属性页被切换为当前活动页的消息

       OnWizardBack:处理属性页的“Back”按钮被单击的消息,仅在向导对话框中有效

       OnWizardFinish:处理属性页的“Finish”按钮被单击的消息,仅在向导对话框中有效

       OnWizardNext:处理属性页的“Next”按钮被单击的消息,仅在向导对话框中有效

BOOL CStep1::OnSetActive()
{
	// TODO: 在此添加专用代码和/或调用基类
	CPropertySheet* psheet = (CPropertySheet*)GetParent()<span class="comment">// 获得父窗口,即属性表CPropertySheet类 </span><span> </span><span> </span>
	psheet->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);//添加向导按钮“上一页”和“下一页”
	return CPropertyPage::OnSetActive();
}
BOOL CStep3::OnWizardFinish()//当点击finish按钮时,弹出消息框
{
	// TODO: 在此添加专用代码和/或调用基类
	MessageBox(_T("计算器向导您已经阅读完毕"));//弹出消息框
	return CPropertyPage::OnWizardFinish();
}

3.创建属性表类

在解决方案资源管理器的root下,右击->添加->类,然后选择MFC类,然后添加名称CMySheet,其基类为CPropertySheet。

这时候会自动生成MySheet.h和MySheet.cpp。我们先打开.h文件然后在里面添加属性页对话框类的头文件,例如之前创建的Step0.h,Step1.h......,添加完之后,找到MySheet类,在里面添加私有成员,私有成员是所有的属性页类的一些变量。
#pragma once
#include "Step0.h"
#include "Step1.h"
#include "Step2.h"
#include "Step3.h"


// CMySheet

class CMySheet : public CPropertySheet
{
	DECLARE_DYNAMIC(CMySheet)

public:
	CMySheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
	CMySheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
	virtual ~CMySheet();

protected:
	DECLARE_MESSAGE_MAP()
private:
	CStep0 m_step0;
	CStep1 m_step1;
	CStep2 m_step2;
	CStep3 m_step3;
};
之后需要在CMySheet的构造函数中创建属性页使用到AddPage()函数
为属性对话框添加新的属性页。函数原型为:

       void AddPage(
               CPropertyPage *pPage 
       );

其两个构造函数都要修改:( 注意这里面添加属性页的顺序是向导框显示的顺序,一定要注意顺序安排
CMySheet::CMySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
	AddPage(&m_step0);
	AddPage(&m_step1);
	AddPage(&m_step2);
	AddPage(&m_step3);
}

CMySheet::CMySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
	AddPage(&m_step0);
	AddPage(&m_step1);
	AddPage(&m_step2);
	AddPage(&m_step3);
}

4.最后设置“启动”Button

void CMFCApplication1Dlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	CMySheet sheet(_T(""));//声明一个CMySheet类的变量,并且初始化。
	sheet.SetWizardMode();//设置属性页对话框为向导对话框模式,应该在调用DoModal之前调用此函数
	sheet.DoModal();//用于显示模态对话框
}



以上是简单的设置。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值