1.cobject類為mfc總類,該類下面有乙個重要的類ccmdtarget。
而ccmdtarget類下面又有四個重要的繼承類,
分別為:cwinthread、cdocument、cdoctemplate、
cwnd
類。所以,可以得出乙個大概繼承圖,如圖所示:
其中cwnd類下屬又有幾個重要的繼承類,分別為cframewnd、cdialog、cview、controls、
cwnd---->cframewnd
---->cdialog
---->cview
---->controls
視窗類是一切windows可見視窗,(包括主視窗,子框視窗,對話方塊,控制項,view視窗)的父類。凡是能可見的,基本上是繼承於cwnd,而抽象於其中的(即不可見的)則不繼承於它。
2.mfc標頭檔案:
■stdafx.h:該檔案用來作為precompiled header file,其內只是載入其它的mfc標頭檔案。
■afxwin.h:每個mfc程式都必須載入它,因為它以及它所載入的檔案宣告了所有的mfc類。此檔案內包含afx.h,後者又包含afxver_.h,後者又包含afxv_w32.h,後者又包含windows.h
■afxext.h:凡使用工具欄、狀態列的程式必須載入此檔案。
■afxdlgs.h:凡使用通用型對話方塊(common dialog)的mfc程式要載入此檔案。
■afxcmn.h:凡使用windows9x新增的通用型控制項(common control)之mfc程式需載入此檔案。
■afxcoll.h:凡使用collections class(處理資料結構如資料,鍊錶類等)之程式需載入此檔案。
■afxdllx.h:凡mfc extension dlls需載入此檔案。 ■
afxres.h:mfc程式的rc檔案必須載入此檔案。mfc對於標準windows資源(如file,edit等)的id均有預設定義,這此定義在該標頭檔案內。
3.什麼是precompiled header:
乙個應用程式在發展過程中需不斷的編譯,而windows程式載入的.h標頭檔案非常巨大且內容不變,編譯器如果不precompiled的話,每次需要編譯的時間非常多,所以precompiled header就是將.h檔案一次編譯後的結果儲存起來,第二次編譯時就可以直接從磁碟中讀取。
4.關於應用程式的進入點winmain和視窗過程wndproc:
mfc■cframewnd代表乙個主框視窗(frame window)
6.cframewnd類取代了sdk中的wndproc地位
眾所周知,wndproc是用來處理視窗(包括初始化,處理訊息,顯示等)的函式,那麼cframewnd也是,首先在標頭檔案中,我們要繼承乙個cframewnd的類,並在此定義要處理的訊息(declare_message_map),然後,在原始檔中,定義該類的訊息實現(begin_message_map,end_message_map)
7.mfc中陰晦的winmain:
它是第一步操作
配置完後,_twinmain登場,注意,我們沒有撰寫winmain的**,winmain是mfc早已準備好並由鏈結器直接加到應用程式**中的。_twinmain是為了支援unicode而準備的乙個巨集,實質還是winmain。好,_twinmain函式做了什麼工作呢?它只是在裡面呼叫afxwinmain函式。如下:returnafxwinmain(hinstance, hprevinstance, lpcmdline, ncmdshow);afxwinmain是乙個全域性的函式,並不屬於任乙個類。
下面讓我們來看一看afxwinmain函式做了些什麼工作?
第一、它會獲得
第二、呼叫afxwininit(...)函式,用作mfc gui程式初始化的一部分,這個函式詳見後解...
第六、最後調有
afxwinterm函式,結束該應用程式。
所以,主要的afxwinmain做的工作就應該如下**所示:
int afxapiafxwinmain(hinstance hinstance, hinstance hprevinstance, lptstr lpcmdline, int ncmdshow)
是乙個全域性函式,定義於afxwin1.inl中,如下:
afx_module_state* pmodulestate = afxgetmodulestate();
pmodulestate
9.afxwininit ----afx內部的初始化操作:②
afxwininit
,以下是它的操作摘要:
bool afxapiafxwininit(hinstance hinstance, hinstance hprevinstance,lptstr lpcmdline, int ncmdshow)
if (!afxcontextisdll)
afxinitthread();
return true; }
afxwininit
函式對內部初始化之後,進入第三步操作
if (m_pdocmanager != null)
m_pdocmanager->adddoctemplate(null);
else
cdocmanager::bstaticinit = false;
return true; }
這些操作都是mfc為內部管理而做的。只要記住一點,我們的派生類無需改寫它,它是關於cdocmanager的類.
修改MFC主視窗標題
在vs2010下新建乙個mfc的多文件應用程式,程式預設的標題是 文件名 工程名 圖示預設的是寫著mfc的三個方塊。但在很多軟體中都不是使用的預設設定,開發者們都將標題和圖示改過,以符合專案要求,而且直觀好看。一.修改標題 標題分為前後兩部分,前面一部分預設是文件名,後面一部分預設是工程名,比如我新...
如何改變MFC應用程式主視窗的類名
說明mfc自動建立的應用程式中,主視窗的類名是固定的。但在許多情況下,你可能希望自己擬定mfc的主視窗的類名。如果你想進行程序間通訊 ipc 這種技術就更顯得簡潔有效。最早的實現不同程序間通訊的方法是傳送訊息,但是傳送訊息需要知道傳送的目標物件,即確定目標視窗,識別出它的id。一種方法是迭代所有具有...
MFC中獲取主視窗指標
mfc中 獲取主視窗指標 2010 07 14 14 44 afxgetmainwnd cwnd afxgetmainwnd 返回值 如果伺服器具有乙個可以在容器內現場啟用的物件,並且這個容器是活動的,則這個函式返回乙個指向包含這個現場活動文件的框架視窗物件的指標。如果沒有可以在容器內現場啟用的物件...