VC 下WIN窗體和MFC窗體的區別

2021-05-28 15:36:10 字數 1750 閱讀 2505

winform 是基於託管c++的,程式設計效率高,開發程式簡單方便,但需要.net支援。且計算機開機後首次執行需要.net支援的程式時需要載入.net執行庫,啟動速度較慢。

mfc在進行設定後就可以生成只需要windows xp以下系統自帶的動態庫就可以執行了,相當於綠色軟體。

win窗體(form),是.net的術語,嚴格來說他不算標準的c++了,而是.net

呵呵,就我的理解來講解mfc和windows窗體程式的區別吧:

首先我要對反對mfc的人一點質疑,很明顯乙個東西存在這麼多年,和肯定有它的道理,何況只要微軟不倒,他的東西就有人用,因為就結合性來說,微軟自己的東西肯定是勿庸置疑的。大家都說mfc封裝得太差,但它的高效性,你們承認不,網易的首席遊戲製作人雲風也說:微軟開發mfc的架構還是有一定的道理。總之一句話:還有很多人在用;

從結果來看,完全一樣

但過程上來看,mfc就要簡單的多。

因為mfc用windows 窗體應用程式寫了很多任務具,可以直接使用,可以讓我們的工作簡化很多

mfc的開發方法和windows 窗體應用程式完全不同。

如果要用,就是先用windows 窗體應用程式先寫成mfc,再進行開發。

執行起來兩者並沒有不同,mfc其實就是封裝了大部分的api,這樣你呼叫乙個mfc函式或new乙個mfc的類相當於呼叫了很多api函式了,這樣就節省了大量的時間了;兩者的開發方法有點不同,mfc注重於現在類的重用;api方法注重於能熟悉使用windows api上。

問:我一直有乙個疑問:在windows應用程式裡面可以輕鬆設定介面(字型、大小、顏色……),怎麼到了mfc應用程式就不行了?

答:因為windows窗體這個說法容易誤導人,應該叫windows forms是.net引入的,可以像c#、vb.net那樣可以拖拽程式設計,.net庫把所有作業系統細節都封閉了,你使用各種控制項的功能時就像vb6那樣時由執行庫代勞很多細節,你不需要知道對話方塊模板或gdi畫刷之類的。不過程式是解釋執行的,而且必須帶.net元件安裝包才能發布。不過一般的程式也能接受。

不過對於vc開發的程式,大多數還是用mfc做的,因為考慮mfc是編譯非解釋,效率更高。如果想用.net完全可以用語法更簡潔的c#,.net下c++自身的很多功能比如指標什麼的就不能隨便用了、vc++.net總有些不倫不類。

不過用mfc比純用windows sdk寫c程式要方便很多了,用sdk寫就是那個「win32專案」,所有控制項的建立和訊息處理都必須自己動手,稍微大一點的程式就很難管理了。而mfc點幾下就能產生乙個sdi/mdi框架,開發效率已經提高很多倍了。對各種windows功能的封裝、文件檢視結構什麼的都大大簡化了繪圖、列印、儲存等操作。雖然是十幾年前就成熟的東西,但是到現在來說還是寶刀未老

你說的沒錯,mfc是不基於.net的,而winform是基於.net的。

用mfc開發的程式經過簡單的設定(設定為靜態連線),其release版本就可以脫離開發環境成為乙個綠色軟體。而winform則不然,它的release版本的軟體需要開發時設定的對應版本及以上版本的.net執行庫的支援才能執行。當然也可以用一些軟體構建乙個虛擬的.net環境,以前的飛信就是這麼做的,可以利用飛信的虛擬環境來將你的winform程式(release版本)脫離windows的.net來執行,但這樣軟體包會變的非常大(約大20m左右)。當然,vista和win7都已經在系統安裝時整合了.net,所以xp以上的系統不必考慮.net的支援。

其實mfc是基於visual c++語言的開發,而winform是基於託管c++的開發,也就是說winform程式開發可以簡單認為是通常所說的cli或者是c++/clr。

winform用c#語言來開發比較方便。

MFC獲得主窗體和父窗體指標

mfc程式設計中經常遇到子窗體向父窗體傳遞引數的情況,這就須要獲得父窗體的指標。例 主對話方塊cmymaindlg通過buttonbuttona進入對話方塊cmyparentdlg。cmyparentdlg在通過buttonbuttonb進入對話方塊cmychilddlg。如今須要在cmychild...

構建mfc窗體的簡單示例

複製 如下 include 包含mfc標頭檔案 從mfc的主要框架窗體派生使用者窗體類 class cmywnd public cframewnd 從mfc的應用程式派生使用者程式類 class cmyapp public cwinapp 覆蓋繼承的應用程式初始化虛函式 bool cvcnaxdlf...

vc中透明窗體的實現!!

向對話方塊初始化函式中新增 如下 向對話方塊中新增乙個滑動條和編譯框。並利用classwizard新增變數m slide m edit,新增乙個滑動條響應函式,如下 todo add extra initialization here setwindowpos m hwnd,hwnd topmost...