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 简单易学,很容易 ...
随机推荐
- CentOS7查看开放端口命令
CentOS7查看开放端口命令 CentOS7的开放关闭查看端口都是用防火墙来控制的,具体命令如下: 查看已经开放的端口: /tcp --permanent 命令含义: –zone #作用域 –a ...
- hadoop 3.x org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/":tele:supergroup:drwxr-xr-x
权限不足,上传文件时应当使用启动hadoop的账户,即在获取FileSystem时就应当指定用户 修改后的代码 public class Demo1 { public static void main ...
- Android中数据库和安装包分离
我们在做Android应用尤其是商业应用的时候,很多时候都需要后期版本升级,如果我们的数据库文件非常大,比如游戏之类的,这时候就不应该每次版本更新都去重新复制数据库.将数据库和安装包分离,下面来详细介 ...
- yii2框架学习一 yii安装与常见问题
1 安装安装有两种 cpmposer 喝归档文件 安装 这里采用的归档文件安装 归档文件安装分为两种 基础末班和高级模板,这里采用高级模板 在官网或者yii-china 下载归档文件 解 ...
- oracle 数组
定义一个长度为5的字符串数组 type str_array is varray(5) of varchar2(30); v_str_array str_array := expr_key_array( ...
- Web 程序的建立
1 导读 web 基础研发体系指的是, web 研发中一线工程师所直接操作的技术.工具,以及所属组织架构的总和.在过去提升企业研发效能的讨论中,围绕的主题基本都是——”通过云计算.云存储等方式将底层核 ...
- Android 开发新方向 Android Wear ——概述
2014 谷歌 I/O大会正式公布的Android Wear 开发理念,从而能够更系统的提供开发人员使用Android接口开发便携式可穿戴设备,以智能手表为例,通过Android提供的接口,能够方便的 ...
- 通用javascript脚本函数库
/* 名字:Common.js 功能:通用javascript脚本函数库 包括: 1.Trim(str)--去除字符串两边的空格 2.XMLEncode(str)--对字符串进行XML编码 3.Sho ...
- VS编译环境中TBB配置和C++中lambda表达式
TBB(Thread Building Blocks),线程构建模块,是由Intel公司开发的并行编程开发工具,提供了对Windows,Linux和OSX平台的支持. TBB for Windows ...
- 《网络编程》ioctl 操作
概要 ioctl 功能与 fcntl 功能类似,它可以被用于描述操作的叙述字符,获取或设置属性的描述是开放式的叙事休息,但在网络编程的两个功能有关的不同类型的操作.fcntl 作.文件操作,而 ioc ...