前面講了模態對話框非模態對話框,本節開始雞啄米講一種特殊的對話框--屬性頁對話框。另外,本套教程所講大部分對VC++各個版本均可適用或者稍作修改即可,但考慮到終究還是基于VS2010版本的,所以將《VC++/MFC編程入門》改為《VS2010/MFC編程入門》。

       屬性頁對話框的分類

       屬性頁對話框想必大家并不陌生,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”按鈕被單擊的消息,僅在向導對話框中有效

VS2010/MFC編程入門之十三(對話框:屬性頁對話框及相關類的介紹)

       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:要刪除的屬性頁的索引。

       屬性對話框和相關的兩個類雞啄米就先介紹到這,主要是為后面使用屬性頁對話框做準備。有問題可以到雞啄米博客交流。謝謝。

除非特別注明,雞啄米文章均為原創
轉載請標明本文地址:http://www.ojizl5.fun/software/164.html
2012年4月21日
作者:雞啄米 分類:軟件開發 瀏覽: 評論:29