MFC和GTK的區別

關鍵技術

http://blog.csdn.net/master_max/article/details/1540204

?

?


MFC和GTK的區別??

1.  兩者都是基于面向對象設計的。盡管MFC是用C++寫的,而GTK+是用C寫的,但思想都是面向對象的。GTK+使用glib的對象機制,由于用C寫的,其實現相對有點繁瑣。
  2.  兩者都是基于消息驅動的。這是GUI系統的共性,消息可以是硬件上報的,如鼠標事件、鍵盤事件和觸摸屏等等,也可以是程序產生,如一個窗口給另外一個窗口 發送了一個消息。但兩者并不完全相同,GTK+通過select掛在多個文件描述符上,可以同時等待多個事件源,比如socket、子進程退出和內核事件 等等,而MFC只能通過GetMessage掛到消息隊列上。
  3.  兩者都不是線程安全的,即只有一個線程可以操作GUI資源。主要是出于性能的考慮,這個問題不大,因大多數應用程序都是單線程的。而且它們都提供一些機 制,讓其它線程可以在必要時操作GUI資源。在GTK+中可以通過idle函數來實現,在MFC中可以通過PostMessage來實現(附帶說明一下: Win32原生的GUI API是線程安全的)。
  4.  GTK+整合了一系列的基礎函數庫,功能強大,而MFC孤軍做戰,勢單力薄。Glib是GTK+的基本庫,里面實現了常見的容器和算法,可謂應有盡有,同 時隔離了平臺相關的功能。Pango是GTK+用于文字渲染的函數庫,它負責控制不同文字的layout布局,而把字模的繪制交給freetype等字體 函數庫處理。MFC雖然實現了一些容器,但數量不多也不好用,除了對原生GUI API的包裝外,沒提供多少其它功能,與Microsoft Foundation Class Library這個名稱一點都不相稱。
  5.  GTK+是跨平臺的,而MFC則不是。GTK+在設計時就考慮了可移植性,它按分層模型來組織整個系統,Glib封裝了依賴于OS平臺的函數,提供一套抽 象的接口,在不同的平臺有不同的實現。GDK封裝了依賴于輸入/輸出設備的功能,如鍵盤事件的獲取和顯示緩沖的輸出,同時實現了基本的繪圖功能。GTK+ 幾乎可以在所有PC平臺下運行,而MFC從來都沒有考慮過可移植性,它是與Win32 GUI綁定在一起的。
  6.  GTK+小巧,而MFC笨重。GTK+編譯出來的可執行文件約3M左右,而MFC本身雖然不大,但它各種版本加在一起就可觀了。MFC有ansi版本、有 unicode版、有debug版、有release版、還有一些組合,如果你因此而暈倒了,那是很正常的。
  7.  GTK+的使用簡單,MFC的使用繁瑣。GTK+的使用比較簡單,即使在沒有工具的幫助下,要寫一個GTK+的應用程序也不難,實際上絕大多數GTK+應用程序都是一行代碼一行代碼的敲出來的。而MFC的使用則太麻煩了,很難想象沒有VC的向導的幫助,寫一個基于MFC的應用程序。即有了VC的向導,仍有大量的程序員說MFC很難用。
  8.  GTK+使用signal機制,解開消息源與消息目標之間耦合。而MFC使用消息,將消息源與消息目標硬編碼在一起。Signal的好處是,不需要知道目 標是誰,誰關心誰就注冊,這種出版訂閱機制是解耦的最佳方式。而MFC的消息則是必須知道目標是誰,把消息源與消息目標死死的綁在一起。MFC提供了一套 文檔/視圖框架,實現了類似出版訂閱的功能,這本是設計者引以自豪的東西,結果因為太復雜不能被人理解,反而為開發人員所詬病。
  9.  GTK+采用layout機制動態計算各子窗口的坐標位置,自適應屏幕大小的變化。而MFC要求子窗口的坐標位置硬編碼,結果要適應不同分辨率的屏幕非常 困難。GTK+在窗口布局時分為兩個階段,第一個階段父窗口先詢問子窗口的最佳大小,第二個階段父窗口根據自己的大小計算子窗口的實際大小,子窗口根據實 際大小進行調整。
  10. GTK+采用容器機制來合理分離控件的職責,MFC沒有容器這個概念,很難實現遞歸組合。GTK+中差不多所有控件都是容器,都可以容納其它任何控件,而 MFC只有頂層窗口才是容器,可以容納其它子控件。容器這個概念對代碼重用的影響非常之大,這里舉兩個例子:其一是帶圖片的按鈕 (BitmapButton),在GTK+中它就是GtkImage和GtkLabel的組合,而在MFC中,圖片和文字都要自己繪制。前者的 GtkImage和GtkLabel可以在很多地方重用,而后都的繪制代碼和事件處理代碼只有自己才能使用。其二是列表框,在GTK+中,它只是一個容 器,你可以向里面放編輯器、下拉框和其它任何者你想得到的控件。而在MFC中,即使只是實現一個不同外觀的列表框,你都要采用自繪的方式,代碼重用非常困 難,向列表框中加入其它控件就更麻煩了,要使用一些非同尋常的手段不可。
  11. GTK+采用容器機制優先使用組合而不是繼承,符合現代設計的原則。MFC強制使用繼承,使用麻煩而且耦合緊密。GTK+應用程序不需要繼承任何窗口。 MFC應用程序必須繼承對話框或者其它頂層窗口才行,雖然可以采用中介者模式,把控件之間的交互集中在頂層窗口中,不需要繼承控件,但仍然很麻煩。

