文件 檢視 框架視窗間的關係和訊息傳送規律 (轉)

gugu99發表於2007-08-16
文件 檢視 框架視窗間的關係和訊息傳送規律 (轉)[@more@]3.1 文件 檢視 視窗間的關係和訊息傳送規律

在MFC中M$引入了文件-視結構的概念,文件相當於資料容器,視相當於檢視資料的視窗或是和資料發生互動的視窗。(這一結構在MFC中的OLE,OC開發時又得到更多的擴充)因此一個完整的應用一般由四個類組成:CWinApp應用類,CFrameWnd視窗框架類,CDocument文件類,CView視類。(VC6中支援建立不帶文件-視的應用)

在執行時CWinApp將建立一個CFrameWnd框架視窗例項,而框架視窗將建立文件模板,然後有文件模板建立文件例項和視例項,並將兩者關聯。一般來講我們只需對文件和視進行操作,框架的各種行為已經被MFC安排好了而不需人為干預,這也是M$設計文件-視結構的本意,讓我們將注意力放在完成任務上而從介面編寫中解放出來。

在應用中一個視對應一個文件,但一個文件可以包含多個視。一個應用中只用一個框架視窗,對多文件介面來講可能有多個MDI子視窗。每一個視都是一個子視窗,在單文件介面中父視窗即是框架視窗,在多文件介面中父視窗為MDI子視窗。一個多文件應用中可以包含多個文件模板,一個模板定義了一個文件和一個或多個視之間的對應關係。同一個文件可以屬於多個模板,但一個模板中只允許定義一個文件。同樣一個視也可以屬於多個文件模板。(不知道我說清楚沒有)

接下來看看如何在程式中得到各種的指標:

  • 全域性AfxGetApp可以得到CWinApp應用類指標
  • AfxGetApp()->m_pMainWnd為框架視窗指標
  • 在框架視窗中:CFrameWnd::GetActiveDocument得到當前活動文件指標
  • 在框架視窗中:CFrameWnd::GetActiveView得到當前活動視指標
  • 在視中:CView::GetDocument得到對應的文件指標
  • 在文件中:CDocument::GetFirstViewPosition,CDocument::GetNextView用來遍歷所有和文件關聯的視。
  • 在文件中:CDocument::GetDocTemplate得到文件模板指標
  • 在多文件介面中:CMDIFrameWnd::MDIGetActive得到當前活動的MDI子視窗

一般來講輸入訊息(如選單選擇,滑鼠,鍵盤等)會先發往視,如果視未處理則會發往框架視窗。所以定義訊息對映時定義在視中就可以了,如果一個應用同時擁有多個視而當前活動視沒有對訊息進行處理則訊息會發往框架視窗。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-960754/,如需轉載,請註明出處,否則將追究法律責任。

相關文章