国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
MFC屬性頁對(duì)話框
分類: VC++ 2014-08-05 09:03 426人閱讀 評(píng)論(0) 收藏 舉報(bào)

屬性頁對(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è)成員變量:

  1. int         m_nWitdh;// 線寬  
  2.   
  3. COLORERF  m_color;  //  顏色  

并在視圖類的構(gòu)造函數(shù)中初始化

  1. m_nWidth = 1;  
  2.   
  3. m_color = RGB (0, 0, 0);  

視圖的OnDraw添加繪圖代碼如下:

  1. void CMFCLabelView::OnDraw(CDC* pDC)  
  2. {  
  3.     CMFCLabelDoc* pDoc = GetDocument();  
  4.     ASSERT_VALID(pDoc);  
  5.     // TODO: add draw code for native data here  
  6.   
  7.     CPen pen;  
  8.     pen.CreatePen (PS_SOLID, m_nWidth, m_color);  
  9.     CPen *pOldPen = pDC->SelectObject (&pen);  
  10.     pDC->Ellipse (100, 100, 400, 400);  
  11.     pDC->SelectObject (pOldPen);  
  12.     pen.DeleteObject ();  
  13. }  

添加菜單項(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è)成員變量:

  1. CPage1 m_page1;  
  2.   
  3. CPage2 m_page2;   

然后在ClabelSheet的兩個(gè)構(gòu)造函數(shù)中都添加屬性頁(這樣無論調(diào)用哪個(gè)都可以正確添加):

  1. AddPage (&m_page1);  
  2.   
  3. AddPage (&m_page2);  

注意包含: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ù)如下:

  1. void CPage1::OnChangeEditLinewidth()   
  2. {  
  3.     // 設(shè)置應(yīng)用按鈕為可用狀態(tài)  
  4.     SetModified (TRUE);  
  5. }  

為了在用戶點(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)用”按鈕事件

并添加如下代碼來影響視圖窗口圖形的繪制:

  1. BOOL CPage1::OnApply()   
  2. {  
  3.     // TODO: Add your specialized code here and/or call the base class  
  4.     // 從控件接收數(shù)據(jù)到變量  
  5.     UpdateData (TRUE);  
  6.     // 獲取視圖類對(duì)象指針  
  7.     CMFCLabelView *pView = (CMFCLabelView*)(((CFrameWnd*)AfxGetMainWnd ())->GetActiveView ());  
  8.     // 改變視圖類的線寬  
  9.     pView->m_nWidth = m_nLineWidth;  
  10.     // 使視圖窗口重繪  
  11.     pView->Invalidate ();  
  12.     return CPropertyPage::OnApply();  
  13. }  

這個(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)事件,編寫如下代碼:

  1. #include "MFCLabelView.h"  
  2. void CPage2::OnBtnSetcolor()   
  3. {  
  4.     // TODO: Add your control notification handler code here  
  5.     CColorDialog dlg;  
  6.     if (IDCANCEL == dlg.DoModal ())  
  7.         return;  
  8.     CMFCLabelView *pView = (CMFCLabelView*)(((CFrameWnd*)AfxGetMainWnd ())->GetActiveView ());  
  9.     pView->m_color = dlg.GetColor ();  
  10.     pView->Invalidate ();  
  11. }  

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VS2010/MFC編程入門之十三(對(duì)話框:屬性頁對(duì)話框及相關(guān)類的介紹)
VS2008?MFC如何做屬性頁
【新手教程】如何將屬性表嵌入對(duì)話框中顯示
MFC屬性頁使用說明
Visual C .NET編程講座之五
在vs2008 vc++ 中添加mfc中消息處理函數(shù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服