VC下一步
1. 類CPropertyPage 是從CDiaglog中派生出來的,具有Diaglog的基本性質,需要注意的是它的樣式必須是Child。
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, "這是嚮導的第三步 ");
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, "這是嚮導的第三步 ");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.