VS2010-MFC(對話框:屬性頁對話框及相關類的介紹)
轉自:http://www.jizhuomi.com/software/164.html
一 屬性頁對話框的分類
屬性頁對話框想必大家並不陌生,XP系統中桌面右鍵點屬性,彈出的就是屬性頁對話框,它通過標簽切換各個頁面。另外,我們在創建MFC工程時使用的向導對話框也屬於屬性頁對話框,它通過點擊“Next”等按鈕來切換頁面。
屬性頁對話框就是包含一般屬性頁對話框和向導對話框兩類。它將多個對話框集成於一身,通過標簽或按鈕來切換頁面。
二 屬性頁對話框相關類
我們使用屬性頁對話框時,用到的類主要有兩個:CPropertyPage類和CPropertySheet
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”按鈕被單擊的消息,僅在向導對話框中有效
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:要刪除的屬性頁的索引。
屬性對話框和相關的兩個類就先介紹到這,主要是為後面使用屬性頁對話框做準備。
VS2010-MFC(對話框:屬性頁對話框及相關類的介紹)