屬性頁對(duì)話框
分類
標(biāo)簽式和向?qū)?/p>
相關(guān)類
CPropertyPage-父類是CDialog類,稱為屬性頁或頁面對(duì)話框。
CPropertySheet-父類是CWnd,稱為屬性表單。
一個(gè)完整的屬性頁對(duì)話框由一個(gè)屬性表單+多個(gè)屬性頁組成。屬性頁嵌套在屬性表單內(nèi)。
標(biāo)簽式屬性頁的創(chuàng)建步驟:
1 插入屬性頁對(duì)話框資源,選中對(duì)話框資源ID修改語言為Chinese(P.R.C), 選中資源視圖的右邊的對(duì)話框右鍵選擇屬性設(shè)置為宋體,9號(hào)字體,雙擊資源,生成相應(yīng)的類,注意父類選擇CPropertyPage類。
2 右擊工程,選擇添加新的類,父類是CPropertySheet類。
3 在表單類中添加屬性頁對(duì)象。在構(gòu)造函數(shù)中,
CPropertySheet::AddPage
4 創(chuàng)建和顯示屬性頁
CPropertySheet::DoModal()
5 當(dāng)控件的值發(fā)生改變時(shí),將應(yīng)用按鈕設(shè)置為可用
CPropertyPage::SetModified(TRUE);
6 消息處理(通過在頁面類中添加虛函數(shù)的方式實(shí)現(xiàn))
CPropertyPage::OnApply
CPropertyPage::OnOK
CPropertyPage::OnCancel
新建一個(gè)MFC當(dāng)文檔應(yīng)用程序,為菜單添加一個(gè)菜單項(xiàng),在該菜單項(xiàng)的點(diǎn)擊處理函數(shù)中彈出我們的屬性頁對(duì)話框。
為了演示效果,在視圖類的OnDraw函數(shù)中創(chuàng)建畫筆,然后繪制一個(gè)圖形,畫筆的線寬和顏色由其成員變量m_nWidth和m_color決定,這里正是在屬性頁對(duì)話框中設(shè)置線寬和顏色然后作用到上面繪制的圖形上。
為視圖類添加兩個(gè)成員變量:
并在視圖類的構(gòu)造函數(shù)中初始化
視圖的OnDraw添加繪圖代碼如下:
添加菜單項(xiàng)
插入對(duì)話框資源,注意選擇PROPPAGE類型的對(duì)話框資源
選中對(duì)話框資源,右鍵更改語言為P.R.C
然后在資源視圖右邊窗口選中對(duì)話框資源右鍵屬性修改字體為宋體9號(hào):
復(fù)制一個(gè)剛才我們新建的并且調(diào)整好語言和字體的對(duì)話框
注意:其中一個(gè)為線寬設(shè)置對(duì)話框,給它添加一個(gè)編輯框控件用以輸入數(shù)值
另外一個(gè)為顏色設(shè)置對(duì)話框,給它添加一個(gè)按鈕,點(diǎn)擊按鈕彈出顏色對(duì)話框
雙擊他們通過類向?qū)上鄳?yīng)的類,注意選擇父類為CpropertyPage
這里分別命名為:CPage1和CPage2
Ctrl+W為線寬設(shè)置對(duì)話框的編輯框控件綁定一個(gè)int類型的值變量:m_nLineWidth并設(shè)置其范圍為: 1 –20,并在其構(gòu)造函數(shù)中初始化為1。
在工程上右鍵選擇New Class 注意選擇父類為CpropertySheet, 這里類名我設(shè)置為:ClabelSheet,然后為該類添加兩個(gè)成員變量:
然后在ClabelSheet的兩個(gè)構(gòu)造函數(shù)中都添加屬性頁(這樣無論調(diào)用哪個(gè)都可以正確添加):
注意包含:Page1.h 和Page2.h頭文件
Ctrl+W為視圖類添加菜單的命令消息響應(yīng)函數(shù),添加如下創(chuàng)建標(biāo)簽式屬性頁的代碼:
注意包含:LabelSheet.h頭文件
為了使當(dāng)用戶輸入數(shù)據(jù)時(shí)讓屬性頁對(duì)話框上的應(yīng)用按鈕變?yōu)榭捎脿顟B(tài),為線寬設(shè)置對(duì)話庫類CPage1的編輯框控件添加EN_CHANGE消息響應(yīng)函數(shù),當(dāng)編輯框內(nèi)容一旦改變將觸發(fā)該消息,
消息響應(yīng)函數(shù)如下:
為了在用戶點(diǎn)擊應(yīng)用按鈕時(shí)把用戶的設(shè)置反應(yīng)在視圖類的窗口繪圖上,我們需要響應(yīng)應(yīng)用按鈕的消息,然而我們無法直接通過雙擊應(yīng)用按鈕位它添加消息,正確的做法是通過添加虛函數(shù)的方式,此外還有確定, 下一步,等一切屬性頁對(duì)話框上的按鈕事件都是虛函數(shù)。
那么這里我給CPage1添加一個(gè)虛函數(shù)OnApply來響應(yīng)”應(yīng)用”按鈕事件
并添加如下代碼來影響視圖窗口圖形的繪制:
這個(gè)時(shí)候編譯會(huì)包一些錯(cuò)誤發(fā)現(xiàn)是一些頭文件包含問題
首先在Page1中包含MFCLabelView.h
然后在MFCLabelView中包含MFCLabelDoc.h
再編譯就Ok了,設(shè)置線寬后點(diǎn)應(yīng)用按鈕在視圖窗口中可以看到效果。
回到CPage2類的對(duì)話框資源對(duì)話框,雙擊“設(shè)置顏色”按鈕添加響應(yīng)事件,編寫如下代碼:
聯(lián)系客服