VC++技術內幕(第四版)筆記(第3章)

/********************************************/
第三章:從“Hello,world!”着手學習AppWizard


1,視圖:從用戶角度看,視圖是一個普通的窗口;從程序員角度看,試圖是一個從MFC庫中CView類所派生的類的對象。視圖對象的行爲完全由類的成員函數和數據成員決定,其中包括派生類的特定成員和基類的繼承而來的成員。

2,CEx03aView類最重要的基類是CWnd和CView。CWnd提供CEx03aView的窗口屬性,而CView提供它和應用程序框架其它部分之間的聯繫,特別是和文檔及框架窗口之間的聯繫。

3,視圖類中OnDraw成員函數:OnDraw成員函數被設計成一個虛成員函數,每次當視窗需要被重繪時候,應用程序都要調用OnDraw函數。
當用戶改變了窗口尺寸,或當前窗口恢復了先前被遮蓋的部分,或當前應用程序改變了窗口的數據的時候,窗口都需要被重繪。
當用戶改變了窗口尺寸,或窗口需要恢復被遮蓋的部分,則應用程序自動去調用OnDraw函數。
但注意,如果程序中某個函數修改了窗口數據,則它必須通過調用視圖所繼承的Invalidate(InbalidateRect)成員函數來通知Windows,調用Invalidate後會觸發對OnDraw函數的調用。

4,WINDOW中不允許直接訪問顯示硬件,必須通過和窗口相關聯的“設備環境”跟顯示硬件通訊。MFC中設備環境由CDC類對象來表示。

5,利用Win32 Debug模式 和 Win32 Release模式開發應用程序。
(默認情況不出現BUILD工具欄,可從TOOLS菜單選擇Customize項,設置顯示Build工具欄,VC6中也可在工具欄上直接點擊右鍵選擇Build工具欄)

  Win32 Release模式 Win32 Debug模式   
源碼調試 不能   編譯器連接器都允許
MFC診斷宏 不能(定義了NDEBUG) 可以(定義了_DEBUG)
庫連接  MFC Release庫  MFC Debug庫
編譯優化 速度優化(學習版不能) 沒有優化(快速編譯)

我們應在Win32 Debug模式下開發應用程序,然後在發佈或交付前用Win32 Release模式重建應用程序。in32 Release模式下建立的EXE文件又小又快。

6,診斷宏TRACE宏對監測程序狀態特別有用。這些宏要求在允許追蹤的情況下才有效,允許追蹤是默認設置。
(問題:TRACE宏的應用事例與運行原理。宏TRACE的輸出在在哪顯示呢?在output輸出框下選擇Debug項,調試運行程序即可看到TRACE宏輸出。)

7,預編譯頭文件代表了編譯器在源代碼特定行上進行‘快照’。在MFC庫程序中,快照常緊接在#include "stdafx.h"後進行。
文件StdAfx.h包含了MFC庫頭文件的#include語句。該文件的內容取決於運行AppWizard時候所做的選擇。
文件StdAfx.cpp只包含#include "stdafx.h"語句。StdAfx.cpp文件用來在相應項目的目錄下產生預編譯頭文件(PCH文件)。編譯開關/Yc只用於StdAfx.cpp文件,導致產生預編譯頭文件(PCH),而其它源文件的/Yu編譯開關使可以使用一個存在的PCH文件。開關/Fp用來指定專門的PCH文件名,默認情況下爲相應目標輸出文件目錄下與項目同名擴展名爲PCH的文件。
(VC6下具體設置參見:[Project Settings屬性框] [c/c++]屬性頁[Project Options]、[Source File Options]項)
(注意:在VC6 [Project Settings屬性框]中查看StdAfx.cpp文件[Source File Options]項時候,可以看到[Project Settings, and /Yc"stdafx.h"],這裏說明一下,StdAfx.cpp文件的[ /Yc"stdafx.h" ]的設置覆蓋了[Project Options]設置中的[/Yu"stdafx.h"])

發佈了30 篇原創文章 · 獲贊 4 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章