VS2019/MFC編程入門之對話框:嚮導對話框的建立及顯示

上一講講了屬性頁對話框和相關的兩個類CPropertyPage類和CPropertySheet類,對使用屬性頁對話框作準備。本節將爲你們演示如何建立嚮導對話框。html

仍然之前面的「加法計算器」的例子爲基礎,在其中加入嚮導對話框,咱們能夠用它來講明加法計算器的使用方法,一步一步引導用戶操做,這也是比較常見的用法。編程

加法計算器使用時大概能夠分爲三步:輸入被加數、輸入加數、點「計算」按鈕。當功能實現了想要擁有美觀的界面能夠藉助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。ide

點擊下載Xtreme Toolkit Pro最新試用版函數

下面詳細說明嚮導對話框的建立步驟:工具

1.建立屬性頁對話框資源優化

根據建立對話框模板和修改對話框屬性中所講方法,在「Resource View」的Dialog」節點上點右鍵,而後在右鍵菜單中選擇「Insert Dialog」建立第一個對話框模板,對話框的ID屬性設置爲IDD_SUMMAND_PAGE,Caption屬性改成「被加數頁」,Style屬性在下拉列表中選擇「Child」,Border屬性在下拉列表中選擇「Thin」。url

刪除「OK」和「Cancel」按鈕,再按照爲對話框添加控件中所講方法,添加一個靜態文本框,並修改靜態文本框的Caption屬性爲「請先輸入double型被加數」。.net

按照上述步驟,繼續添加第二個和第三個對話框資源。第二個對話框模板的ID設爲IDD_ADDEND_PAGE,Caption屬性改成「加數頁」,也添加一個靜態文本框,Caption設爲「請繼續輸入double型加數」,其餘屬性同第一個對話框。第三個對話框模板的ID設爲IDD_ADD_PAGE,Caption屬性改成「計算頁」,添加靜態文本框的Caption屬性改成「最後請按下「計算」按鈕」,其餘屬性也第一個對話框同樣。code

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屬性設爲「使用說明」。

按照爲控件添加消息處理函數中所講方法,爲IDC_INSTRUCT_BUTTON按鈕在CAdditionDlg類中添加點擊消息的處理函數OnBnClickedInstructButton。而後在AdditionDlg.cpp文件中包含CAddSheet的頭文件:#include "AddSheet.h"。最後修改OnBnClickedInstructButton函數以下:

 

C++代碼

void CAdditionDlg::OnBnClickedInstructButton()
{
// TODO: Add your control notification handler code here
// 建立屬性表對象
CAddSheet sheet(_T(""));
// 設置屬性對話框爲嚮導對話框
sheet.SetWizardMode();
// 打開模態嚮導對話框
sheet.DoModal();
}

到此,嚮導對話框就完整的建立完成了,並能夠在加法計算器對話框上點「使用說明」按鈕顯示出來。咱們來看看效果吧:

上圖只是被加數頁的效果,點其上「下一步」按鈕就能夠繼續顯示後面的兩個頁面。

點擊獲取MFC開發中最全面界面控件套包Xtreme Toolkit Pro,讓你專一於功能,構建卓越GUI從「」開始!!!

更多往期內容:

本文轉載自:http://www.jizhuomi.com/software/166.html

相關文章
相關標籤/搜索