轉帖|使用教程|編輯:鮑佳佳|2021-01-26 10:31:16.483|閱讀 1349 次
概述:上一講講了屬性頁對話框和相關的兩個類CPropertyPage類和CPropertySheet類,對使用屬性頁對話框做準備。本節將為大家演示如何創建向導對話框。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
上一講講了屬性頁對話框和相關的兩個類CPropertyPage類和CPropertySheet類,對使用屬性頁對話框做準備。本節將為大家演示如何創建向導對話框。
仍然以前面的“加法計算器”的例子為基礎,在其中加入向導對話框,我們可以用它來說明加法計算器的使用方法,一步一步引導用戶操作,這也是比較常見的用法。
加法計算器使用時大概可以分為三步:輸入被加數、輸入加數、點“計算”按鈕。當功能實現了想要擁有美觀的界面可以借助Toolkit Pro進行界面優化。
Xtreme Toolkit Pro:是屢獲殊榮的VC界面庫,是MFC開發中最全面界面控件套包,它提供了Windows開發所需要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。
下面詳細說明向導對話框的創建步驟:
1.創建屬性頁對話框資源
根據創建對話框模板和修改對話框屬性中所講方法,在“Resource View”的Dialog”節點上點右鍵,然后在右鍵菜單中選擇“Insert Dialog”創建第一個對話框模板,對話框的ID屬性設置為IDD_SUMMAND_PAGE,Caption屬性改為“被加數頁”,Style屬性在下拉列表中選擇“Child”,Border屬性在下拉列表中選擇“Thin”。
刪除“OK”和“Cancel”按鈕,再按照為對話框添加控件中所講方法,添加一個靜態文本框,并修改靜態文本框的Caption屬性為“請先輸入double型被加數”。
按照上述步驟,繼續添加第二個和第三個對話框資源。第二個對話框模板的ID設為IDD_ADDEND_PAGE,Caption屬性改為“加數頁”,也添加一個靜態文本框,Caption設為“請繼續輸入double型加數”,其他屬性同第一個對話框。第三個對話框模板的ID設為IDD_ADD_PAGE,Caption屬性改為“計算頁”,添加靜態文本框的Caption屬性改為“最后請按下“計算”按鈕”,其他屬性也第一個對話框一樣。
2.創建屬性頁類
按照創建對話框類和添加控件變量中的方法,在第一個對話框模板上點右鍵,在右鍵菜單中選擇“Add Class”,彈出類向導對話框,在“Class name”編輯框中輸入類名“CSummandPage”,與之前不同的是,因為屬性頁類都應繼承于CPropertyPage類,所以要修改下面“Base class”的選項,在下拉列表中選擇“CPropertyPage”。
因為是第一個屬性頁,所以它應該有一個“下一步”按鈕,在哪里添加呢?上一講CPropertyPage類的可重載函數中提到,OnSetActive函數用于處理屬性頁被切換為當前活動頁的消息,所以我們可以在OnSetActive函數中進行相關設置。
那怎樣重載OnSetActive函數呢?我們可以在“Class View”中找到“CSummandPage”節點,點右鍵彈出右鍵菜單,選擇“Properties”,然后VS2010右側面板上會顯示對話框的屬性列表,屬性列表的工具欄上有個tip信息為“Overrides”的按鈕,按下它,下方列表中就列出了重載函數,找到“OnSetActive”,點其右側空白列表項出現向下箭頭,再點箭頭就在下面出現了“<Add>OnSetActive”的選項,選擇它就會自動在CSummandPage類中添加函數OnSetActive。
我們只需在OnSetActive函數體中添加相關代碼就可以實現添加“下一步”按鈕的效果了。新的函數體如下:
C++代碼
BOOL CSummandPage::OnSetActive() { // TODO: Add your specialized code here and/or call the base class // 獲得父窗口,即屬性表CPropertySheet類 CPropertySheet* psheet = (CPropertySheet*) GetParent(); // 設置屬性表只有“下一步”按鈕 psheet->SetWizardButtons(PSWIZB_NEXT); return CPropertyPage::OnSetActive(); }
為第二個和第三個對話框也分別添加屬性頁類CAddendPage和CAddPage。但第二個對話框的屬性頁不需要重載OnSetActive函數。第三個對話框是最后一個對話框,所以不需要“下一步”按鈕,而應該換成“完成”按鈕,所以也需要重載OnSetActive函數設置“完成”按鈕。重載后的OnSetActive如下:
C++代碼
BOOL CAddPage::OnSetActive() { // TODO: Add your specialized code here and/or call the base class // 獲得父窗口,即屬性表CPropertySheet類 CPropertySheet* psheet = (CPropertySheet*) GetParent(); //設置屬性表只有“完成”按鈕 psheet->SetFinishText(_T("完成")); return CPropertyPage::OnSetActive(); }
上面的代碼段中,字符串“完成”前加了個_T,這是因為本工程創建的時候用的默認的Unicode字符集,而如果“完成”前不加_T就是ASCII字符串。_T實際上是一個宏,工程的字符集選擇為Unicode時字符串就轉為Unicode字符串,選擇為Muli-Byte時就轉為ASCII字符串。我們可以在Solution Explorer的Addition根節點上點右鍵,在右鍵菜單上選擇“Properties”,彈出工程的屬性對話框,Configuration Properties->General右側列表中的Character Set就顯示選擇的字符集。
那點了第三個屬性頁上的“完成”按鈕我們想進行某些處理的話,就重載OnWizardFinish函數,方法同OnSetActive函數。重載后的OnWizardFinish函數如下:
C++代碼
BOOL CAddPage::OnWizardFinish() { // TODO: Add your specialized code here and/or call the base class // 提示向導完成 MessageBox(_T("使用說明向導已閱讀完!")); return CPropertyPage::OnWizardFinish(); }
3.創建屬性表類
屬性頁資源和屬性頁類創建完以后,還不能生成向導對話框,我們還需要一個屬性表類,來容納這些屬性頁。
在Solution Explorer視圖中的根節點“Addition”上點右鍵,在右鍵菜單中選擇Add->Class,彈出“Add Class”對話框,然后在中間區域中選擇“MFC Class”,點“Add”按鈕,彈出另一個類向導對話框,設置Class name為CAddSheet,Base class選擇“CPropertySheet”,點“Finish”按鈕,這樣就屬性表類就建好了。
接下來,在新生成的AddSheet.h中包含三個屬性頁類的頭文件:
#include "SummandPage.h"
#include "AddendPage.h"
#include "AddPage.h"
之后在AddSheet.h中添加private變量:
CSummandPage m_summandPage;
CAddendPage m_addendPage;
CAddPage m_addPage;
然后在AddSheet.cpp文件中修改CAddSheet的兩個構造函數為:
C++代碼
CAddSheet::CAddSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(nIDCaption, pParentWnd, iSelectPage) { // 添加三個屬性頁到屬性表 AddPage(&m_summandPage); AddPage(&m_addendPage); AddPage(&m_addPage); } CAddSheet::CAddSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage) { // 添加三個屬性頁到屬性表 AddPage(&m_summandPage); AddPage(&m_addendPage); AddPage(&m_addPage); }
4.顯示向導對話框
我們在加法計算器對話框上添加一個按鈕,點擊它就打開向導對話框。此按鈕的ID設為IDC_INSTRUCT_BUTTON,Caption屬性設為“使用說明”。
按照
C++代碼
到此,向導對話框就完整的創建完成了,并可以在加法計算器對話框上點“使用說明”按鈕顯示出來。我們來看看效果吧:
上圖只是被加數頁的效果,點其上“下一步”按鈕就可以繼續顯示后面的兩個頁面。
點擊獲取MFC開發中最全面界面控件套包Xtreme Toolkit Pro,讓你專注于功能,構建卓越GUI從“這”開始?。。?
更多往期內容:
本文轉載自:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
void CAdditionDlg::OnBnClickedInstructButton()
{
// TODO: Add your control notification handler code here
// 創建屬性表對象
CAddSheet sheet(_T(""));
// 設置屬性對話框為向導對話框
sheet.SetWizardMode();
// 打開模態向導對話框
sheet.DoModal();
}
標簽: