版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huanhuanxiaoxiao/article/details/84194427
今天在学习的时候,实现了一种分页显示的功能。如下图:
以下是实现步骤:
1、在资源文件中添加三个IDD_PROPPAGE_LARGE,也就是三个dialog。我给他们取名为IDD_PROP1、IDD_PROP2、IDD_PROP3,然后随便添加一些控件。
2、我们新加三个类,名字叫做CProp1、CProp2、CProp3,基类选择CPropertyPage。在vs2008里面新加一个类的步骤是:在类视图右键点击工程名->添加->类->mfc类。
3、添加一个名为CPropSheet的类,基类是CPropertySheet。在CPropSheet类中添加三个成员变量,然后在构造函数中将这三个页面插入到该表单中,CPropSheet.h如下。
#pragma once
#include "prop1.h"
#include "prop2.h"
#include "prop3.h"
// CPropSheet
class CPropSheet : public CPropertySheet
{
DECLARE_DYNAMIC(CPropSheet)
public:
CPropSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
virtual ~CPropSheet();
protected:
DECLARE_MESSAGE_MAP()
public:
CProp1 m_prop1;//作为成员变量
CProp2 m_prop2;
CProp3 m_prop3;
};
CPropSheet.cpp如下:
// PropSheet.cpp : 实现文件
//
#include "stdafx.h"
#include "Dialog.h"
#include "PropSheet.h"
// CPropSheet
IMPLEMENT_DYNAMIC(CPropSheet, CPropertySheet)
CPropSheet::CPropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
AddPage(&m_prop1);//添加一个page到该sheet
AddPage(&m_prop2);
AddPage(&m_prop3);
}
CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
AddPage(&m_prop1);
AddPage(&m_prop2);
AddPage(&m_prop3);
}
CPropSheet::~CPropSheet()
{
}
BEGIN_MESSAGE_MAP(CPropSheet, CPropertySheet)
END_MESSAGE_MAP()
// CPropSheet 消息处理程序
4、添加一个消息响应函数来显示该表单。为了让表单显示为向导模式,我们需要在DoModal()或者Create()之前调用SetWizardMode()。
void CDialogView::OnPropertysheet()
{
CPropSheet propSheet(_T("维新属性表单程序"));
propSheet.SetWizardMode();//设置为向导模式
propSheet.DoModal();
}
5、最后一步就是,我们需要设置第一页的上一步是enable,最后一页的下一步是enable的。当该页是活动页时,我们需要设置
当前表单的按钮状态。
BOOL CProp1::OnSetActive()//重写
{
CPropertySheet* pSheet = (CPropertySheet*)GetParent();//拿到表单的指针
pSheet->SetWizardButtons(PSWIZB_NEXT);//设置下一步是激活的
return CPropertyPage::OnSetActive();
}
// CProp2 消息处理程序
BOOL CProp2::OnSetActive()
{
CPropertySheet* pSheet = (CPropertySheet*)GetParent();
pSheet->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);//设置上一步和下一步是激活的
return CPropertyPage::OnSetActive();
}
// CProp3 消息处理程序
BOOL CProp3::OnSetActive()
{
CPropertySheet* pSheet = (CPropertySheet*)GetParent();
pSheet->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);//设置上一步和完成是激活的
return CPropertyPage::OnSetActive();
}
经过这几个步骤就可以显示出来了。