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