免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

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

開通VIP
CView類的使用

首先我們來(lái)寫一個(gè)例子:

1.建一個(gè)win32簡(jiǎn)單應(yīng)用程序,不要認(rèn)為這樣就不能寫出MFC程序,因?yàn)槭遣皇荕FC程序取決于調(diào)沒(méi)調(diào)MFC函數(shù)。

2. 刪除入口函數(shù),只留下#include "stdafx.h"

3.將stdafx.h中的頭文件 <windows.h> 更改為 <afxwin.h>。

4.Project-->Settings菜單項(xiàng)中設(shè)置使用MFC庫(kù)

5.編寫代碼

  1. #include "stdafx.h"  
  2. #include "resource.h"  
  3. //視圖類(創(chuàng)建方式與工具欄與工具欄步驟相似)  
  4. class CMyView:public CView  
  5. {  
  6. public:  
  7.     virtual void OnDraw( CDC* pDC );  
  8.     DECLARE_MESSAGE_MAP ()  
  9. protected:  
  10.     afx_msg void OnTest();  
  11.   
  12. };  
  13. BEGIN_MESSAGE_MAP(CMyView,CView)  
  14. ON_COMMAND(ID_TEST,OnTest)  
  15. END_MESSAGE_MAP()  
  16.   
  17. void CMyView::OnTest()  
  18. {  
  19.     MessageBox("CMView::OnTest");  
  20. }  
  21. void CMyView::OnDraw( CDC* pDC )  
  22. {  
  23.     pDC->TextOut(100,100,"Hello World!");  
  24. }  
  25. //框架窗口類  
  26. class CMainFrame :public CFrameWnd  
  27. {  
  28. public:  
  29. //  CMyView m_wndView;//視圖類對(duì)象  
  30.     CMyView*m_pWndView;//視圖類的指針  
  31.     DECLARE_MESSAGE_MAP()  
  32. protected:  
  33.     afx_msg int OnCreate( LPCREATESTRUCT lpCreateStruct );  
  34.       
  35. };  
  36. BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)  
  37. ON_WM_CREATE()  
  38. END_MESSAGE_MAP()  
  39.   
  40. int CMainFrame::OnCreate( LPCREATESTRUCT lpCreateStruct )   
  41. {  
  42.     if(-1==CFrameWnd::OnCreate(lpCreateStruct))//父類的  
  43.     {  
  44.         return -1;  
  45.     }  
  46.     //創(chuàng)建視圖窗口  
  47.     m_pWndView = new CMyView;//在堆中創(chuàng)建對(duì)象  
  48.     m_pWndView->Create(NULL,"MyView",WS_VISIBLE|WS_CHILD|WS_BORDER,CRect(0,0,100,100),  
  49.         this,AFX_IDW_PANE_FIRST);//AFX_IDW_PANE_FIRST可使邊框和客戶區(qū)重疊  
  50.     //將視圖設(shè)置為活動(dòng)視圖  
  51.     //方式1:調(diào)用函數(shù)    
  52.     //  SetActiveView(m_pWndView);  
  53.     //方式2:指針賦值  
  54.     m_pViewActive = m_pWndView;  
  55.   
  56.     return 0;  
  57. }  
  58. //應(yīng)用程序類  
  59. class CViewApp :public CWinApp  
  60. {  
  61. public:  
  62.     virtual BOOL InitInstance();  
  63.   
  64.   
  65. };  
  66. CViewApp theApp;//唯一的應(yīng)用程序?qū)ο?nbsp; 
  67. BOOL CViewApp::InitInstance()  
  68. {  
  69.     //創(chuàng)建基本的主框架窗口  
  70.     CMainFrame *pFrame = new CMainFrame;  
  71.     //創(chuàng)建窗口,內(nèi)部調(diào)用Create函數(shù)  
  72.     pFrame->LoadFrame(IDR_MENU1);//比Create函數(shù)用起來(lái)簡(jiǎn)單  
  73.     //將窗口設(shè)置為應(yīng)用程序主窗口  
  74.     m_pMainWnd = pFrame;  
  75.     //顯示和更新  
  76.     pFrame->ShowWindow(SW_SHOW);  
  77.     pFrame->UpdateData();  
  78.   
  79.     return TRUE;  
  80. }  
注意:

實(shí)例化CMyView對(duì)象前必須重寫OnDraw()函數(shù),因?yàn)镺nDraw()是純虛函數(shù)
        視圖窗口的創(chuàng)建是在CMainFrame的 OnCreate()函數(shù)中調(diào)Create函數(shù)

思考&提升:

1. 為什么非要使用視圖類的指針來(lái)?

 由于在CView::PostNcDestroy()函數(shù)中,調(diào)用了delete this;  所以,視圖對(duì)象的創(chuàng)建放到堆中,即new 對(duì)象,

2. 創(chuàng)建視圖時(shí),怎樣視圖鋪滿框架窗口的客戶區(qū)?

創(chuàng)建時(shí)視圖的ID填AFX_IDW_PANE_FIRST

3.  為什么要將視圖對(duì)象設(shè)置為框架窗口的活動(dòng)視圖?

因?yàn)?處理菜單等命令消息的先后順序: 活動(dòng)視圖->框架窗口->應(yīng)用程序。我們將對(duì)此進(jìn)行驗(yàn)證:在消息提示框那行加斷點(diǎn),調(diào)試運(yùn)行,我們通過(guò)調(diào)用堆棧得到下圖調(diào)用信息



菜單消息都屬于命令消息,所以我們找CFrameWnd 的 OnCmdMsg,雙擊進(jìn)入CFrameWnd::OnCmdMsg()中得到

  1. BOOL CFrameWnd::OnCmdMsg(UINT nID, int nCode, void* pExtra,  
  2.     AFX_CMDHANDLERINFO* pHandlerInfo)  
  3. {  
  4.     CPushRoutingFrame push(this);  
  5.   
  6.     // pump through current view FIRST  
  7.     CView* pView = GetActiveView();  
  8.     if (pView != NULL && pView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))  
  9.         return TRUE;  
  10.   
  11.     // then pump through frame  
  12.     if (CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))  
  13.         return TRUE;  
  14.   
  15.     // last but not least, pump through app  
  16.     CWinApp* pApp = AfxGetApp();  
  17.     if (pApp != NULL && pApp->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))  
  18.         return TRUE;  
  19.   
  20.     return FALSE;  
  21. }  

可以看出:處理菜單等命令消息的先后順序: 活動(dòng)視圖->框架窗口->應(yīng)用程序


4.OnPaintOnDraw之間的關(guān)系?

OnPaint調(diào)的是OnDraw。因?yàn)?/span>OnDraw函數(shù)比OnPaint更簡(jiǎn)單,不用添加消息映射所以視圖的信息顯示,直接在OnDraw函數(shù)中。



5.為什么不用框架窗口的客戶區(qū)顯示數(shù)據(jù),而非要用視圖窗口顯示?

框架窗口:就好像個(gè)容器,負(fù)責(zé)裝各種各樣的子窗口
視圖窗口:是一種子窗口,父類是框架窗口,負(fù)責(zé)顯示數(shù)據(jù)。這樣做是因?yàn)楫?dāng)應(yīng)用程序比較復(fù)雜時(shí),我們希望一個(gè)類去做一件事


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VC++對(duì)話框程序打印及打印預(yù)覽的實(shí)現(xiàn)
MFC窗口銷毀過(guò)程
mfc中cview類有什么作用?
MFC單文檔程序架構(gòu)解析
框架、文檔、視圖類之間的調(diào)用關(guān)系
MFC一些小總結(jié)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服