Visual C++應用框架揭密 (轉)
Visual C++應用揭密
北京理工大學光電工程系 盧英威
技巧與維護 1999.1 P30
Visual C++應用框架提供的強大功能,為我們的開發提供了極大的方便,利用其應用生成器可以很輕鬆地生成應用程式的框架.許多常用功能,例如文件的建立,的開啟,儲存等操作的大部分程式碼都由應用框架來完成.這些操作對於開發的而言,是透明的. 公司的設計Visual C++的初衷是儘量向使用者提供儘可能簡單的介面,但是,正是因為應用框架的這一透明性,使Visual C++的執行流程顯得非常神秘,當涉及這些Visual C++已經提供的功能模組的時,使用者(特別是那些剛剛接觸Visual C++的)不知道什麼時候該使用什麼介面,想改變Visual C++的一些預設操作時也不知道該從哪兒下手,使開發的難度增加.
本人在程式設計實踐中發現,可以透過Visual C++自帶的強大的De工具,跟蹤應用框架程式碼,從而得出應用框架操作的部分流程.具體實現是:利用Visual C++應用生成器生成應用框架程式碼,啟動 Classwizard,在各個類中加入欲跟蹤的介面函式,編輯介面函式,設定斷點,再啟動Debug進行單步跟蹤除錯.利用這一方法,我們還可以跟蹤 Visual C++提供的例子程式碼.在跟蹤過程中,Visual C++的核心程式碼是禁止跟蹤除錯的,我們只要跳過就行.
以下是本人對多文件應用程式的文件建立,檔案的開啟, 儲存(另存為)操作的跟蹤結果,單文件應用與多文件應用的操作流程基本相似,只是用CSingleDocTemplate類的同名函式來替代對 CMultiDocTemplate類同名函式的.以下說明中,"應用程式"均指使用者生成的基於應用框架的實際程式,"使用者程式碼"指使用者在介面函式中加入的程式碼.
一.建立文件
ON_COMMAND(ID_FILE_NEW,CWinApp::OnFileNew)
入口:CWinApp::OnFileNew
呼叫:CdocManager::OnFileNew()
1.判斷有無文件模板,無則函式返回;
2.判斷是否有多個文件模板,如有則啟動文件模板選擇對話方塊, 讓使用者選擇一個模板後,返回模板指標.
3.由模板指標訪問CMultiDocTemplate::OpenDocumentFile()
31.建立新文件
32.建立與新文件物件對應的子框架,構築子框架,文件和視窗之間的關係
33.呼叫應用程式的OnNewDocument()
a.呼叫CDocument::OnNewDocument()
呼叫應用程式的DeleteContents();
b.使用者程式碼
34.呼叫InitialUpdateFrame()顯示視窗
35.返回文件指標
4.返回
二.開啟文件
ON_COMMAND(ID_FILE_OPEN,CWinApp::OnFileOpen)
入口:CWinApp::OnFileOpen
呼叫:CDocManager::OnFileOpen()
1.彈出對話方塊讓使用者選擇待開啟的檔案,返回該檔案的全路徑名稱, 供下面函式呼叫時使用.
2.呼叫應用程式的OpenDocumentFile(LPCTSTR lpszFileName)
21.使用者程式碼
22.呼叫CWinApp::OpenDocumentFile(lpszFileName),
呼叫CWinApp::OpenDocumentFile(lpszFileName),
呼叫CDocManager::OpenDocumentFile
a.判斷有無該檔案的開啟文件物件,有則啟用該視窗並返回
b.呼叫CMultiDocTemplate::OpenDocumentFile()
b1.建立新的文件物件,建立新文件物件對應的子框架
b2.呼叫應用程式的OnOpenDocument()
(1)呼叫CDocument::OnOpenDocument()
.開啟檔案物件
.呼叫應用程式的DeleteDontents();
.建立與此檔案物件相關聯的CArchive物件
.呼叫應用程式文件物件的Serialize()函式
.關閉CArchive物件,檔案物件
(2)顯示該檔案視窗
b3.返回
三.檔案儲存
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()
31.使用者程式碼
32.呼叫CDocument::OnSaveDocument()
a.建立或開啟檔案物件
b.建立相對應的CArchive物件
c.呼叫應用程式文件物件的序列化函式Serialize()
d.關閉檔案物件,CArchive物件
e.設定檔案未修改標誌
4.返回
--------------------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988863/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一起玩轉微服務(12)——揭密starter微服務
- Visual Studio 2005 如何建立“Web 應用程式”Web
- 揭密React setStateReact
- 如何使用Visual Studio Code除錯PHP CLI應用和Web應用除錯PHPWeb
- Use any C++ Compiler with Visual StudioC++Compile
- C++的“虛”應用C++
- VISUAL-STUDIO(2022)-透過Visual Studio Installer新增C++工作負載C++負載
- gevent安裝錯誤解決方案:Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools"ROSC++UI
- 使用 Visual C++ 的 Office 自動化C++
- visual studio原生支援C++的含義C++
- Visual Studio C++ 安裝以及使用教程C++
- pythontonado框架簡單應用Python框架
- Android 音訊應用框架Android音訊框架
- 玩轉 PHP 網路程式設計全套之 libevent 框架多人聊天應用PHP程式設計框架
- Qt-跨平臺的C++圖形使用者介面應用程式框架(一)QTC++框架
- Visual Studio部署C++環境下OpenCV庫C++OpenCV
- Visual C++ MFC 中常用巨集的含義C++
- 【譯】使用 .NET Aspire 和 Visual Studio 開發雲原生應用
- c++程式框架C++框架
- 應用基礎框架全面解析框架
- 分享一個 ElementUI 應用框架UI框架
- onethink內容管理框架應用框架
- 20分鐘能幹嘛?帶你玩轉智慧園區應用框架MainPortal框架AI
- C++高階應用_設計模式C++設計模式
- C/C++ Qt TableWidget 表格元件應用C++QT元件
- 利用Visual Studio除錯WSL下的C++工程除錯C++
- Microsoft Visual C++ 微軟常用執行庫合集ROSC++微軟
- 用jMolecules框架實現DDD應用開發框架
- 揭密 Vue 的雙向繫結Vue
- vue-element-admin 框架應用1Vue框架
- 探索嵌入式應用框架(EAF)框架
- Util 應用框架 UI 全新升級框架UI
- 如何應用於Web框架的搭建Web框架
- JavaFX桌面應用-構建程式框架Java框架
- 使用Visual Studio將JSON格式資料自動轉化為對應的類JSON
- 用 Visual Studio Code 做基於 .NET MAUI 跨平臺移動應用開發UI
- C++學習隨筆——C++仿函式的應用方法C++函式
- C/C++ Qt StandardItemModel 資料模型應用C++QT模型
- C/C++ Qt 基礎通用元件應用C++QT元件