MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
前面講了模態(tài)對話框和非模態(tài)對話框,本節(jié)來將一種特殊的對話框——屬性頁對話框。
屬性頁對話框的分類
屬性頁對話框想必大家并不陌生,XP系統(tǒng)中桌面右鍵點屬性,彈出的就是屬性頁對話框,它通過標簽切換各個頁面。另外,我們在創(chuàng)建MFC工程時使用的向導對話框也屬于屬性頁對話框,他通過點擊“Next”等按鈕來切換頁面。另外,我們在創(chuàng)建MFC工程時使用的向導對話框也屬于屬性對話框,它通過點擊“Next”等按鈕來切換頁面。
屬性頁對話框就是包含一般屬性頁對話框和向導對話框兩類。它將多個對話框集成于一身,通過標簽或按鈕來切換頁面。
屬性頁對話框相關類
我們使用屬性頁對話框時,用到的類主要有兩個:CPropertyPage類和CpropertySheet類。
1、CPropertyPage類
CPropertyPage類繼承自CDialog類,它被用于處理某單個的屬性頁,所以要為每個屬性頁都創(chuàng)建一個繼承自CPropertyPage的子類。大家可以在VS2010的MSDN中查找CPropertyPage類以及它的成員的詳細說明。下面為大家講解MSDN中列出的CPropertyPage類的部分主要成員函數(shù)。
(1)構造函數(shù)
這里講三個CPropertyPage類的構造函數(shù),函數(shù)原型為:
CPropertyPage();
explicit CPropertyPage(
UINT nIDTemplate,
UINT nIDCaption = 0,
DWORD dwSize = sizeof(PROPSHEETPAGE)
);
explicit CPropertyPage(
LPCTSTR lpszTemplateName,
UINT nIDCaption = 0,
DWORD dwSize = sizeof(PROPSHEETPAGE)
);
第一個是沒有任何參數(shù)的構造函數(shù)。
第二個構造函數(shù)中,參數(shù)nIDTemplate是屬性頁的對話框資源ID,參數(shù)nIDCaption是屬性頁對話框選項卡的標題所用字符串資源的ID,若設為0,則選項卡標題就使用該屬性頁的對話框資源的標題。
第三個構造函數(shù)中,參數(shù)lpszTemplateName為屬性頁的對話框資源的名稱字符串,不能為NULL。參數(shù)nIDCaption同上。
(2)CancelToClose()函數(shù)
在模態(tài)屬性對話框的屬性頁進行了某不可恢復的操作后,使用CancelToClose()函數(shù)將"OK"按鈕改為“Close”按鈕,并禁用“Cancel”按鈕。函數(shù)原型為:
void CancelToClose();
(3)SetModified()函數(shù)
調用此函數(shù)可激活或禁用"Apply"按鈕,函數(shù)原型為:
void SetModified(BOOL bChanged = TRUE);
(4)可重載函數(shù)
CPropertyPage類提供了一些消息處理函數(shù),來響應屬性頁對話框的各種消息。我們重載這些消息處理函數(shù),就可以自定義對屬性頁對話框操作的處理。可重載的消息處理函數(shù)包括:
OnApply: 處理屬性頁的"Apply"按鈕被單擊的消息
OnCancel: 處理屬性頁的"Cancel"按鈕被單擊的消息
OnKillActive: 處理屬性頁當前活動狀態(tài)被切換的消息,常用于數(shù)據(jù)驗證
OnOk:處理屬性頁的"OK"按鈕、“Apply”按鈕或者“Close”按鈕被單擊的消息
OnQueryCancel:處理屬性頁的"Cancel"按鈕被單擊前發(fā)出的消息
OnReset:處理屬性頁的“Reset”按鈕被單機的消息
OnSetActive:處理屬性頁被切換為當前活動頁的消息
OnWizardBack: 處理屬性頁的“上一步”按鈕被單擊的消息,僅在向導對話框中有效
OnWizardFinish:處理屬性頁的"完成"按鈕被單擊的消息,僅在向導對話框中有效
OnWizardNext: 處理屬性頁的“下一步”按鈕被單擊的消息,僅在向導對話框中有效
2、CpropertySheet類
CPropertySheet類繼承自CWnd類,它是屬性列表,負責加載、打開或刪除屬性頁,并可以在屬性頁對話框中切換屬性頁。它跟對話框類似,也有模態(tài)和非模態(tài)兩種。下面就來講解CPropertySheet類的部分成員函數(shù)。
(1)構造函數(shù)
這里依然列出CPropertySheet類的三個構造函數(shù):
CPropertySheet();
explicit CPropertySheet(
UINT nIDCaption,
CWnd *pParentWnd = NULL,
UINT iSelectPage = 0
);
explicit CPropertySheet(
LPCTSTR pszCaption,
CWnd * pParentWnd = NULL,
UINT iSelectPage = 0
);
參數(shù)nIDCaption:標題的字符串資源的ID。
參數(shù)pParentWnd:屬性頁對話框的父窗口,若設為NULL,則父窗口為應用程序的主窗口。
參數(shù)iSelectPage:初始狀態(tài)時,活動屬性頁的索引,默認為第一個添加到屬性表的屬性頁。
參數(shù)pszCaption:標題字符串。
(2)GetActiveIndex()函數(shù)
獲取當前活動屬性頁的索引。函數(shù)原型為:
int GetActiveIndex() const;
返回值:當前活動屬性頁的索引。
(3)GetActivePage()函數(shù)
獲取當前活動屬性頁對象。函數(shù)原型為:
CPropertyPage *GetActivePage() const;
返回值:當前活動屬性頁對象的指針。
(4)GetPage()函數(shù)
獲取某個屬性頁對象。函數(shù)原型為:
CPropertyPage * GetPage(int nPage) const;
參數(shù)nPage:目標屬性頁的索引。
返回值:目標屬性頁對象的指針。
(5)GetPageCount()函數(shù)
獲取屬性頁的數(shù)量。函數(shù)原型為:
int GetPageCount() const;
返回值:屬性頁的數(shù)量。
(6)GetPageIndex()函數(shù)
獲取某屬性頁在屬性頁對話框中的索引。函數(shù)原型為:
int GetPageIndex(CPropertyPate *pPage);
參數(shù)pPage:要獲取索引的屬性頁對象的指針。
返回值:屬性頁對象在屬性頁對話框中的索引。
(7)SetActivePage()函數(shù)
設置某個屬性頁為活動屬性頁。函數(shù)原型為:
BOOL SetActivePage(int nPage);
BOOL SetActivePage(CPropertyPage *pPage);
參數(shù)nPage:要設置為活動屬性頁的索引。
參數(shù)pPage:要設置為活動屬性頁的對象指針。
(8)SetWizardButtons()函數(shù)
在向導對話框上啟用或禁用Back、Next或Finish按鈕,應在調用DoModal之前調用此函數(shù)。函數(shù)原型為:
void SetWizardButtons(
DWORD dwFlags
);
參數(shù)dwFlags:設置向導按鈕的外觀和功能屬性。可以是以下值的組合:
PSWIZB_BACK 啟用“Back”按鈕,如果不包含此值則禁用"Back"按鈕。
PSWIZB_NEXT 啟用"Next"按鈕,如果不包含此值則禁用"Next"按鈕。
PSWIZB_FINISH 啟用"Finish"按鈕。
PSWIZB_DISABLEDFINISH 顯示禁用的"Finish"按鈕。
(9)SetWizardMode()函數(shù)
設置屬性頁對話框為導向對話框模式,應在調用DoModal之前調用此函數(shù)。函數(shù)原型為:
void SetWizardMode();
(10)SetTitle()函數(shù)
設置屬性對話框的標題。函數(shù)原型為:
void SetTitle(
LPCTSTR lpszText,
UINT nStyle = 0
);
參數(shù)lpszText:標題字符串。
參數(shù)nStyle:指定屬性表標題的風格。應當為0或PSH_PROPTITLE。如果為PSH_PROPTITLE,則單詞"Properties"會出現(xiàn)在指定標題之后。例如SetTitle("Simple", PSH_PROPTITLE)這種調用會使得屬性表標題為"Simple Properties"。
(11)AddPage()函數(shù)
為屬性對話框添加新的屬性頁。函數(shù)原型為:
void AddPage(
CPropertyPage *pPage
);
參數(shù)pPage:要添加的新的屬性頁的對象指針。
(12)PressButton()函數(shù)
模擬按下某指定的按鈕。函數(shù)原型為:
void PressButton(
int nButton
);
參數(shù)nButton:要模擬按下的按鈕,它可以是下列值之一:
PSBTN_BACK 選擇“Back”按鈕
PSBTN_NEXT? 選擇"Next"按鈕
PSBTN_FINISH 選擇"Finish"按鈕
PSBTN_OK 選擇“OK”按鈕
PSBTN_APPLYNOW 選擇"Apply"按鈕
PSBTN_CANCEL 選擇"Cancel"按鈕
PSBTN_HELP 選擇“幫助”按鈕
(13)RemovePage()函數(shù)
void RemovePage(
CPropertyPage *pPage
);
void RemovePage(
int nPage
);
參數(shù)pPage:要刪除的屬性頁的對象指針。
參數(shù)nPage:要刪除的屬性頁的索引。
?
轉載于:https://www.cnblogs.com/mupiaomiao/p/6208352.html
總結
以上是生活随笔為你收集整理的MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis开发与运维之第八章理解内存(四
- 下一篇: mynt product model: