文章目錄
- 九、屬性頁對話框的類`CPropertyPage`類 和 `CPropertySheet` 類。
- 9.1 CPropertyPage 類
- (1)構造函數
- (2)CancelToClose()函數
- (3)SetModified()函數
- (4)可重載函數
- 9.2 CPropertySheet類
- (1)構造函數
- (2)GetActiveIndex()函數
- (3)GetActivePage()函數
- (4)GetPage()函數
- (5)GetPageCount()函數
- (6)GetPageIndex()函數
- (7)SetActivePage()函數
- (8)SetWizardButtons()函數
- (9)SetWizardMode()函數
- (10)SetTitle()函數
- (11)AddPage()函數
- (12)PressButton()函數
- (13)RemovePage()函數
九、屬性頁對話框的類CPropertyPage
類 和 CPropertySheet
類。
屬性頁對話框的分類
屬性頁對話框想必大家并不陌生,XP系統中桌面右鍵點屬性,彈出的就是屬性頁對話框,它通過標簽切換各個頁面。另外,我們在創建MFC工程時使用的向導對話框也屬于屬性頁對話框,它通過點擊“Next”等按鈕來切換頁面。
屬性頁對話框就是包含一般屬性頁對話框和向導對話框兩類。它將多個對話框集成于一身,通過標簽或按鈕來切換頁面。
我們使用屬性頁對話框時,用到的類主要有兩個:CPropertyPage
類 和 CPropertySheet
類。
CMFCPropertySheet和CMFCPropertyPage都是vs08sp1以后引入的新類,擴充了已有的CPropertySheet和CPropertyPage這兩個類。
9.1 CPropertyPage 類
CPropertyPage類繼承自CDialog類,它被用于處理某單個的屬性頁,所以要為每個屬性頁都創建一個繼承自CPropertyPage的子類。大家可以在VS2010的MSDN中查找CPropertyPage類以及它的成員的詳細說明。下面就為大家講解MSDN中列出的CPropertyPage類的部分主要成員函數。
(1)構造函數
這里講三個CProperty類的構造函數,函數原型為:
CPropertyPage( );
explicit CPropertyPage(UINT nIDTemplate,UINT nIDCaption = 0,DWORD dwSize = sizeof(PROPSHEETPAGE));
explicit CPropertyPage(LPCTSTR lpszTemplateName,UINT nIDCaption = 0,DWORD dwSize = sizeof(PROPSHEETPAGE));
-
第一個是沒有任何參數的構造函數。
-
第二個構造函數中,參數nIDTemplate是屬性頁的對話框資源ID,
- 參數nIDCaption是屬性頁對話框選項卡的標題所用字符串資源的ID,若設為0,則選項卡標題就使用該屬性頁的對話框資源的標題。
-
第三個構造函數中,參數lpszTemplateName為屬性頁的對話框資源的名稱字符串,不能為NULL。參數nIDCaption同上。
(2)CancelToClose()函數
在模態屬性頁對話框的屬性頁進行了某不可恢復的操作后,使用CancelToClose() 函數
將“OK”按鈕改為“Close”按鈕,并禁用“Cancel”按鈕。函數原型為:
void CancelToClose( );
(3)SetModified()函數
調用此函數可激活或禁用“Apply”按鈕,函數原型為:
void SetModified(BOOL bChanged = TRUE);
(4)可重載函數
CPropertyPage類提供了一些消息處理函數,來響應屬性頁對話框的各種消息。
我們重載這些消息處理函數,就可以自定義對屬性頁對話框操作的處理。
可重載的消息處理函數包括:
OnApply:處理屬性頁的“Apply”按鈕被單擊的消息OnCancel:處理屬性頁的“Cancel”按鈕被單擊的消息OnKillActive:處理屬性頁當前活動狀態被切換的消息,常用于數據驗證OnOK:處理屬性頁的“OK”按鈕、“Apply”按鈕或者“Close”按鈕被單擊的消息OnQueryCancel:處理屬性頁的“Cancel”按鈕被單擊前發出的消息OnReset:處理屬性頁的“Reset”按鈕被單擊的消息OnSetActive:處理屬性頁被切換為當前活動頁的消息OnWizardBack:處理屬性頁的“Back”按鈕被單擊的消息,僅在向導對話框中有效OnWizardFinish:處理屬性頁的“Finish”按鈕被單擊的消息,僅在向導對話框中有效OnWizardNext:處理屬性頁的“Next”按鈕被單擊的消息,僅在向導對話框中有效
9.2 CPropertySheet類
CPropertySheet類繼承自CWnd類,它是屬性表類,負責加載、打開或刪除屬性頁,并可以在屬性頁對話框中切換屬性頁。它跟對話框類似,也有模態和非模態兩種。下面就講解CPropertySheet類的部分成員函數。
(1)構造函數
這里依然列出CPropertySheet類的三個構造函數:
CPropertySheet( );
explicit CPropertySheet(UINT nIDCaption,CWnd* pParentWnd = NULL,UINT iSelectPage = 0);
explicit CPropertySheet(LPCTSTR pszCaption,CWnd* pParentWnd = NULL,UINT iSelectPage = 0);
-
參數 nIDCaption: 標題的字符串資源的ID。
-
參數 pParentWnd: 屬性頁對話框的父窗口,若設為NULL,則父窗口為應用程序的主窗口。
-
參數 iSelectPage: 初始狀態時,活動屬性頁的索引,默認為第一個添加到屬性表的屬性頁。
-
參數 pszCaption: 標題字符串。
(2)GetActiveIndex()函數
獲取當前活動屬性頁的索引。函數原型為:
int GetActiveIndex( ) const;
- 返回值:當前活動屬性頁的索引。
(3)GetActivePage()函數
獲取當前活動屬性頁對象。函數原型為:
CPropertyPage* GetActivePage( ) const;
- 返回值:當前活動屬性頁對象的指針。
(4)GetPage()函數
獲取某個屬性頁對象。函數原型為:
CPropertyPage* GetPage(int nPage) const;
-
參數nPage: 目標屬性頁的索引。
-
返回值: 目標屬性頁對象的指針。
(5)GetPageCount()函數
獲取屬性頁的數量。函數原型為:
int GetPageCount( ) const;
- 返回值:屬性頁的數量。
(6)GetPageIndex()函數
獲取某屬性頁在屬性頁對話框中的索引。函數原型為:
int GetPageIndex(CPropertyPage* pPage);
-
參數pPage: 要獲取索引的屬性頁對象的指針。
-
返回值: 屬性頁對象在屬性頁對話框中的索引。
(7)SetActivePage()函數
設置某個屬性頁為活動屬性頁。函數原型為:
BOOL SetActivePage(int nPage);BOOL SetActivePage(CPropertyPage* pPage);
-
參數 nPage: 要設置為活動屬性頁的索引。
-
參數 pPage: 要設置為活動屬性頁的對象指針。
(8)SetWizardButtons()函數
在向導對話框上啟用或禁用Back、Next或Finish按鈕,應在調用DoModal之前調用此函數。
函數原型為:
void SetWizardButtons(DWORD dwFlags);
參數dwFlags:設置向導按鈕的外觀和功能屬性。可以是以下值的組合:
PSWIZB_BACK 啟用“Back”按鈕,如果不包含此值則禁用“Back”按鈕。PSWIZB_NEXT 啟用“Next”按鈕,如果不包含此值則禁用“Next”按鈕。PSWIZB_FINISH 啟用“Finish”按鈕。PSWIZB_DISABLEDFINISH 顯示禁用的“Finish”按鈕。
(9)SetWizardMode()函數
設置屬性頁對話框為向導對話框模式,應在調用DoModal之前調用此函數。函數原型為:
void SetWizardMode( );
(10)SetTitle()函數
設置屬性對話框的標題。函數原型為:
void SetTitle(LPCTSTR lpszText,UINT nStyle = 0);
-
參數lpszText:標題字符串。
-
參數nStyle:指定屬性表標題的風格。應當為 0 或 PSH_PROPTITLE。
如果設為PSH_PROPTITLE,則單詞“Properties”會出現在指定標題之后。
例如,SetTitle(“Simple”,PSH_PROPTITLE)這種調用會使得屬性表標題為 “Simple Properties”。
(11)AddPage()函數
為屬性對話框添加新的屬性頁。函數原型為:
void AddPage(CPropertyPage *pPage);
- 參數pPage:要添加的新的屬性頁的對象指針。
(12)PressButton()函數
模擬按下某指定的按鈕。函數原型為:
void PressButton(int nButton);
- 參數nButton:要模擬按下的按鈕,它可以是下列值之一:
PSBTN_BACK 選擇“Back”按鈕。PSBTN_NEXT 選擇“Next”按鈕。PSBTN_FINISH 選擇“Finish”按鈕。PSBTN_OK 選擇“OK”按鈕。PSBTN_APPLYNOW 選擇“Apply”按鈕。PSBTN_CANCEL 選擇“Cancel”按鈕。PSBTN_HELP 選擇“幫助”按鈕。
(13)RemovePage()函數
刪除某屬性頁。函數原型為:
void RemovePage(CPropertyPage *pPage);
void RemovePage(int nPage);
-
參數pPage:要刪除的屬性頁的對象指針。
-
參數nPage:要刪除的屬性頁的索引。
屬性對話框和相關的兩個類就先介紹到這,主要是為后面使用屬性頁對話框做準備。