资源描述:
《先破后立,让mfc与.net完美结合——经典与现代的结合:在mfc中集成.net框架》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、先破后立,让MFC与.NET完美结合——经典与现代的结合:在MFC中集成.NET框架士口信大家都有过这样的童年经历:拆东西.I'口从自己的小玩具到自行车,从古老的机械闹钟到半导体收音机,往往没有能够逃过我们的双手的.后来,上中学的时候老师给我们讲了"庖丁解牛",让我们为庖丁"恢恢乎游刃有余"的技术而惊叹.童年时的拆解是为了满足自己的好奇心,庖丁的拆解是为了更快更多地得到牛肉;而对一项技术进行拆解,能得到什/厶呢宁答案是这个拆解的过程让我们更深入地理解了这项技术,进而将掌握到的原理应用在实践中,产生更加先进的技术.本期专题讨论的对
2、MFO进行改造的技术就是这个道理.在十几年前MFO曾帮助微软赢得了c/c++编译器和开发环境大战,在后来的很长一段时间内,Visualc++这款优秀的开发环境甚至成了它的代名词.尽管现在.NET的市场在不断扩大,但仍然有很多开发者热衷于MFO,仍…7曩m2005…旧是强大而稳定的.然而随着.NET技术越来越深入人心,8年来一直未有重大革新的MFO多少有些"人老珠黄",如何才能让它重获青春,在今天这种纷繁复杂的计算机世界中依旧发挥其强大的功效呢宁本期技术专题栏目的作者孙辉先生有着近十年的MFO开发经验,他对于MFO内部的机理非常熟
3、悉,"解"MFO这头"牛"不在话下.然而,孙辉比庖丁的高明之处在于,他不仅"解牛",还可以还"牛"以新生.在本期技术专题中,孙辉首先对传统的基于MFO框架的应用程序进行了解剖,得到了一个最简单的"骨架"和一大堆"零件";然后使用.NET控件和HTML,Flash等元素加工了新的"零件"并重新进行了"组装".经过此番"手术",传统MFO应用程序的老面孔换了新颜,同时与.NET,Flash等先进技术的紧密结合也使其在新的时代里更具生命力.■作者/孙辉M经典与现代的结合■■在MFC中集成_NET框架本文讲述了在MFC中使用托管扩展的基
4、本方法,包括对偶.NET对象,宿主.NET控件和与.NET对象交互等技术.以这些技术将是贯穿本专题的基本技术脉络,以此为基础才能打造丰富,前卫的MFC应用程序.fCc++4.2至令将近8年的时间,MFC的主体特征没有出现明显的变化,依旧是"古老"的面孔,囡此关于这个类库的种种评论自然是情理之中的事情了.从我个人的观点上看,MFC功能依旧健壮,强大,而且是业界少有的,稳定的,经过足够长历史考验的开发框架.深入研究这个类库,你会找到酒越酿越醇的感觉.MFC的一个成功因素之就足提供了?套完整的Document/View框架,然而这一点
5、电足许多针对MFC批评的矛头指向.也许是由十这个框架太经典,使人仃】看上去MFC再"亭亭玉市",向是"人老珠黄",以于打开今天的VisualStudioIDE的时候,多少会有点不协调的感觉:比起其它基于.NET框架的开发语言,H{MFCJ{发会显得很"土气""孤独"——没有RAD机制,明显的缺乏与其它时髦对象的"操作"能力,r而且严格恪守自己的领地.每当生成一个基丁文档的MFC程序,我们总是看到一张沧桑的面孔,女r像刘姥姥进入大观同,与周围时髦的c#,VB.NErr等存在明显的"代沟"j"不相容".曾经有很多人川我MFC还有前途
6、吗?是否已经行将就木?羌于是MFC还是.NET的讨论时隐时现,不绝r耳.CLR是个党满魅力的世界,这种魅力,使得C#,VB.NET等变得光彩夺目.然而,MFC并没有衰老,如果你深入的了解MFC,你会发脱,MFC完全l1J以C#,VB.NET争奇斗艳在MFC项目中使用托管扩展~.4',i4[/iqiJNETFralneWork提供的托管扩展芷持确保了住MFC项目踅持托管扩展(c】_R).开发者口J以使MFC工程(本文我们将使用Test作为工程名称)通过打开项口的托管扩展属性外关,来增加编译器的托管支持刈,I埘啄在打开托管扩展编译开
7、关以后,您就可以在MFC项日中使H{托管对象了,通常的做法是:为每个重要的MFC埘象配一个托管对象以』眵成个对偶对,彼此匹配的对象包含l~Ii'l对方的指针,这样,其他.NET对象可以通过对偶对中的.NET刈象操作ML,C埘象;而其他MFC对象可以通过对偶对中的MFC对象操作NET对象(如图1)存VisualStudioNET中,没有提供关于添加托管c++类埘象的向导,因此,你可以先添加个基f托管c++的Component对象(如罔2)图1:对偶托管对象…200575图2:AddClass向导:增加托管C++Component对
8、象添加了该tes~DocObject托管组件对象之后,将该对象的基类改为Object,并删除一些代码得到一个最小托管类:.gG嚣如∞1.s__[.c一:【.№c."∞f1v.…l经过以上步骤,VisualStudio,NET生成的代码被装进了MFC程序,当然完全