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 简单易学,很容易 ...
随机推荐
- 【BZOJ 1017】 [JSOI2008]魔兽地图DotR
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1017 [题意] [题解] 设f[i][j][k] 表示第i个节点以下的总花费为j, 然 ...
- 【a603】加工生产调度
Time Limit: 1 second Memory Limit: 32 MB [问题描述] 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加 ...
- Running as a packaged application--- -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n
19.2 Running as a packaged application If you use the Spring Boot Maven or Gradle plugins to create ...
- JAVA SortedMap接口
SortedMap接口主要提供有序的Map实现. Map的主要实现有HashMap,TreeMap,HashTable,LinkedHashMap. TreeMap实现了SortedMap接口,保证了 ...
- PHP设计模式——迭代模式
声明:这一系列的博客引用<大话设计模式>.程洁作者. 迭代器模式:迭代器模式是遍历集合的成熟模式.迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对 ...
- android制,点击EditText时刻,隐藏系统软键盘,显示光标
由于项目中要用自己定义的随机键盘,所以必须得屏蔽系统软键盘,可是在4.0的測试系统来看,使用editText.setInputType(InputType.TYPE_NULL)方法固然能隐藏键盘,可是 ...
- matlab 小波处理工具箱
1. wavedec:多尺度(multilevel)一维小波分解 [C,L] = wavedec(X,N,'wname') [C,L] = wavedec(X,N,Lo_D,Hi_D) 返回值 L(b ...
- javascript 中英文字符长度和截断处理
因:javascript中的String类自带的length属性 和 substr()方法虽然能判断和截取出字符个数,但是对字节个数却没有处理的方法(众所周知,中文字符占两个字节,英文只占一个) 果: ...
- 1-5设定NetCore监听端口
问题的起源:启动一个.netCore项目,默认使用的是5000端口,当我们有很多个项目的时候(集群),不可能都使用5000端口. 方法1:set ASPNETCORE_URLS=http://127. ...
- 给WPF文字加多条修饰线
原文:给WPF文字加多条修饰线 这是上篇WPF中的文字修饰--上划线,中划线,基线与下划线 最后留给朋友思考的问题. 效果图: XAML代码:<Page xmlns="http://s ...