作者:刘国华
链接: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 贵为宇宙第一,但是当年没有什么大优势。

http://blog.csdn.net/qq_31209383/article/details/57073633

VCL比MFC好在哪里的更多相关文章

  1. MFC-消息分派

    前言 由于工作需要,这几天学了一点MFC,在AFX里看到很多熟悉的东西,如类型信息,序列化,窗口封装和消息分派.几乎每个界面库都必须提供这些基础服务,但提供的手法却千差万别.MFC大量地借用了宏,映射 ...

  2. VCL消息处理机制

    http://www.cnblogs.com/railgunman/archive/2010/12/10/1902524.html#2868236 说到VCL中的消息处理就不能不提到TApplicat ...

  3. SDK,API,DLL名词解释

    SDK (software devalopment kit) 软件开发工具包 : 一般都是一些软件工程师Wie特定的软件包.软件框架.硬件平台.操作系统等建立应用软件时的开发工具的集合. API (A ...

  4. 编译器的未来——我们还需要C++么?

    在未来我们还需要纯C++开发模式么? 随着C++11的诞生,C++已经越来越臃肿,从03的时候就觉得C++实在是太复杂了.以一个合格C++程序员的标准来简单的来说3-5年略有小成,5-8年才可以说自己 ...

  5. API和DLL

    API API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用 ...

  6. 从WinMain开始

    一.抽象渗漏法则 根据Joel的抽象渗漏法则,所有重大的抽象机制在某种程度上都是有漏洞的.Joel举过一个例子: C++字符串类型应该能让你假装字符串是个基本类型,它们尝试“字串很难处理”这个事实抽象 ...

  7. SDK,API概念

    什么是SDK什么是API? SDK 就是 Software Development Kit 的缩写,就是"软件开发工具包". 这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一 ...

  8. 术语-软件-软件开发:SDK(软件开发工具包)

    ylbtech-术语-软件-软件开发:SDK(软件开发工具包) 软件开发工具包(缩写:SDK.外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包.软件框架 ...

  9. C++入门级 一

    如果您想学习电脑编程,却又不知从何入手,那么您不妨看看下面的几种学习方案,可能会给您一些启示吧! 方案一 Basic语言 & Visual Basic 优点 (1)Basic 简单易学,很容易 ...

随机推荐

  1. cocos2d-x 3.0学习游戏笔记的例子《卡塔防》第五步---开始建立游戏界面

    /* 说明: **1.本次游戏实例是<cocos2d-x游戏开发之旅>上的最后一个游戏,这里用3.0重写并做下笔记 **2.我也问过木头本人啦,他说:随便写.第一别全然照搬代码.第二能够说 ...

  2. Service熟人

    Service 为一体的四个分量间(剩余有Activity ,内容提供商,广播),它属于后台工作,能够在后台很长一段时间执行,他没有接口. 首先从使用方式上来说来说 他有两种使用方式: 1.启动式使用 ...

  3. win32命令行小程序获取指定文件夹或者目录下面的所有文件大小,文件数量,目录数量

    #include <Windows.h> #include <stdio.h> #include <tchar.h> LARGE_INTEGER       lgA ...

  4. word 论文排版 —— 按指定格式章节的自动编号

    在word中如何实现章节标题自动编号 标题样式与标题的编号是两个步骤,为标题建立编号是在为标题样式确定的基础后进行的.这是显而易见的,也即只有先定义了多级标题(也可使用 word 自带的标题样式),才 ...

  5. OVS 派OFPT_PORT_STATUS 流程

    依据openflow合约[OFP1.0-38],当从物理端口ovs datapath 添加,改动或者删除的时候.都会先运行详细动作.然后通过ofp_port_status异步消息告知Controlle ...

  6. 【Leetcode】Linked List Cycle II

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...

  7. 怎样一步一步删除(linux &amp; UNIX)环境下 oracle 11g 集群节点

     Deleting a Cluster Node on Linux and UNIX Systems 1.确定要删除的节点,是否active,pinned $ olsnodes -s -t 假设 ...

  8. s3c2410 cs8900a 网卡驱动程序

    /* CS8900a.h */ #define CONFIG_CERF_CS8900A 1 /* * cs8900a.c: A Crystal Semiconductor (Now Cirrus Lo ...

  9. 5 wcf双工

    1 创建两个项目 Wcf_WsDual_Service   Wcf_WsDual_Client 2 Wcf_WsDual_Service   项目中创建 LoginService.cs 的wcf文件 ...

  10. .net元数据

    概要 现在,在.net开发平台计划,其组成编译:IL代码.资源.程序集清单和类型元数据.我们知道,IL代码就是我们编写的代码.资源就是图片文件.xml文件,及其它文件,只有不清楚的是元数据(在这里将程 ...