程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> VC應用程序框架

VC應用程序框架

編輯:vc教程

  VC應用程序框架提供的強大功能,為我們的開發提供了極大的方便,利用它可以很輕松地生成應用程序的框架.許多常用功能,例如文檔的創建,文件的打開,保存等操作的大部分代碼都由應用程序框架來完成.這些操作對於開發軟件的用戶而言是透明的。微軟設計Visual C++的初衷是盡量向用戶提供盡可能簡單的接口,但是,正是因為應用框架的這一透明性,使VC的運行流程顯得非常神秘,當涉及這些VC已經提供的功能模塊的軟件開發時,用戶(特別是那些剛剛接觸VC的)不知道什麼時候該使用什麼接口函數,想改變VC的一些默認操作時也不知道該從哪兒下手。

  我們可以通過VC自帶的強大的Debug調試工具,跟蹤應用程序框架代碼,從而得出應用程序框架操作的部分流程.具體實現是:利用Visual C++應用程序生成器生成應用程序框架代碼,啟動Classwizard,在各個類中加入欲跟蹤的接口函數,編輯接口函數,設置斷點,再啟動Debug進行單步跟蹤調試.利用這一方法,我們還可以跟蹤 VC提供的例子代碼.在跟蹤過程中,VC的核心代碼是禁止跟蹤調試的,我們只要跳過就行。

  以下是根據我自己看到的一些資料和對多文檔應用程序的文檔創建,文件的打開, 保存(另存為)操作的跟蹤結果,單文檔應用與多文檔應用的操作流程基本相似,只是用CSingleDocTemplate類的同名函數來替代對 CMultiDocTemplate類同名函數的調用。

  一.創建文檔

  ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)

  入口:CWinApp::OnFileNew

  CWinApp對OnFileNew的默認實現是調用:CdocManager::OnFileNew()

  1.判斷有無文檔模板,無則函數返回;

  2.判斷是否有多個文檔模板,如有則啟動文檔模板選擇對話框,讓用戶選擇一個模板後,返回模板指針.

  3.由模板指針訪問CMultiDocTemplate::OpenDocumentFile()

  3.1 創建新文檔對象

  3.2 創建與新文檔對象對應的子框架,構築子框架,文檔和視窗之間的關系

  3.3 調用應用程序的OnNewDocument()

  a.調用CDocument::OnNewDocument()

  調用應用程序的DeleteContents();

  b.用戶代碼

  3.4 調用InitialUpdateFrame()顯示視窗

  3.5 返回文檔指針

  4.返回

  二.打開文檔

  ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)

  入口:CWinApp::OnFileOpen

  CWinApp對OnFileOpen的默認實現是調用:CDocManager::OnFileOpen()

  1.彈出對話框讓用戶選擇待打開的文件,返回該文件的全路徑名稱, 供下面函數調用時使用.

  2.調用應用程序的OpenDocumentFile(LPCTSTR lpszFileName)

  2.1 用戶代碼

  2.2 調用CWinApp::OpenDocumentFile(lpszFileName),

  調用CDocManager::OpenDocumentFile

  a.判斷有無該文件的打開文檔對象,有則激活該窗口並返回

  b.調用CMultiDocTemplate::OpenDocumentFile()

  b.1 創建新的文檔對象,創建新文檔對象對應的子框架

  b.2 調用應用程序的OnOpenDocument()

  (1)調用CDocument::OnOpenDocument()

  .打開文件對象

  .調用應用程序的DeleteDontents();

  .建立與此文件對象相關聯的CArchive對象

  .調用應用程序文檔對象的Serialize()函數

  .關閉CArchive對象,文件對象

  (2)顯示該文件窗口

  b.3 返回

  三.文件保存

  ON_COMMAND(ID_FILE_SAVE,CDocument::OnFileSave)

  入口:CDocument::OnFileSave()

  調用:CDocument::DoFileSave()

  如果當前文檔對應的文件名為空或者為只讀文件,以NULL為參數調用CDocument::DoSave(NULL),否則,以當前文檔對應的文件名為參數調用CDocument::DoSave(m_strPathName);

  ON_COMMAND(ID_FILE_SAVEAS,CDocument::OnFileSaveAs)

  入口:CDocument::OnFileSaveAs()

  以NULL為參數直接調用CDocument::DoSave(NULL);

  CDocument::DoSave(LPCTSTR lpszPathName,BOOL bReplace);

  如果lpszPathName為NULL,

  1.設定應用程序默認的文件名

  2.打開通用文件保存對話框,由用戶設定保存文件的名字,並返回該文件名

  如果lpszPahtName不為NULL,則跳為以上兩步,直接進入下一步

  3.調用應用程序的OnSaveDocument()

  3.1.用戶代碼

  3.2.調用CDocument::OnSaveDocument()

  a.創建或打開文件對象

  b.建立相對應的CArchive對象

  c.調用應用程序文檔對象的序列化函數Serialize()

  d.關閉文件對象,CArchive對象

  e.設置文件未修改標志

  4.返回

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved