VCL比MFC好在哪里
链接:https://www.zhihu.com/question/35218485/answer/118472021
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
总体来说,VCL与MFC大概有下面的区别:
1. 支持可视化开发。这种可视化不是VC里那种对话框里摆几个控件那种,而是所有的组件都可以摆在窗口上,通过设置属性就可以做出想要的界面,而用MFC的话,需要手写代码来完成。当然,这种特性有赖于Borland对C++编译器的扩展,它的编译器可以生成类型反射信息,使得开发环境可以获得组件的类型信息并在设计器动态创建对象和设置组件的属性。
2. 包装度高。如果不是开发涉及到系统底层的功能,就几乎不怎么需要直接使用API函数,拖拖拉拉,设置几个属性,调几个方法,界面、网络访问、数据库之类的程序就做成了。而MFC的类型几乎都是对API中的对象类型的简单包装,使用类的函数基本上和直接调API没太有区别。做到这一点,也和编译器的扩展是分不开的,Borland在C++Builder编译器中加入了__property, __closure关键字,实现了简单易用的属性和事件机制。
3. 组件丰富。不管是VCL自带的组件还是第三方组件,都非常丰富,关键是第三方组件安装好,也可以和自带组件一样拖拖拉拉放到界面上,当时出现了大量的第三方组件,功能应有尽有,使得开发难度进一步降低了。
4. 运行效率。VCL框架包装比较厚,天生编译出来就比MFC程序要大,加上启动时需要初始化的东西也比较多,理论上加载速度也要慢些。不过实际使用中没觉出太大差异。
现在想想,除去跨平台之外,VCL和MFC的差异基本上就是QT和MFC的差异,QT是在标准C++的基础上自己做了个预处理器实现了类型反射信息、信号-槽、属性机制等,VCL是自己做了个定制版的C++编译器。
链接:https://www.zhihu.com/question/35218485/answer/67441702
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
1,vcl 虽然是一个 delphi 库,但是基于它的 bcb 版 vcl 看起来比 mfc 更像 c++,没有那么多古怪的宏,什么 dynamic_class,什么消息影射,真忍不了。在 vcl 里,至少你早期不用接触这些。
2,borland c++ 作为一门方言,确实有一些很好用的特性。比如增加了一个 __closure 关键字,使得在 borland c++ 中实现委托变得非常简洁。在比如 borland c++ 中运行时类型信息比标准 c++ 丰富,可以一定程度上实现反射。
2,vcl 有一个实际可用的 UI 排版系统和 UI 设计器。如果不在乎 TPanel 太多导致窗口句柄太多的话,vcl 的排版可能比 Qt 的还好用。用 vcl 开发,你可以真的靠拖控件写出一个能用的能卖的桌面软件,我曾经就靠着拖控件开发过一个桌面视频监控软件,虽然不是卖的,但也是随硬件分发给用户的,几十个对话框和 frame,全是靠拖控件拖出来的,整个项目只开发了一个自定义组件。我要是用 mfc 完成同样规模的功能,光处理 resize 之后的排版就得累死。
3,vcl 的组件更容易使用,尤其是 list 和 tree 那一系列,mfc 里面那几个太难用了。在 mfc 里想给 listview 设置个间隔色,你得自绘!
4,vcl 有丰富的第三方组件库,可用性和质量不低于官方,提供了非常丰富的扩展功能。基础的 jcl 和 jvcl,网络的indie,还有商业组件库 BussinessSkinForm 等,这些库的易用性太好了,直接拖控件拖到界面上就能用。虽然这种方法有局限,但是中小型项目真心无敌。
5,早年的 cnpack 比 va 功能丰富,添加了 cnpack 的 delphi7 和 bcb6,比添加了 va 的 vc6 要更好用。现在visual studio 贵为宇宙第一,但是当年没有什么大优势。
http://blog.csdn.net/qq_31209383/article/details/57073633
VCL比MFC好在哪里的更多相关文章
- MFC-消息分派
前言 由于工作需要,这几天学了一点MFC,在AFX里看到很多熟悉的东西,如类型信息,序列化,窗口封装和消息分派.几乎每个界面库都必须提供这些基础服务,但提供的手法却千差万别.MFC大量地借用了宏,映射 ...
- VCL消息处理机制
http://www.cnblogs.com/railgunman/archive/2010/12/10/1902524.html#2868236 说到VCL中的消息处理就不能不提到TApplicat ...
- SDK,API,DLL名词解释
SDK (software devalopment kit) 软件开发工具包 : 一般都是一些软件工程师Wie特定的软件包.软件框架.硬件平台.操作系统等建立应用软件时的开发工具的集合. API (A ...
- 编译器的未来——我们还需要C++么?
在未来我们还需要纯C++开发模式么? 随着C++11的诞生,C++已经越来越臃肿,从03的时候就觉得C++实在是太复杂了.以一个合格C++程序员的标准来简单的来说3-5年略有小成,5-8年才可以说自己 ...
- API和DLL
API API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用 ...
- 从WinMain开始
一.抽象渗漏法则 根据Joel的抽象渗漏法则,所有重大的抽象机制在某种程度上都是有漏洞的.Joel举过一个例子: C++字符串类型应该能让你假装字符串是个基本类型,它们尝试“字串很难处理”这个事实抽象 ...
- SDK,API概念
什么是SDK什么是API? SDK 就是 Software Development Kit 的缩写,就是"软件开发工具包". 这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一 ...
- 术语-软件-软件开发:SDK(软件开发工具包)
ylbtech-术语-软件-软件开发:SDK(软件开发工具包) 软件开发工具包(缩写:SDK.外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包.软件框架 ...
- C++入门级 一
如果您想学习电脑编程,却又不知从何入手,那么您不妨看看下面的几种学习方案,可能会给您一些启示吧! 方案一 Basic语言 & Visual Basic 优点 (1)Basic 简单易学,很容易 ...
随机推荐
- 课后作业 04 --DateTime应用,判断多久后生日之类
try { Console.Write("请以年-月-日的形式输入您的生日:"); string strA = Console.ReadLine(); DateTime bir = ...
- radio选择事件 onchange事件 onclick事件
单选框按钮(radio)选择事件怎么设置呢? 既可以在radio标签里设置onclick事件实现,也可以设置它的onchange事件实现,效果一样,代码如下: <input id="r ...
- CodeBlocks 配色方案设置
最终效果(官方sublime修改版) 官方配色 codeblocks是一个功能很强大编程软件,我们在安装codeblocks后软件默认的是白底黑字界面,这种界面在长时间写代码时会对眼睛造成很大伤害,增 ...
- CentOS7查看开放端口命令
CentOS7查看开放端口命令 CentOS7的开放关闭查看端口都是用防火墙来控制的,具体命令如下: 查看已经开放的端口: /tcp --permanent 命令含义: –zone #作用域 –a ...
- AndroidStudio使用properties资源文件
在Android项目开发中,为了一些公用资源使用方便,可以在assets资源文件夹中将需要用到的资源写成.properties或者.json的文件形式,并进行读取使用.在做html5+javascri ...
- java写文件时往末尾追加文件(而不是覆盖原文件),的两种方法总结
代码如下: import java.io.FileWriter; import java.io.IOException; import java.io.RandomAccessFile; public ...
- ie height
苦恼我许久了,为啥在IE中设置div的height属性无效呢... 在网上查了,常用解决是设置line-height或者设置overflow:hidden,不过我这个div用来定位的,一是里面没文字, ...
- WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口)
原文 WPF 同一窗口内的多线程/多进程 UI(使用 SetParent 嵌入另一个窗口) WPF 的 UI 逻辑只在同一个线程中,这是学习 WPF 开发中大家几乎都会学习到的经验.如果希望做不同线程 ...
- 微信公众平台中临时二维码的scene_id为32位非0整型
原文:微信公众平台中临时二维码的scene_id为32位非0整型 微信公众平台中临时二维码的scene_id为32位非0整 ...
- iOS8的APP过渡过程
1. 2. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWluX3hpYW53ZWk=/font/5a6L5L2T/fontsize/400/fill/ ...