程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> vc++技術內幕(第四版)筆記(1~2章)

vc++技術內幕(第四版)筆記(1~2章)

編輯:vc教程

第一章:Microsoft Windows 和 Visual C++

1,Windows應用程序中一定要有WinMain函數,用來完成某些特殊的任務,其中最主要的是創建應用次序的主窗口。

2,DOS下,所有次序的目標模塊在創建過程中都被靜態連接起來。而Windows允許動態連接,即一些特定結構的庫(DLL)可以在運行過程中被裝入和連接,並且被多個應用程序共享。

3,項目是一些相互關聯的源文件的集合,這些源文件經過編譯、連接,然後被組合在一起形成可執行的WWindows應用程序或DLL。

4,幾個重要Developer Studio創建的中間文件:
CLW (支持ClassWizard ) DSP (項目文件)
DSW (工作空間文件)  NCB (支持ClassVIEw)
OPT (保持工作空間的配置) PLG (建立日志文件)

5,AppWizard是一個代碼生成器,它會按照用戶通過對話框指定的特性、類名、及源代碼文件名來產生Windows應用程序工作架構。AppWizard所產生的代碼只是一些最基本的代碼,它完成的功能完全由應用程序的基類所決定。

第二章:Microsoft基本類庫應用程序框架

1,按照慣例,MFC庫類名用大寫“C”打頭。

2,類CMyApp的對象theApp就代表一個應用程序。當運行該應用程序的時候,Windows自動調用程序框架內部的WinMain函數,WinMain函數會去查找該應用程序的全局構造對象(theApp),該對象是有CWinApp類派生類的對象。C++中,全局對象在主程序被運行之前就已經構造好了。

3,當WinMain發現該應用程序對象(theApp)時,會自動調用虛擬成員函數CWinApp::InitInstance(),該函數會進一步調用相應的函數來完成主窗口的構造和顯示工作。由於基類CWinApp中不知道我們實際需要的什麼樣的窗口,所以我們必須在派生出的應用程序類CMyApp中重載InitInstance()函數(CMyApp::InitInstance()),由多態性,當調用CWinApp::InitInstance()時候,會自動轉向MyApp::InitInstance().

4,WinMain函數調用完InitInstance()函數後,就調用CWinApp::Run函數,CWinApp::Run函數被隱藏在基類中負責傳遞應用程序的消息給相應的窗口,從而維護應用程序的運轉。

5,關閉應用程序(對單一框架程序來說),首先CMyFrame 對象被刪除,然後退出Run,進而退出WinMain,最後刪除CMyApp對象(theApp)。

6,一些Windows類庫在基類為鼠標事件消息以及其他一些標准消息定義一些虛函數,如果需要,派生類會對這些函數進行重載。
MFC庫應用程序框架沒有采用虛函數來處理Windows消息,而是通過一些宏來將特定的消息映射到派生類中相應的成員函數上。(原因:P21。C++類對程序中用到的每一個派生類都要求有一張虛函數分發表VTABLE,在BTABLE中每個虛函數都需要有一個4字節的入口項,而不管該函數會不會在派生類中被重載。)

MFC消息控件函數要求提供函數原型,函數體,以及在消息映射中的入口。

7,文檔-視圖結構將數據從用戶對數據的觀察中分離出來,這樣就允許對同一數據可以有多個視圖。

MFC庫應用程序中,文檔和視圖是由C++類的實例來描述的。

文檔基類代碼通常和FILE OPEN,FILE SAVE菜單項關聯,而派生文檔類則一般用來完成對文檔對象數據的實際讀寫工作。

視圖基類通常表示一個包含於框架窗口中的窗口,而派生視圖類則常用來和穩當類相聯系,負責應用程序的顯示和打印機I/O。

派生視圖類及其基類共同處理Windows的消息,而MFC庫則協調文檔,視圖,框架窗口,以及應用程序之間的相互作用關系,這種協調多用虛函數來實現。

文檔對象既可以與一次可全部讀入內存的磁盤文件相關聯,也可以同數據庫相關聯。

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