我的了解,我首先把這幾個貨分為兩大類;第一類包括win32控制台應用程式,第二類就是剩下那倆貨。而剩下那倆貨又有一個包含關系,即win32項目包含mfc。(我個人是這個區分的。)
一、 差別:
(1)Win32控制台程式,沒有界面,隻有指令符。生成的“.exe”檔案直接運作操作即可。
(2)Win32項目,有界面。但是界面裡面的控件,基本上要自己去實作。
(3)MFC應用程式,也有界面,但界面裡的控件不需要自己去實作了,常用的控件都已經在MFC庫内寫好,直接拖動即可。
(4)控制台與Win32、MFC的互動方式不同,前者采用的是CML(指令模式,也有人說是CUI(Console user Input)),後者是GUI(使用者界面)
(5)Win32項目的界面比較符合UI界面設計;而MFC應用程式的界面基本都是一樣的,因為它們都是用同一套控件模闆。
(6)Win32控制台程式:初始代碼模版以main為程式入口,預設情況下,隻連結C++運作時庫和一些核心的win32庫,連結器subsystem參數為console類型,是以編譯出來的程式會有黑色的控制台視窗作為呈現标準輸入(stdin)和标準輸出(stdout)。
Win32項目:初始代碼模版實作一個簡單的windows視窗,以WinMain作為程式入口,引用了win32Api頭檔案和庫,連結器subsystem參數為windows,是以生成的程式不帶黑色的控制台,直接使用标準輸入和标準輸出,看不到效果。
MFC應用程式:本質上是個win32工程,隻是預設幫你引用了mfc架構的頭檔案和庫,并且程式入口由mfc架構提供,不需要自己寫。
二、聯系:
windows提供win32 api以供程式員完成各種操作,是以控制台,win32,mfc都可直接調用win32 api。但直接使用win32 api,用代碼完成諸如建立視窗,顯示視窗等操作太過繁雜,于是我們把這些代碼結合抽取出來,變成OOP中的類,也就是微軟基礎類庫(MFC)
三、轉換:
因為兩大類的差別主要是定義的宏不一樣,win32 項目和mfc的為WINDOWS,win32控制台的為CONSOLE,是以:在預進行中把_WINDOWS換成_CONSOLE就行了 。 project settings -> Link :将/SUBSYSTEM:WINDOWS開關改為/SUBSYSTEM:CONSOLE 。另外, 可将 Win32控制台程式 當成 在Win32項目 使用,反之亦然。/subsystem:windows或/subsystem:console删除,由編譯器自己決定也可以