鱼C论坛

 找回密码
 立即注册
查看: 10017|回复: 36

MFC是怎样封装API函数的

[复制链接]
发表于 2013-11-19 22:12:01 | 显示全部楼层

认真看windows程序设计5,认真看这一本书抵得上其它的10本书。用SDK写界面不难,你觉得难的话,去看MFC肯定觉得更难。只要看明白了,一般的小问题就能自己解决了,至于示例,相信此书上的实例你还有很多没搞明白,不然怎么会觉得SDK写很难呢?
MFC写小程序开发速度不一定比得上SDK,灵活性显然更差。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-22 21:12:58 | 显示全部楼层
风のQ 发表于 2013-11-22 09:06
窗口的封装
mfc底层有个窗口基类叫CWnd, 前台见到的窗口都是继承与他, 这个类的模型简单点可以如下表示
...

呵呵,对于MFC刚产生时期的电脑来说,速度非常慢,所以将消息处理实现为虚函数会导致处理速度严重下降。但是,现在计算机速度快了,经得起这一点的性能损耗,所以反而显得MFC的做法不合时宜了。
诸如:
DECLARE_MESSAGE_MAP()段

BEGIN_MESSAGE_MAP(CADlg, CDialogEx)
END_MESSAGE_MAP()
这些宏,是非常招人讨厌的。因为这不是C++语言,利用宏来搞一套自己的语言有意思么?有意思的话还不如不用C++来完成那个这个任务,刚崔换种语言不是更好么?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-22 23:48:08 | 显示全部楼层
风のQ 发表于 2013-11-22 21:52
也许有这些原因在里面, 到那时不得不说,他的这套框架式属于扩展性较好的,假如后期新增了windows消息, ...

不用改?不增加windows消息,MFC只要处理任何消息都要改。比如在
BEGIN_MESSAGE_MAP(CADlg, CDialogEx)
END_MESSAGE_MAP()之间写一堆的Onxxx这些就是对程序的修改,只不过是利用宏的特性使得这些修改看起来很小而已。
事实上,MFC废弃C++的虚拟函数表不用,自己在很多类里添加消息转发功能(其实就是添加static 元素取代原来的C++虚函数表),并以几个宏维护这些功能,这本身就像是在自己创建一个新的语言。既然要花如此大的代价来实现这样的功能,只能说明,C++语言不适合MFC的这种框架。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-26 21:37:51 | 显示全部楼层
风のQ 发表于 2013-11-26 08:31
你这样说也对。只能说我们能看到的问题,微软肯定也能看到,但是到了vs2010还是那套框架。总归是有他的道 ...

我个人认为不改不是因为MFC结构合理,而是
1.很可能是为了维护之前已经存在的代码
2.现在MS不是推出.NET,想解决windows平台下的各种语言相互无缝使用的问题么?其中尤其以C#这种MS推出的语言最受MS推崇,.NET最完整无缺的语言啊。大哥看看C#语言的设计,显然MS已经放弃了MFC这种通过怪异设计谋求效率的方式。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-26 21:46:07 | 显示全部楼层
拈花小仙 发表于 2013-11-26 18:32
啊,我是女的,您能说说MFC类中,哪个类对应哪些函数吗?都是做什么的吗?

我觉得没有一定功力直接研究MFC很不合适。首先windows的消息机制就是一个很难逾越的障碍;接着,你认为凭着国内的那些垃圾C++教程写的玩具程序,能够培养出者的面向对象思想?所以面向对象思想又是一个很难逾越的障碍。
有这两个大障碍在,基本不可能学得很明白的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-27 18:35:38 | 显示全部楼层
拈花小仙 发表于 2013-11-27 00:19
哦哦,我主要是看了达内的教程,达内这教程讲的细致点,一边看调试中的源码,一边看怎么实现。好难懂,又 ...

       windows程序设计5的大部分内容其实就足够应付一般的应用了。MFC要掌握得好要花费大量的时间,并且你是否真的需要MFC呢?任何有界面的东西都依赖MFC,常常就像拿着大炮去打苍蝇。作为个人应用,我强烈推荐直接用windows程序设计教的SDK直接开发:程序又小,又清晰。
       面向对象仅仅只是一种技术而已,并不是用了这个技术就有多了不起。面向对象的精髓是能够很好的适应项目将来的变化。我觉得对于个人的小应用,基本完成了玩几天,以后再也不动它的程序(大家应该大部分编的都是这种程序吧?)为什么要用面向对象?用了不仅不能得到面向对象的好处,反而得到了它所有的坏处,比如难学啊,体积大啊,一旦出了问题完全不知道要怎么解决等等。所以自己玩玩根本不需要面向对象,也就也不需要MFC了。当然,如果你将来希望靠去公司写程序为生,那就要学会MFC等的程序库。
       总之,任何语言,任何技术,任何程序库都是人们为了达到目的而采用的工具,应当根据自己的实际需求选择合适的工具,不要整天拿着大炮就以为自己天下无敌了。你认为大炮打苍蝇比苍蝇拍打苍蝇更方便吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-28 13:26:12 | 显示全部楼层
拈花小仙 发表于 2013-11-28 02:29
想通过学习MFC,做了实例,了解SDK中到底有多少库函数,看他们是怎么应用的,也有助于SDK编程吧?我不懂, ...

你要先解决根本的问题,这个问题就是windows消息机制的理解。这个问题MFC的书必然是一下带过的,这个难关不过,windows编程就没戏。所以就认真看windows程序设计5就是了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-28 02:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表