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();
}





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