MFC创建属性对话框(1)

一:属性页对话框

属性页对话框包括一般属性页对话框和向导对话框;共同特点是集多个对话框于一身,一般属性页对话框通过标签来回切换,而向导对话框通过按钮来回切换;

创建属性页常用的两个类是CPropertyPage类和CPropertySheet类,CPropertyPage类表示单个属性页面,后者表示整体属性对话框;大家可以在MSDN中详细了解这两个类;

二:创建向导对话框

1:首先创建一个基于对话框的MFC程序,在资源里insert三个对话框表示属性页面,但是对话框的属性要重新设置:style为child类型,border为thin类型;
     这里介绍一下三种dialog style类型:
child 类型:子窗口,子窗口只能出现在另一个窗口之中,子窗口多余的部分会被裁剪;而且子窗口不能含有菜单栏;
popup类型:弹出式窗口,通常以对话框和消息框的形式与用户对话;可以没有标题栏;
overlapped类型,重叠式窗口,通常用于应用程序主窗口;

    border类型为边界类型;none;thin;resizing和dialog frame,一般都用dialog frame;

 2:然后给每一个对话框添加一个类,基类是CPropertyPage;CPage_1;CPage_2;CPage_3,添加完类之后,重写OnSetActive()函数
BOOL CPage_1::OnSetActive()
{
	// TODO: 在此添加专用代码和/或调用基类
	CPropertySheet* psheet = (CPropertySheet*)GetParent();  //得到父类窗口的指针;
	psheet->SetWizardButtons(PSWIZB_NEXT);                   //有一个下一步按钮;
	return CPropertyPage::OnSetActive();
}
BOOL CPage_2::OnSetActive()
{
	// TODO: 在此添加专用代码和/或调用基类
	CPropertySheet* psheet = (CPropertySheet*)GetParent();

	psheet->SetWizardButtons(PSWIZB_BACK|PSWIZB_NEXT);      //有上一步和下一步按钮;
	return CPropertyPage::OnSetActive();
}
BOOL CPage_3::OnSetActive()
{
	// TODO: 在此添加专用代码和/或调用基类
	CPropertySheet* psheet = (CPropertySheet*)GetParent();
	psheet->SetWizardButtons(PSWIZB_BACK|PSWIZB_FINISH);       //上一步和完成按钮
	return CPropertyPage::OnSetActive();
}

3:有了三个属性页面之后,还需要一个属性表来包含他们,即需要在类视图中添加一个继承CPropertySheet的类CProSheet;同时需要包含三个属性页的头文件,创建三个属性页对象;
#pragma once
#include"Page_1.h"
#include"Page_2.h"
#include"Page_3.h"
// CProSheet
class CProSheet : public CPropertySheet
{
	DECLARE_DYNAMIC(CProSheet)

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

protected:
	DECLARE_MESSAGE_MAP()
public:
	CPage_1 page_1;     //创建三个属性页对象;
	CPage_2 page_2;
	CPage_3 page_3;
};

4:在CProSheet的构造函数中初始化属性表单,把三个属性页面添加到属性表单;
CProSheet::CProSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
	AddPage(&page_1);
	AddPage(&page_2);
	AddPage(&page_3);
}

CProSheet::CProSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
	AddPage(&page_1);
	AddPage(&page_2);
	AddPage(&page_3);
}
5:最后,在button上添加消息响应函数;单击该button时就会弹出该属性表;
void CProPageDlg::OnBnClickedPage()
{
	// TODO: 在此添加控件通知处理程序代码
	CProSheet sheet(_T(""));
	sheet.SetWizardMode();                       //以向导的形式显示;
	sheet.DoModal();
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章