對於一個新手來說,在使用Visual Studio新建項目時,win32控制台應用程序和win32項目、空項目、MFC應用程序有哪些區別?


2015年11月19日15:35:59更新

  1. 空項目

  2. 控制台

  3. win 32

  4. mfc

問2個問題即可。

1.控制台 VS win32 mfc?

嗯,有不有臉?

有臉,選win32或mfc。沒有臉,選控制台。

臉就是窗口,就是window......s

(這個有臉)

(這個沒臉)

控制台與win32 mfc:交互方式的不同,前者是CML(命令模式),後者是GUI(用戶界面)。

2.MFC VS win32

嗯,是不是「國」字臉?

是「國」字臉,選mfc。是DIY的臉,選win32。

(國字臉1)

(國字臉2)

(DIY臉1)

(DIY臉2)

為什麼MFC的軟體都一個模樣?

(因為它們用的同一套整容工具)

採用控制台還是win32 MFC,取決於是否需要同用戶進行交互,以及交互的頻率是高還是低。字處理軟體需要實時查看編輯成果,所以採用了窗口;而一個木馬程序,採用了窗口就會暴露自己,所以採用控制台。

需要與用戶進行大量交互或者要滿足「所見即所得」,採取wn32 mfc;無需交互或者交互極少,採用控制台。

windows提供win32 api以供程序員完成各種操作,所以控制台,win32,mfc都可直接調用win32 api。

但直接使用win32 api,用代碼完成諸如創建窗口,顯示窗口等操作太過繁雜,於是我們把這些代碼結合抽取取來,變成OOP中的類,也就是微軟基礎類庫(MFC)。

只強調實用與開發效率,用MFC;強調用戶體驗與軟體細節,使用WIN32。MFC可以實現的,WIN32都可以實現。反之不可。

創建一個窗口:

以前用win32,我們這樣:寫,寫,寫代碼!

後來有了MFC,我們這樣:XXX控制項哩!需要哪裡點哪裡!

萬眾矚目的空項目

/*
空項目就是什麼也沒有啦!
*/

————————————————————————————————————

( 中國無鼻子無臉人、中國有鼻子有臉人、重慶整形人、中國人有什麼關係?)

帶有"中國"字樣的,是一類人,都屬於"中國人"。重慶是中國的一個市,"重慶整形人"也屬於"中國人"。

所以,"Win32控制台應用程序"、"空項目(準確的說應該是win32空項目)"、"MFC應用程序"都屬於"win32項目"。帶有"win32"字樣的都屬於一類,只不過"MFC"是其中的一個異類。

「win32控制台應用程序」就是那個"中國無鼻子無臉人",長得不帥,黑漆漆的一張臉,做起事來有效率,但是如果派他去做壞事,比如入侵女生宿舍什麼的,會被發現。他的臉不會改變,總是黑漆漆的。那啥,沒鼻子的臉,也是一張臉。

"MFC應用程序"是"重慶整形人",沒有"中國人"就沒有"重慶整形人",所以"MFC"是基於"win32"的。不管怎樣,他都是好面子的人,所以他總是會有一張臉。而且這個臉可以自己弄,而且很方便。要鼻子?不用你自己弄,我這有個模型,你說說尺寸大小就行了。還有嘴巴?行!

"win32項目"就是"中國人"了,我給你一個人,要臉還是不要臉?要鼻子還是要嘴巴?這個你自己弄,我這也沒模型,哥們兒你自己動手,豐衣又足食啊!

"空項目",空的項目,自然是什麼都沒有,不僅什麼都沒有,而且最後能不能弄出一個人來都還是一個問題。

………………………………………………………………………


對visual C++來說,不同的項目會有不同的初始代碼模版和參數設置,這些參數包括:C++編譯器參數,鏈接器參數等。如果願意並且不嫌麻煩的話,通過項目屬性對話框調整參數,它們之間是可以相互轉換的。

-----------------------------------------

具體的差異如下:

Win32控制台程序:初始代碼模版以main為程序入口,默認情況下,只鏈接C++運行時庫和一些核心的win32庫,鏈接器subsystem參數為console類型,所以編譯出來的程序會有黑色的控制台窗口作為呈現標準輸入(stdin)和標準輸出(stdout)。

Win32工程:初始代碼模版實現一個簡單的windows窗口,以WinMain作為程序入口,引用了win32Api頭文件和庫,鏈接器subsystem參數為windows,所以生成的程序不帶黑色的控制台,直接使用標準輸入和標準輸出,看不到效果。

mfc工程:本質上是個win32工程,只是默認幫你引用了mfc框架的頭文件和庫,並且程序入口由mfc框架提供,不需要自己寫。


推薦閱讀:

編寫大中型 ERP 系統軟體通常會用到哪些編程工具?
編程零基礎如何學習 Swift?
作為程序員,你在 2015 年都有哪些進步、收穫與成長?

TAG:程序員 | 編程 | C編程語言 | CC | VisualC |