?? mfc學習進階03.txt
字號:
先跟大家說聲抱歉,昨天晚上我不知道怎么回事,老是登陸不上,所以今天才來。
好,這是第三期。在上一次中提供了一個運用程序的框架給大家,如果大家暫時看不懂,沒關系。只要知道一個程序的運行流程就行了,開始由WinMain()函數調用InitInstance()進行初始化,然后剩下的交由“消息映射機制”來處理用戶的輸入。
好,這一期的主題是“文檔/視圖結構”(我也不太明白為什么提供這么一個概念)
書上說,這是為了學習以文檔為中心的運用程序開發方法(這個方法有什么用啊,還有啊,我們上一個程序是不是一文檔為中心的運用程序呢,看來不太象。不管,繼續)
看一看以文檔為中心的概念:
以文檔為中心是將運用程序數據和用戶界面分開,讓開發者分別描述運用程序和顯示數據。(還是不明白,難道是運用程序數據放到一個文件里面,要顯示數據時才去拷貝,不明白)
然后書上用了一個例子來說明:用一個字處理運用程序來理解,比如寫字板,如果用戶雙擊了a.doc,隨著a.doc的打開,寫字般的一個實例被創建。(難道說是a.doc一個數據是交由文檔來管理的,而不是運用程序)
視圖是根據文檔的不同而改變的。(看來是有點眉目了,比如說,一個運用程序用多種功能,可以打開文檔和圖片,當文檔類型不同,運用程序的視圖也不一樣,打開圖片時顯示一種視圖,打開文檔時顯示另一種視圖。文檔,視圖有一種對應關系)文檔是一幅圖像的時候,視圖允許對他進行修改。看來視圖是根據不同的文檔來提供相應的服務,即視圖。視圖只是與用戶交互的一種工具。我還想到一個例子,當多個程序同時用一個文件時,當一個程序修改了這個文件時,另一個程序會提示是否要重新載入。我想這也應該是文檔/視圖結構吧。
書上還說,載入和保存文檔是文檔的任務,看來文檔也不是那么簡單的把數據放到一起了。還提供了對文件進行處理的功能。
看來真的有點眉目了,文檔是對數據進行處理,而視圖則是與用戶交互。文檔可以和視圖交互。
MFC 以文檔為中心的程序使用文檔模板將文檔,視圖和運用程序窗口框架關聯起來。(注意:視圖并不是指窗口圖形界面,不應該包括菜單)。運用程序先創建文檔,視圖,窗口框架類,然后創建文檔模板把他們聯系起來(看來視圖和文檔并不是直接交互,還有文檔模板做橋梁。但是,它們之間到底是怎么聯系的呢?是有一套通信規則,還是提供了一系列函數來調用相應功能?不曉得。上一個程序并沒有創建什么文檔模板,看來不是視圖/文檔的程序)
下面一節,來的是MFC應用程序結構,好像前面也有說過這個問題,不過聽書上的口氣,書上要詳細介紹Skeleton程序。
不管是不是以文檔為中心,MFC程序都有以下部分:
一個運用程序對象,一個主窗口框架用戶界面元素,和數據資源。
其實各部分的作用我們前面都知道了,但是我想到了一個比方:運用程序相當于一個副校長,在幕后控制著一切活動,校長相當于主窗口,外當家,是與外界交往的主角;而數據資源就是后勤部長。
然后看看對運用程序對象的深入討論,我們看看與我們以前的看法有什么不對的地方?
運用程序創建對象的目標是控制程序的初始化,運行和終止。在封裝的WIN32函數WinMain()的外部,對象提供了幾個重要的成員函數:
InitInstance(),Run(),OnIdle(),ExitInstance()
到底WinMain函數被封裝到哪里了?查了一下,結果不是類的成員函數,可能在頭文件中?其中函數之間的關系為:
___________InitInstance()
WinMain()___________Run()____________OnIdle()
___________ExitInstance()
由圖可以知道,WinMain()一直運行在后臺,然而對象通過成員函數實現對WinMain的訪問,也就是說WinMain()在后臺并不是控制程序,而是作為一個工具。
InitInstance在WinMain啟動不久,對運用程序對象的每一個實例進行初始化,這時運用程序按需要重載InitInstance,通常用來創建對象窗口,設置繼承的數據成員m_pMainWnd.(這個繼承數據成員到底在什么地方呢?他有什么作用呢?)
Run()函數
在Win32 API中,WinMain()用大量的消息循環來接受用戶的操作,然而在MFC中,不是WinMain,而是Run()來完成這個任務,來接受用戶輸入。
當很就沒有用戶輸入時,Run()調用OnIdele()重載讓程序進行后臺任務。
當要退出時Run()調用ExitInstance()來結束程序
看來這次還是有收獲:
WinMain()函數一直存在,其他函數可以調用WinMain(),而不是象c語言中用main()控制程序。
好,這次初步了解文檔/視圖為中心的程序的概念,下一次會用這個概念再次學習Skeleton程序。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -