MFC程式和Win32程式的關係

2021-06-16 07:52:53 字數 2048 閱讀 8059

首先mfc程式需要下面函式庫:

(1) windows c runtime函式庫:libc.lib / msvcrt.lib / msvcrtd.lib

(2) dll import函式庫:gdi32.lib / user32.lib / kernel32.lib

(3) mfc函式庫(afx函式庫):mfc42.lib / mfc42d.lib……

同時,mfc程式需要下面標頭檔案:

(1) stdafx.h:預編譯標頭檔案,其內只是載入其他的mfc標頭檔案。

(2) afxwin.h:每個mfc程式都必須載入它,因為它以及它所載入的檔案宣告了所有的mfc類,此檔案含有afx.h,後者又載入afxvver_.h,後者又載入afxv_w32.h,後者又載入windows.h(sdk程式必須要的標頭檔案)。

(3) afxext.h:使用工具欄、狀態列的程式必須載入這個檔案。

(4) afxdlgs.h:使用通用型對話方塊的mfc程式需要此檔案,其內部載入commdlg.h

(5) afxcmn.h:使用win9x新增的通用型控制項的mfc程式必須載入此檔案。

(6) afxcoll.h:使用collections classes的程式要此檔案

(7) afxres.h:mfc程式的rc檔案必須載入此檔案。

[解釋]預編譯標頭檔案:所謂預編譯標頭檔案是指將 .h 檔案第一次編譯後的結果儲存起來,第2次編譯的時候就可以直接從磁碟上取出來用。

extern 「c」 int winapi _twinmain(hinstance hinstance, hinstance hprevinstance, lptstr lpcmdline, int ncmdshow)

其中afxwinmain定義如下:

int afxapi afxwinmain(hinstance hinstance, hinstance hprevinstance, lptstr lpcmdline, int ncmdshow)

關於afxwinmain的四個主要操作說明:

其中一開始就new了乙個cmyframewnd物件,準備用作主框視窗的c++物件,引發了cmyframewnd的建構函式:

cmyframewnd::cmyframewnd

create是cframewnd的成員函式,cmyframewnd中並沒有改寫它。由於create的第乙個引數指定wndclass視窗類名字,現在為null表示以mfc內建的視窗類產生乙個標準的外框視窗。

在cframewnd::create(…)函式中,呼叫了createex函式,由於cframewnd中並沒有改寫createex函式,所以實際上呼叫的是cwnd::createex。在createex這個函式中,呼叫了precreatewindow和createwindowex這兩個函式。由於cframewnd中改寫了precreatewindow,所以這裡呼叫的是cframewnd::precreatewindow。在precreatewindow裡面,呼叫了afxdeferregisterclass巨集,該巨集的定義如下:

#define afxdeferregisterclass(fclass) \ ((afxregisteredclasses & fclass) true : afxenddeferregisterclass(fclass))

如果變數afxregisteredclasses的值顯示系統已經註冊了fclass這種視窗類,mfc就啥也不做,否則就呼叫afxenddeferregisterclass(fclass),準備註冊之。afxenddeferregisterclass函式中終於宣告了wndclass物件,並且呼叫了相應的mfc視窗類,並通過afxregisterclass(wndclass*)和registerwithicon這兩個函式來註冊視窗類。mfc內建6種視窗類。registerwithicon中用到afxregisterclass函式,而afxregisterclass函式裡面又呼叫了registerclass函式來註冊視窗類。不同類的precreatewindow成員函式都是在視窗產生之前一刻被呼叫,準備用來註冊視窗類的,如果我們指定視窗類為null,那麼就是用系統預設類(mfc內建)。

(5) 程式根據訊息對映表來判斷訊息,從而做出相應的訊息處理。

關於Console程式和win32程式的程式入口

作業系統裝載應用程式後,做完初始化工作就轉到程式的入口點執行。程式的預設入口點由連線程式設定,不同的聯結器選擇的入口函式也不盡相同。在vc 下,聯結器對控制台程式設定的入口函式是 maincrtstartup,maincrtstartup 再呼叫main 函式 對圖形使用者介面 gui 程式設定的入...

MFC和Win32的區別

參考一 整理自csdn,感謝各位的智慧型,學習了 mfc就是 微軟給你包裝了的庫,提供了很多擴充套件功能,以及高階功能,這樣方便你使用,而不是自己從頭呼叫api來實現 而api由於是mfc下一層,自然實現更靈活,可以根據你的需要來使用,不會被mfc類庫所限制。win32和mfc程式設計的最大不同是 ...

C開發win32程式

1,先建立乙個空的win32工程,再建立乙個c 原始檔到此工程 2,編輯原始檔 include 標頭檔案宣告 int winapi winmain hinstance hinstance,hinstance hprevinstance,pstr szcmdline,int icmdshow 主函式為...