查看: 1672|回复: 23
|
MFC 教程,当说还是不当说
[复制链接]
|
|
发表于 23-8-2004 02:29 AM
|
显示全部楼层
哈哈,你所说的都是该说的,网络上如果连言论自由也没有,那不如睡觉去好了。
对于我的MFC 基本教程,我的确做了个错误,就是没有注明清楚几点。
在第一篇我有写着:
Note for CARI forum
Many of my friend still think that you can only do a dos like program with c and c++. This show the problem of the IT educatoin in local colleges and university.
Thus, base on my experience, I hav written this simple tutorial to help these people to do a GUI program in C++.
我的对象群其实就是学过C++写CONSOLE PROGRAM 的学生,而现在想要学如何用C++写GUI 的。
其实我本人也并不喜欢使用MFC(不,因该是VS 的MFC WRAPPER),这可以从第一篇的REMARK 看出:
You have just learnt the simplest way on earth to create a GUI Application.
What visual studio did is generating those important GUI code and there are hidden.
Accidentally change them will ruin your whole program. This is really annoying.
把这教程在CARI 分享最主要是希望让上来这里的初学者明白C PROGRAMMING 并不只是可以写CONSOLE PROGRAM 而已 的,算是给他们的一种EXPLOSURE 吧。
我一直也相信要学深的东西要先从浅开始,所以这个教学放了许多SCREEN SHOT。
也许我也很喜欢GRAPHIC吧,一看见长篇是字的文章通常都会避之。
说实在的我很害怕读者看了我的TUTORIAL 后,照着TUTORIAL 的步骤乱乱在VC按按,便可以写出一个GUI APPLICATiON 而以为GUI 的制作是那么容易的。我把这问题解决方式寄放在他们读了TUTORIAL 后,做了个SIMPLE 的WINDOW,会好奇的看看HIDDEN 的CODE,从而发现内部结构,对MFC 更了解。当然,这不是每个人都会去做的事。
简单地说:概念的东西,只有体会才会深刻。我的TUTORIAL,包了一层糖衣,目的是希望吸引人们去读,去作,并从中知道原来有这么一回事,再慢慢去体会和发掘。
dark_heaven,我们的目的都是一样的,是手法不同而已。哈哈,我的MFC TUTORIAL 还没写完,在下一篇会提醒读者要自己去深入研究和体会。放心吧,,没人针对你啦。
[ Last edited by exiang on 23-8-2004 at 02:31 AM ] |
|
|
|
|
|
|
|
发表于 23-8-2004 09:10 AM
|
显示全部楼层
dark_heaven 于 23-8-2004 12:41 AM 说 :
一只小鸟看地图
鸟瞰图是很重要的,(我已经喝了三瓶酒了,酒后算是句句出自肺腑之言。当然,废言居多,呵...) 套一句施纯协对他学生常用的一句话 "进入树林前,应对整座树林 有一清晰的轮廓",武松若是没被提醒岗里有老虎 ...
心得一,看来候捷的书的确是很不错。可惜在本地书店(POPOLAR,我在penang),似乎从来没有看过。深奥的中文电脑书籍几乎是没有出现过的,唉。。。
心得二,我有一点想法,想请问两位。现在,市面上已经有很多人接触过 C#.NET 及 J2EE 的世界,不知道对于已经学过及接触过这两项更新的技术的人来说,对于 C++ 及 MFC 又有怎样的学习难度、甚至应不应该去学习 C++ 及 MFC 呢?我认为新一代的年轻人,应该都在准备以 C# 或者 Java 作为踏板,准备进入 Microsoft 或者 J2EE 的世界里面。针对这部分,或许能对他们有很大的帮助。
题外话,您的酒量不错哦,不过不要那么常喝,伤身哦!
[ Last edited by haryewkun on 23-8-2004 at 09:18 AM ] |
|
|
|
|
|
|
|
发表于 23-8-2004 01:14 PM
|
显示全部楼层
我也想知道MFC管不管用。。
还有eXiang兄的 tutorial 可以 link 起来吗? |
|
|
|
|
|
|
|
发表于 23-8-2004 01:37 PM
|
显示全部楼层
那说说我吧,我第一个接触的programming language 是 c++, 但是,用不多久,就给M$的 VB 所吸引了。。原因是RAD 的关系,算起来我接触programming 的时间只有2年吧。。现在正和 .net 接触中,现在,如果要我用C++ 写一个简单的program ,我也写不出了,真后悔当初不要先苦后甜。。。 |
|
|
|
|
|
|
|
发表于 23-8-2004 03:09 PM
|
显示全部楼层
哈哈,在下也是,
不过重要看你的开发目标啦,
如果纯粹针对 Windows ,VB 也很好呀,开发效力高,
开发出来的 Application 运行效果好,界面也容易设计,稳定性也不错
现在有 .Net 更优了 |
|
|
|
|
|
|
|
发表于 23-8-2004 04:23 PM
|
显示全部楼层
但 .net 有几个地方还是没有象 vb 酱好用了,example: imagelist in vb.net, 如果在imagelist 的setting 里把图片set 成 32 * 32, 那你的 ICON 也必须是 32,32 的,如果是 16*16,48*48, 那就不能使用了,在VB的话,它会帮你auto adjust 的,but vb.net cannot...sien leh |
|
|
|
|
|
|
|
发表于 24-8-2004 01:27 AM
|
显示全部楼层
怎么我总觉得楼主的贴很有中国人的感觉,无论是语气,用词,还有里面的point 。楼主常泡中国,台湾的编程网站吗?
话说回头,haryewkun说的也对,这年头,往MFC/C++跑的人越来越少了。JAVA一出来就抢尽风头了,后来的C#也是后来居上。两者都有C++ 的某些特征,而没有最令人害怕的pointer。
[ Last edited by Sirius on 24-8-2004 at 01:39 AM ] |
|
|
|
|
|
|
|
发表于 24-8-2004 07:36 AM
|
显示全部楼层
Sirius 于 24-8-2004 01:27 AM 说 :
怎么我总觉得楼主的贴很有中国人的感觉,无论是语气,用词,还有里面的point 。楼主常泡中国,台湾的编程网站吗?
话说回头,haryewkun说的也对,这年头,往MFC/C++跑的人越来越少了。JAVA一出来就抢 ...
你觉得学过 C# 或者 Java 的人,有没有需要再往 MFC/C++ 深造吗?请多多指教! |
|
|
|
|
|
|
|
楼主 |
发表于 24-8-2004 11:05 PM
|
显示全部楼层
[size=-1]
exiang,谢谢你的海量,让我打开这帖看回复时,心中深感宽慰,喜上眉梢,又开了一只酒庆祝一下!(自己真的是白担心了,以小人之心度君子之腹,实惭愧也!)
原先的上文我还没完的,但途中难奈酒气横行,终不支而草草写小结了事。但现在主题已些少更换,瞧我回应帖子后有无余力再做打算了。
haryewkun,原来你是 penang 人士, 这里的 max 和 sson 也是哦。候捷的书我在本地也买不到啊,我是在几年前不小心发现了他的个人网页,里面的内容有读者来信回涵,无责任书评,和他自己几本 翻译过的 书(都弄成了 PDF)。
*Sirius,这也是我唯一时常看的台湾网站,我对花花绿绿的其他中国台湾网是很排斥的,所以我都不泡的。网上看文章是很累的事,用 Labtop 看更惨,手会麻痹。(趴在床上,狗时常摆的那种。当然舌头不会伸出来)我之所以给你有点台湾和中国的感觉应该跟我的怪癖相关了。
[size=-2]
我的怪癖 :
1) 只听老歌(台湾的,中国的,广东的,话语的)
2) 喜欢阅读 (蔡澜的,林语堂的 <--就放最近较喜欢的两位)
3) 喜欢朗读 (第一次看罗贯中的三国演义时就养成了,铜雀台赋,酒歌行等等)
4) 喜爱中视 (雍正皇朝,三国演义,钱王,总之就是中国电视)
5) 总之就是很喜欢 30 年代 和 70 年代 之间的人与事
[size=-1]
谈回候捷吧,我看了他的书后,往后看其他人的中文技术书籍都没什么味道了,应该是指没有那种激昂的情绪吧!我已经两年没看他的东西了,偏偏让我在 这里 "电子书籍下载分享" 剿到!你还有兴趣看,可以去上边的那个帖里头找找。
*haryewkun
我的酒量有时好有时坏,知道身体有问题了,但是朋友老板们的敬酒不吃,可真有点扫他们的兴儿。也谢谢你的关心,看你放的图像,好像是个很凶的家伙,没想到铁汉也有柔情的一面,哈!
*Max5007
你说 ImageList 不能 Auto-Adjust,它有 Auto-Adjust 啊!
你指的应该是 VB.NET designer/Ctrls 上的些许不方便吧,但是如果你碰过 Visual Inheritance 或做过 Custom Control 兼用过 Attribute 来设计 property content 之后,你就会感到他们的 designer 是何其的伟大,是一项很艰难的工程。
还有,它的 IDE 是各种 .NET 语言的共用介面,Designer, Ctrls 都是共用的,整个架构是多么的庞大,但是又那么的有条不紊,我房间还有 .NET 整个 FrameWork 的海报,每次睡觉起来看到都觉得很 "赞" !(书名是 "Apply .NET Framework",MsPress 的,我也有 MFC 整个架构的海报,我托印刷厂的朋友印的,来自 Jeff Proise 的那本 "Programming windows with MFC 2nd Edition"),MFC 和 .NET 当然是没得比,因为在使用者的角度上 MFC 比 .NET 复杂更多,但实际上 .NET 更是复杂了(我都不知我在瞎扯些啥了,哈!)
闲话谈尽,也该正视一下 MFC 还管不管用或值得去碰这些要题了。
我以上这段先 post 了,接下来的"MFC 还管不管用或值得去碰" 在慢慢写。 |
|
|
|
|
|
|
|
发表于 24-8-2004 11:23 PM
|
显示全部楼层
dark_heaven,没想到我们的怪壁还有点相同。不过我应该比你还新一点。
阅读:金庸,卫斯理,古龙……
电视:凤凰卫视,ASTRO 也是拿DYNASTY PACKAGE 的
电台:LIGHT AND EASY(不过常被女朋友投诉,最近转台去MIX FM 了)
歌曲:这个我还好,什么都听,包括中英老歌,潮剧等~
总之,我很喜欢6/70 年代的人和事,喜欢新上海滩和吕奇电视剧里的那种时代背景,很喜欢看他们跳AGOGO舞,给我时光倒流,那个年代很好玩的感觉。 |
|
|
|
|
|
|
|
楼主 |
发表于 25-8-2004 05:46 AM
|
显示全部楼层
我没碰过 J2EE,所以我提出我个人小小且又自私的看法之前,自然把它锁在门后,不放它出来,若各位之中有做过 J2EE 专案的,也来顺便分享一下吧。
先不直接说管不管用,或值得不值得。我们来个热身式的(你要说浅滩式的也行) framekwork 比较吧。
该不该 MFC 的热身
VB 本身也和 MFC 一样,都是一个几近完美的 Framework。言下之意就是说它也是个 Win32 的 Object-Oriented Wrapper,这两者里面藏的是多少的 C Routines,这让程式员在某些程度上,不用直接去面对 低阶的 window programming。在这个点上, .NET 是一样的。
*注* 拿 VB 和 MFC,是我对这两种比较了解,Delphi 和 J++ 的 WFC 也是这类的 Win32 OO Wrapper。因为没碰,所以也将它们摒于门后。
这些 Framework 有以下的几个不完美:(不包括 .NET)
- 1) 不一致性:
虽然全是 Win32 的 Wrapper, 但它们却有不一样的 Object Model 和 自个儿的机制。
- 2) Thin layer/ Thick layer 问题
Framework 有两大类,不是简单到很容易用,就是复杂巨大得太难用。 MFC 是后者,是 Thick layer 的,跟 低阶 Win32 相去不远。另外, VB 就是前者,但也因为有限公司,所以无法避免的, VB 开发者还是要亲自下Win32的海抓鱼。(想当然尔,有些鱼是抓不到的)
- 3) Win32 本身机制的不允许
例如,当你 create 了一个 Fixed-border 的 Window, 在往后你就不能把他变成 Border-Sizable 了。这些限制都是根据 Win32 的 "不平等条约" 而设的。所以呢,这个一但和各个 Framework 的 Object Model 整合起来会时常造成使用者头皮抓破,摸不出一个所以然来的习惯。(除非那人对 Win32 了若指指掌,但这有违 framework 本身的原意)
这些framework 的难题导致了两大类 framework 的限制,比如 MFC,叫它这个大胖子来做点小动作,就蛮麻烦了,所以 exiang 和 Sirius 也因为间中的不方便,而在 exiang 的 MFC 教程帖子里推荐 newbie 们其它较轻便的 win32-oo-wrapper 吧。至于 VB,完成些小动作是绝对很方便的,但我们给它个较高难度的动作时,就靠爹靠娘了。
在第三的 Win32 本身机制的不允许下,一些 Win32 的 Programmer 也时常提出像下面的问题:
"居然都有这些 Win32 的限制,我们要Abstract 这个 Win32 来作甚!" (这些是早期那些纯 C + Win32 编程员时常争辩的事,我顺便拿来放在这里,这时再回顾这句,就有点可笑了。)
时移世易,从早期不能接受 Abstract 这些 Win32 的举动,到了大家把它当作理所当然的时候,上述的三个要点再次因为 .NET 而再次被翻出来讨论了。
.NET 对上述三点的改进
碰过 .NET 的你,相信不用我在对第一和第二点多做详述吧。
第三点在这里指的是, .NET 如何能够突破原有 Win32 的限制,做到只有 .NET 能,而 Win32 不能?(会不会很离谱?明明是 based on Win32 的说)
- 1)转换那些 Fixed-Style 的 properties,比如 Listbox 的 Selection Type 或 Window 的 Border Type。
- 2)更换一个 Form 的 Owner
- 3)帮 MDI Child Window 换父母,Win32 的限制是不允许的,谁的孩子就是谁的孩子。
- 4)MDI Child Window 现在自己能做其他 MDI Child Window 的父母
- 5)把 Window 身上的玩具,携带品 (Control) 送给其他的 Window
- 6) 还有好多,.NET 高手们帮我接下去! (我目前还有限公司!)
当然,以上的 List 在多数的情况下是不需要用的。但重点是,这证明 .NET 不是单单提供一个简易的 Object model 让使用者能 "隔山打 Win32 这头牛",它也提供了扩建 Win32 的能力。
以上的 List 是不是也对 Win32 很熟悉的人产生了疑问?
其实 .NET 在背后做了些其他的动作,就拿上边的 List 1 解释吧。
.NET 把 Fixed Border Style 的 window 变成一个 Sizable Window 的做法是这样的,它 destroy 那个 fixed border window,再重新 Create 过一个一模样的 sizable window。 (这就是以上 List 中,.NET 玩的戏法)
如果你想要确定是不是真的如此,你可以拿在转换之前 Window handle ID 来和转换之后的 Window Handle ID 做比较,绝对是不一样的 ID。
不小心睡着了,起来的时候都五点多了,我是从 11 点多开始想, 又写又想,重写好多次,哈哈...
做什么热身,到最后自己竟然睡着了,好丢脸,哈哈,先 post 进来,等我忙完我的事再继续。
exiang,你的怪癖还算正常,绝对比我新!我较欣赏林语堂那个年代,好多响当当的文坛名士都在那个年代齐相争辉。
[ Last edited by dark_heaven on 26-8-2004 at 02:44 PM ] |
|
|
|
|
|
|
|
发表于 25-8-2004 12:26 PM
|
显示全部楼层
啊呀。。。dark_heaven 大大,您的文字size 怎么set 到那么小,让人看得很痛苦呢。我的解决方案,是拷贝到 Microsoft Word 去放大慢慢看。。。
说回正题。。。
能不能这样说:
组合语言建立在 CPU 机器码上面。。。
C/C++ 语言建立在组合语言上面。。。
Win32 API 建立在 C/C++ 语言上面。。。
MFC 则建立在 Win32 API 上面。。。?
.NET 也是建立在 Win32 API 上面。。。?
从dark_heaven 大大所举的例子来看,.NET framework 所实现的功能,似乎是跳过 MFC,直接建立在 Win32 API 上面 (虽然我们谁也不知道 .NET Virtual Machine 怎样实作)。
如果 .NET 对 Win32 API 及更下层的掌控不比 MFC 逊色,那么 MFC 似乎没有学习的必要,.NET 可以直接取代掉 MFC 的功用。
Java VM 是死在最小公倍数,所以一众 Win32 API 它统统不支援。。。 |
|
|
|
|
|
|
|
发表于 25-8-2004 07:11 PM
|
显示全部楼层
Virtual Mechine 要做到在全部PLATFORM都能跑,但最后一定会是全部PLATFORM都不是跑得最好的。
就好像我,要GRAPHIC, STORY WRITING, PROGRAMMING, WEB 都行,但却是全部都不行…… |
|
|
|
|
|
|
|
发表于 25-8-2004 09:45 PM
|
显示全部楼层
exiang 于 25-8-2004 07:11 PM 说 :
Virtual Mechine 要做到在全部PLATFORM都能跑,但最后一定会是全部PLATFORM都不是跑得最好的。
就好像我,要GRAPHIC, STORY WRITING, PROGRAMMING, WEB 都行,但却是全部都不行……
哈哈,小弟也有这种感觉(可是 exiang 大哥应该比小弟好的多),
所以近期都比较专心攻 Flash 设计和编程了。
Sirius 发表于 24-8-2004 01:27 AM
话说回头,haryewkun说的也对,这年头,往MFC/C++跑的人越来越少了。JAVA一出来就抢尽风头了,后来的C#也是后来居上。两者都有C++ 的某些特征,而没有最令人害怕的pointer。
C# 中没有 pointer ??
不可能吧,编程常常和 Memory 打交道,而 pointer 是直接的方法…
所以小弟认为不可能没有,只是 C# 中令其简单化、自动化罢
(有劳高手印证) |
|
|
|
|
|
|
|
楼主 |
发表于 26-8-2004 03:10 PM
|
显示全部楼层
偶有失言, 斩
[ Last edited by dark_heaven on 26-8-2004 at 09:08 PM ] |
|
|
|
|
|
|
|
楼主 |
发表于 27-8-2004 07:08 AM
|
显示全部楼层
haryewkun:
能不能这样说:
组合语言建立在 CPU 机器码上面。。。
C/C++ 语言建立在组合语言上面。。。
Win32 API 建立在 C/C++ 语言上面。。。
MFC 则建立在 Win32 API 上面。。。?
.NET 也是建立在 Win32 API 上面。。。?
组合语言建立在 CPU 机器码上面。。。 (没意见)
C/C++ 语言建立在组合语言上面。。。 (不知道)
Win32 API 建立在 C/C++ 语言上面。。 (确定不是酱)
MFC 则建立在 Win32 API 上面。。。? (应该说,MFC 为 Win32 穿衣服,让 Win32 本身没那么的裸露,而且, MFC 不是只 配合 Win32 而已,而且是针对一般"General purpose 的 Win32 吧了",额外不能不涉及它对 COM 的支援吧 ? )
大家好像对我之前作的 "热身式" 文章前就认定 MFC ini macam 了,或已然失去兴趣,有点我独自在楼梯口弹琴的感觉。
敢请 Sirius, Haryewkun, exiang,或时常与 MFC 鬼混的人,请再提出看法。
*还真的好想听听看 Sirius 怎么说!
[ Last edited by dark_heaven on 27-8-2004 at 07:10 AM ] |
|
|
|
|
|
|
|
发表于 27-8-2004 10:22 AM
|
显示全部楼层
dark_heaven 于 27-8-2004 07:08 AM 说 :
Win32 API 建立在 C/C++ 语言上面。。 (确定不是酱)
Windows 不是用 C/C++ 语言来写的吗?(加上一些Assembly Language)。好像以前 DOS 的 Interrupt 时代,INT 21 那些都是组合语言来的。没有了C/C++语言,就不会有Win32 API 吧?但是理论上,应该是 Win32 API 能做的东西,C/C++ 语言都能做到吧?(只是太多苦工了) |
|
|
|
|
|
|
|
楼主 |
发表于 27-8-2004 10:33 AM
|
显示全部楼层
他们是 "Mixed"来写的, Kernel 肯定不是 纯 C\C++ 码吧。
User, Gdi 还有些可能。。。
Win32 说开了,就是主要的这三个 巨型 Module 啊。。
不是说 Innovative Day 那天, Ms 宣布 Win32 将不是未来 Platform 的主点了,你对那天宣布的事还记得吗?
我没去,我是看之后的报纸的。 |
|
|
|
|
|
|
|
发表于 27-8-2004 10:42 PM
|
显示全部楼层
dark_heaven 于 27-8-2004 10:33 AM 说 :
他们是 "Mixed"来写的, Kernel 肯定不是 纯 C\C++ 码吧。
User, Gdi 还有些可能。。。
Win32 说开了,就是主要的这三个 巨型 Module 啊。。
不是说 Innovative Day 那天, Ms 宣布 Win32 将 ...
我听说大部分的 Win32 API 是用 C/C++ 开发。。。某些关键的部分就用组合语言加快速度。而 User、GDI 这些 Win32 API 。。。里面写的东西应该也是用 C/C++ 加上组合语言来 compile 的吧?
听过好像是候捷介绍过一本叫做 Windows Secret 还是 Windows Undocument Secret 这样的书。。。是那些骇客们挖掘 Windows 的核心的精华,可惜,今天去槟城 Prangi Mall 的 popular 书店找了一整天,都没找到这本书。
嗯。。。Win32 这么多年了,也许是 Win64 的时代了吧?
那么,到底 MFC 跟 DOT NET FRAMEWORK 的 Base class 是不是一样的东西呢?只是一个出现比较早,而另一个是新的、必须依附于.NET platform 上面?
.NET Framework 可以做到一切 MFC 可以做到的东西吗? |
|
|
|
|
|
|
| |
本周最热论坛帖子
|