作者:刘国华
链接:https://www.zhihu.com/question/35218485/answer/118472021
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
从使用感受而言,VCL甩MFC不知道多少条街,VCL虽然是基于Pascal实现的,然后C++Builder又在上面套了一层C++的壳,但是对于使用C++的人来说,已经非常好用了。记得当时(2002年左右)是在书店无意间看到一本介绍C++Builder的书,翻开看了看,感觉像是发现了宝贝:“原来C++开发工具还有这么好用的!”
总体来说,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
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
我以前用过一阵 bcb6,体会到的 vcl 优势大概如下:
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 贵为宇宙第一,但是当年没有什么大优势。