色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mfc中cview類有什么作用

mfc中cview類有什么作用?

cview類是負(fù)責(zé)每個(gè)軟件系統(tǒng)向顯示器輸出各種信息流以及控制處理的類,但是它不負(fù)責(zé)物理層的輸出操作,因?yàn)閣indows是一個(gè)具有與設(shè)備無關(guān)性的操作系統(tǒng),cview類同過相應(yīng)一系列傳送給他的一些列消息,通過自已的一系列函數(shù)與之相映射,然后將消息傳送給專門用來描述輸出設(shè)備的CDC對象來完成顯示信息的。。。 具體的封裝函數(shù)太多了介紹幾個(gè)重要的,具體的可以去查msdn。 關(guān)聯(lián)文檔對象 視圖需要表示文檔數(shù)據(jù),所以文檔對象與視圖對象必須建立關(guān)聯(lián)。這樣,當(dāng)文檔數(shù)據(jù)發(fā)生變化時(shí),它可以及時(shí)通知視圖;當(dāng)視圖需要顯示不同的文檔數(shù)據(jù)時(shí),它可以從文檔對象中提取。 在文檔/視圖框架程序中,文檔對象總是在視圖之前建立,而在視圖的WM_CREATE消息處理函數(shù)中,建立了它與文檔對象的關(guān)聯(lián)。代碼如下: Int CView::OnCreate (LPCREATESTRUCT lpcs) { if (CWnd::OnCreate(lpcs) == -1) return -1; // m_pDocuemnt視圖成員,用于存儲相應(yīng)文檔對象的指針,此時(shí)為空 ASSERT(m_pDocument == NULL); CCreateContext* pContext = (CCreateContext*)lpcs->lpCreateParams; // pContext->m_pCurrentDoc是已經(jīng)建立的文檔對象的指針 if (pContext != NULL && pContext->m_pCurrentDoc != NULL) { // 將當(dāng)前視圖加入文檔對象的視圖列表中,因?yàn)橐粋€(gè)文檔可關(guān)聯(lián)多個(gè)視圖 pContext->m_pCurrentDoc->AddView(this); /* 在文檔的AddView()函數(shù)中,已經(jīng)將當(dāng)前文檔對象指針賦給m_pDocument視圖成員。這樣,在視圖建立之初,二者就建立了關(guān)聯(lián)。*/ ASSERT(m_pDocument != NULL); } else { TRACE(“Warning: Creating a pane with no CDocument.\n”); } return 0; // ok } 同時(shí),視圖類定義了成員函數(shù)GetDocument(),返回文檔對象的指針。代碼如下: CDocument* CView::GetDocument() const { ASSERT(this != NULL); return m_pDocument; } 視圖總是在文檔對象之前銷毀,在視圖的析構(gòu)函數(shù)中,與文檔對象解除關(guān)聯(lián)。代碼如下: CView::~CView() { if (m_pDocument != NULL) m_pDocument->RemoveView(this); } 編輯本段視圖的繪制 窗口的繪制工作總是在WM_PAINT消息處理中進(jìn)行的,當(dāng)窗口需要繪制時(shí),它會收到系統(tǒng)發(fā)來的WM_PAINT消息。在繪制過程中,首先要準(zhǔn)備顯示設(shè)備句柄,最后要釋放句柄。眾所周知,在視圖窗口中繪制,無需重載WM_PAINT消息處理函數(shù)OnPaint(),因?yàn)橛幸粋€(gè)更加友好的繪制新口:OnDraw()。該函數(shù)的實(shí)參是一個(gè)已經(jīng)準(zhǔn)備好的顯示設(shè)備,最后無需釋放。其實(shí),這一切還是WM_PAINT消息處理函數(shù)OnPaint()為我們準(zhǔn)備的,代碼如下: void CView::OnPaint() { // CPaintDC類維護(hù)顯示設(shè)備 CPaintDC dc(this); OnPrepareDC(&dc); OnDraw(&dc); } OnPrepareDC()是一個(gè)虛擬函數(shù),它總是在OnDraw()之前執(zhí)行,可以重載它,設(shè)置繪圖模式。因?yàn)镺nDraw()每次執(zhí)行,都使用不同的CPaintDC對象,所以本次繪圖模式的狀態(tài)不能保留到下一次。 OnDraw()在視圖基類CView中定義為純虛函數(shù)。例如: virtual void OnDraw(CDC* pDC) = 0; 所以CView是抽象基類,不能實(shí)例化,而派生類必須重載OnDraw()。 編輯本段虛函數(shù) OnUpdate 當(dāng)文檔數(shù)據(jù)發(fā)生變化時(shí),文檔對象調(diào)用CDocument::UpdateAllView()通知所有視圖,作為響應(yīng),視圖的OnUpdate()成員被調(diào)用。所以,重載的OnUpdate()應(yīng)該能夠根據(jù)需要,將文檔數(shù)據(jù)的變化反映在視圖中。CView::OnUpdate()只是簡單地使客戶區(qū)無效,導(dǎo)致客戶區(qū)重畫。例如: void CView::OnUpdate(CView* pSender, LPARAM, CObject*) { ASSERT(pSender != this); UNUSED(pSender); // unused in release builds Invalidate(TRUE); } 編輯本段虛函數(shù) OnInitialUpdate() 在初始創(chuàng)建、調(diào)用OnCreate()之后,或者在File/New、File/Open命令后被框架調(diào)用?;怌View::OnInitialUpdate()只是簡單地調(diào)用OnUpdate(),可以重載它完成初始化工作。但注意,它可能被多次調(diào)用。 void CView::OnInitialUpdate() { OnUpdate(NULL, 0, NULL); } 編輯本段虛函數(shù) CalcWindowRect 每當(dāng)主框架窗口的客戶區(qū)尺寸發(fā)生變化或控制條的位置發(fā)生變化,需要重新排列客戶區(qū)時(shí),調(diào)用該函數(shù),根據(jù)視圖客戶區(qū)尺寸計(jì)算視圖窗口的尺寸。 我們知道,排列主窗口客戶區(qū)是由CFrameWnd::RecalcLayout()完成的。顯然,視圖的CalcWindowRect()函數(shù)也是由它觸發(fā)調(diào)用的。主窗口的客戶區(qū)尺寸減掉所有控制占用的部分,剩下的區(qū)域分給視圖,這部分區(qū)域作為實(shí)參傳入CalcWindowRect()。在CalcWindowRect()函數(shù)內(nèi),需要計(jì)算視圖窗口的尺寸。代碼如下: void CView::CalcWindowRect(LPRECT lpClientRect, UNIT nAdjustType) { // lpClientRect此時(shí)是整個(gè)視圖客戶區(qū)的尺寸 // 需要為滾動條增加尺寸嗎 if (nAdjustType != 0) { // 調(diào)用API,根據(jù)窗口風(fēng)格計(jì)算窗口尺寸 ::AdjustWindowRectEx(lpClientRect, 0, FALSE, GetExStyle()); DWORD dwStyle = GetStyle(); if (dwStyle & WS_VSCROLL) { // 為垂直滾動條增加尺寸 int nAdjust = afxData.csVScroll; if (dwStyle & WS_BORDER) nAdjust -= CX_BORDER; lpClientRect->right += nAdjust; } if (dwStyle & WS_HSCROLL) { // 為水平滾動條增加尺寸 int nAdjust = afxData.cyHScroll; if (dwStyle & WS_BORDER) nAdjust -= CY_BORDER; lpClientRect->bottom += nAdjust; } return; } // 無需為滾動條增加尺寸,調(diào)用基類成員完成計(jì)算 CWnd::CalcWindowRect(lpClientRect, nAdjustType); } 編輯本段虛函數(shù)PostNcDestroy 在視圖窗口關(guān)閉時(shí)最后調(diào)用的成員函數(shù),它與CFrameWnd::PostNcDestroy完成相同的功能,即刪除視圖對象。代碼如下: void CView::PostNcDestroy() { delete this; } 這樣,可以不必關(guān)心視圖的釋放工作,即使它在堆中構(gòu)造。 編輯本段虛函數(shù)OnCmdMsg 在討論CFrameWnd::OnCmdMsg()時(shí)已經(jīng)了解過該函數(shù),下面只給出它的代碼: BOOL CView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { // 首先查找自身的命令消息映射 if (CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) return TRUE; // 如果視圖本身沒有處理該命令,將機(jī)會留給與其關(guān)聯(lián)的文檔對象 if (m_pDocument != NULL) { CPushRoutingView push(this); return m_pDocument->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); } return FALSE; } 編輯本段虛函數(shù) OnActivateView 當(dāng)視圖被激活為活動視圖,或由活動轉(zhuǎn)為非活動時(shí),調(diào)用該函數(shù)通知視圖?;惖膶?shí)現(xiàn)只是設(shè)置該視圖為焦點(diǎn)。代碼如下: void CView::OnActivateView(BOOL bActivate, CView* pActivateView, CView*) { UNUSED(pActivateView); // unused in release builds if (bActivate) // 當(dāng)前狀態(tài)為活動嗎 { ASSERT(pActivateView == this); // 如果其父窗口也是活動的,則設(shè)置焦點(diǎn)。(在MDI中,其父框架可能是非活動的) if (IsTopParentActive()) SetFocus(); } }

java csv編輯,mfc中cview類有什么作用