1. 程式人生 > >VS2010-MFC(對話框:屬性頁對話框及相關類的介紹)

VS2010-MFC(對話框:屬性頁對話框及相關類的介紹)

name sbt simple 兩個 點擊 pct dialog hang pos

轉自: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(對話框:屬性頁對話框及相關類的介紹)