关键技术

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

MFC和GTK的区别相关推荐

  1. Win32控制台应用程序,Win32项目,MFC应用程序的区别与联系

    Win32控制台应用程序,Win32项目,MFC应用程序的区别与联系 Win32控制台程序 初始化代码模板以Main为程序入口,默认情况下,只链接C++运行时库和一些核心的Win32库,链接器subs ...

  2. [COM/ATL]组件、对象、MFC、ATL的区别

    组件(Component)和对象(Object)之间的区别 先明确组件(Component)和对象(Object)之间的区别.组件是一个可重用的模块,它是由一 组处理过程.数据封装和用户接口组成的业务 ...

  3. 【转】MFC与.NET的区别

    1.     MFC是在API的基础上封装出来的一个类库,给C++程序员在Windows上快速开发用的. .Net类库是在Windows非托管API的基础上封装出来的一个托管类库,给程序员在各种Win ...

  4. ATL CLR MFC Win32 常规 的区别

    ATL用于编写COM程序,CLR是.NET的公共语言运行库,MFC是指MFC类库,MFC程序是用这些类库做出的程序,WIN32常规就是不用 MFC,使用API函数编的程序. MFC.ATL和CLR是V ...

  5. PHP框架之间有什么区别,php框架和设计模式区别

    框架和设计模式的区别 有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式.实际上它们完全是不同的概念. 框架.设计模式这两个概念总容易被混淆,其实它们之间还是有区别的.(推荐学习:PH ...

  6. 框架和设计模式的区别

    框架和设计模式的区别 有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式.实际上它们完全是不同的概念. 框架.设计模式这两个概念总容易被混淆,其实它们之间还是有区别的.框架通常是代码重 ...

  7. 框架模式和设计模式的区别

    框架模式和设计模式的区别 有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式.实际上它们完全是不同的概念.[7] 框架.设计模式这两个概念总容易被混淆,其实它们之间还是有区别的. 框架 ...

  8. 框架模式与设计模式之区别

    http://my.oschina.net/u/991183/blog/109854  有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式.实际上它们完全是不同的概念. 框架.设计模式 ...

  9. VC++中操作XML(MFC、SDK)

    VC++中操作XML(MFC.SDK) XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++里操作 ...

最新文章

  1. c语言形参的隐含存储类型,C存储类型
  2. hdu-3635 Dragon Balls(并查集)
  3. 下拉多选择框 实现方式_非极大值抑制Non-Maximum Suppression(NMS)一文搞定理论+多平台实现...
  4. HTML基础(part7)--常用标签之超链接标签
  5. system.gc会立即执行垃圾回收吗_JVM基础到实战03-垃圾回收概念
  6. 18张颠覆三观的照片!
  7. 设计模式学习笔记——访问者(Visitor)模式
  8. Android多线程的使用
  9. linux less从后向前查看日志信息
  10. 【汇编语言与计算机系统结构笔记18】MIPS指令集与汇编程序设计 异常处理
  11. 使用scrapy的定制爬虫-第三章-爬虫的javascript支持
  12. VS2005 中文版下载
  13. vue 动态背景图轮播
  14. android 手势高度,克制的 Android 手势插件:滑动 Home 键
  15. linux源码rm函数,linux的rm命令源码
  16. 远心镜头与普通镜头拍摄工件孔径对比
  17. Hadoop之MRjob入门
  18. word办公插件中的佼佼者,Word魔方
  19. 安全模式启动电脑和正常启动有什么区别
  20. 微软认证一览表(附图)

热门文章

  1. hibernater面试一
  2. xshell最多支持4个_中集拉钢卷专用挂车来了!自重5吨,最多能装4个钢卷
  3. python我想对你说_python学习第3天-----字典、解构
  4. apk去除签名验证工具安卓版_App 签名过期或泄露怎么办?别担心,Google 已经给出解决方案!...
  5. 产品认识:一个可直接套用的产品分析框架(纯干货)
  6. 从数学的角度来谈谈,孩子为什么要学编程!
  7. tez什么意思_传统数仓和大数据数仓的区别是什么?
  8. nginx配置多个server_Nginx基本属性配置详解
  9. java 短路判断_java中和的区别(|和|同理)
  10. 怎么判断前轮左右的位置_新手开车技巧,确定前轮位置,准确判断与障碍物距离...