文件 檢視 框架視窗間的關係和訊息傳送規律 (轉)
在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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MFC中文件檢視框架和文件模板之間的關係框架
- C#視窗間傳遞訊息C#
- OCX 控制元件主動傳送訊息給 MFC 視窗訊息控制元件
- dotnet X11 視窗之間傳送滑鼠訊息 模擬滑鼠輸入
- dotnet 後臺執行緒傳送 X11 視窗訊息執行緒
- JavaScript視窗功能指南之命名視窗和框架 (轉)JavaScript框架
- iPhone 新漏洞,可檢視並傳送iPhone照片(含視訊)iPhone
- 用程式碼理解 ObjC 中的傳送訊息和訊息轉發OBJ
- 用程式碼理解ObjC中的傳送訊息和訊息轉發OBJ
- 顧森——《追逐語言的規律》(視訊)
- 【檢視】SMON_SCN_TIME檢視--SCN與時間的對應關係
- <轉>“您檢視的網頁正在試圖關閉視窗。是否關閉此視窗”的遮蔽方法(JavaScript)網頁JavaScript
- Linux 文件與視窗(轉)Linux
- Animator視窗檢視Project檢視PlayerIdleAnimation和PlayerWalkingAnimationProject
- 處理滑鼠離開視窗的訊息 (WM_MOUSELEAVE) (轉)
- 檢視主外來鍵關係
- RVP:存在和即時訊息傳送協議 (3) (轉)協議
- RVP:存在和即時訊息傳送協議 (2) (轉)協議
- Qt Quick 訊息列表檢視元件QTUI元件
- dotnet 設定 X11 建立視窗之間的父子關係
- 視窗程式的框架框架
- 訊息中介軟體—RocketMQ訊息傳送MQ
- iOS 訊息傳送與轉發詳解iOS
- 【RocketMQ】MQ訊息傳送MQ
- RocketMQ(八):訊息傳送MQ
- iOS 傳送位置訊息iOS
- 鴻蒙傳送訊息通知鴻蒙
- php ActiveMQ的傳送訊息,與處理訊息PHPMQ
- 視窗程式框架框架
- BGP檢視從鄰居接收/傳送的路由資訊路由
- RocketMQ中Producer訊息的傳送MQ
- 傳送不同型別的訊息型別
- js漸變彈出視窗和關閉視窗效果JS
- 3-Windows程式設計 -視窗與訊息Windows程式設計
- 使用C#在應用程式間傳送訊息C#
- 可執行資訊和傳送訊息的服務?
- 關於視窗的操作詳談 (轉)
- RocketMQ(九):訊息傳送(續)MQ