轉載于:https://www.cnblogs.com/fickleness/p/3148843.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378225.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378225.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

視頻圖像質量評價

目錄1、人眼視覺特性1、眼的適應性2、對比靈敏度3、空間分辨率和時間分辨率4、馬赫效應5、可見度閾值2、圖像質量測度3、圖像評價方法4、圖像評價方法的優劣1、人眼視覺特性 1、眼的適應性 暗適應性:從亮環境到暗環境,適應暗環境的特性 亮適應性&#…

鴻蒙科技與文化,數字閱讀 | “華為鴻蒙”:當現代科技遇到古典文化

華為事件愈演愈烈。海思芯片 20 年 " 備胎 " 終轉正,那么操作系統呢?最近,華為為自主研發的操作系統注冊商標—— " 鴻蒙 ",引發了關于華為注冊整本《山海經》的熱烈討論,很多人的朋友圈&#xff…

三、Beautiful Soup解析庫

一、Beautiful Soup介紹與安裝 1,Beautiful Soup介紹 答:Beautiful Soup是一個可以從HTML或XML文件中提取數據的Python庫 2,Beautiful Soup安裝 答:安裝Beautiful Soup 4:pip install bs4 安裝lxml:pip…

strictmath_Java StrictMath sqrt()方法與示例

strictmathStrictMath類sqrt()方法 (StrictMath Class sqrt() method) sqrt() Method is available in java.lang package. sqrt()方法在java.lang包中可用。 sqrt() Method is used to find the square root of the given parameter in the method. Here, "sqrt" st…

recovery編譯問題匯總

1、修改支持USB大容量存儲 (1)、首先需要查看手機lun位置 手機鏈接電腦,打開cmd命令行,依次輸入以下命令: adb shell find /sys -name "lun" 輸出以下結果: 發現手機輸出結果有兩個,需要進一步查…

言語理解每日學習及精解20110831

【例題】天氣預報一般要考慮氣溫、氣壓、溫度、風力等因素,這些都是大氣層本身變化的結果,只要掌握這些因素,通過計算機的計算就能準確地預報天氣變化的趨勢。沙塵暴作為一種特殊的天氣現象,同樣要考慮上述氣象因素。據氣象學家分…

【數據結構基礎筆記】【棧】

代碼參考《妙趣橫生的算法.C語言實現》 文章目錄前言1、棧的定義2、創建一個棧3、入棧和出棧操作4、棧的清空、銷毀、計算棧的當前容量5、實例分析前言 本章總結:棧的定義、創建棧,銷毀棧,入棧出棧操作等操作。 1、棧的定義 棧是一種重要的…

四、正則表達式

一、正則表達式的概念和作用 正則表達式概念:一種字符串匹配的模式 正則表達式作用: 可以檢查一個字符串中是否包含某種字串替換匹配的字串提取某個字符串中匹配的字串 二、正則表達式中常見的語法 字符描述原樣字符匹配字符一般字符匹配自身beyondb…

用HTML語言制作list標記,html5 datalist標簽的用法是什么?這里有datalist標簽的用法實例...

本篇文章主要為大家講述了關于html5 datalist標簽的用法及html5 datalist標簽的用法實例。本文說了兩個常用的選項框的實例供大家選擇觀看,下面就讓我們一起來看這篇文章吧我們先來看看html5 datalist標簽的用法:標簽定義選項列表。請與input元素配合使用…

java treemap_Java TreeMap lastKey()方法與示例

java treemapTreeMap類lastKey()方法 (TreeMap Class lastKey() method) lastKey() method is available in java.util package. lastKey()方法在java.util包中可用。 lastKey() method is used to return the last highest key element value exists in this TreeMap. lastKey…

網上看來的

http://blog.163.com/dong_xiao_yang/blog/static/216138205201321114659430/ http://ffmpeg.org/trac/ffmpeg/wiki/How%20to%20compile%20FFmpeg%20for%20Raspberry%20Pi%20%28Raspbian%29#FFmpegwithlibaacpluslibx264andalsa-lib 編譯環境 Ubuntu 12.04 w64-mingw32下載lib…

閱讀iPhone.3D.Programming(O'Reilly.2010-05) 英文版 第一感覺

最近開始閱讀iPhone.3D.Programming(OReilly.2010-05),英文版此書,我閱讀到P21了,中間講了一個樣例,HelloArrow在這個過程中,我想簡單點,少打點字,直接拿書中配套來學習,發現一個問題…

【數據結構基礎筆記】【隊列】

代碼參考《妙趣橫生的算法.C語言實現》 文章目錄前言1、隊列定義2、創建一個隊列3、入隊列4、出隊列5、銷毀一個隊列6、循環隊列的概念7、循環隊列的實現8、實例分析前言 本章總結:鏈隊列定義,創建,出隊入隊操作,銷毀操作&#x…

html圖片自動循環輪播圖,js實現圖片無縫循環輪播

本文實例為大家分享了js實現圖片無縫循環輪播的具體代碼,供大家參考,具體內容如下代碼如下Document#container{overflow:hidden;width:400px;height:300px;margin:auto;}#front,#container{display:flex;flex-direction:row;}#container img{width:400px…

五、json模塊

一、json模塊的介紹 json模塊是Python自帶的模塊,用于json和Python數據之間的相互轉換 Json與Python數據類型的對應關系 JsonPythonobjectdictarrayliststringstrnumber(int)int,longnumber(real)floattrueTruefalseFalsenullNone [#中括號括起來的,對…

Android開發和調試必備工具-SDK Tools

原文鏈接:http://android.eoe.cn/topic/android_sdk SDK Tools是Android SDK的一個可下載部分,它包括Android SDK的開發和調試的所有工具。 如果你剛剛了解SDK,你可以從SDK starter package下載最新版本的SDK。 如果你已經在使用SDK&#xff…

strictmath_Java StrictMath ceil()方法與示例

strictmathStrictMath類ceil()方法 (StrictMath Class ceil() method) ceil() method is available in java.lang package. ceil()方法在java.lang包中可用。 ceil() method is used to return the least or smallest value of the double type value which is greater than or…

web應用之文件上傳

一、Jakart:Jakart文件上傳:(推薦使用) import java.io.File;import java.io.IOException;import java.util.List; import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletReq…

【數據結構基礎筆記】【樹】

代碼參考《妙趣橫生的算法.C語言實現》 文章目錄前言1、樹的概念2、二叉樹3、二叉樹的遍歷4、創建二叉樹5、實例分析前言 本章總結:樹的概念、二叉樹的創建、遍歷 1、樹的概念 樹結構是以分支關系定義得一種層次結構。 樹的定義:樹是由n(n>0)個結點…

可以自動撐起的html樣式,好好玩:CSS3抖動樣式CSS Shake讓你的網頁酷炫起來

之前在一些網站發現了一個好玩的樣式,就是鼠標移到網站LOGO上,logo會自動抖動起來,顯得非常炫酷。我也是十分感興趣。自從本站新添加了一個視覺設計的分類之后,我也是想起來有個抖動CSS樣式CSS Shake,所以今天給小伙伴…