TMLlib 软件开发库是国软研究所科研项目,TMLib是一套完全自行封装扁平架构的软件开发库和UI库,兼具MFC、COM、FrameWork类似功能。TMLib基于三个目标开发1:开发简单易用,高开发效率,2,具备高效运行效率和最优部署,3:最终产品具备完美的用户体验。因此它也算使一套界面开发库,支持C++,VB,C#,Delph等多种语言。
[适用范围]
最适合开发图形界面的Win32 SDK程序。
当然开发Windows标准控件的Win32 SDK程序,可以只使用本开发库的架构框架。起码TMLcnWnd可以帮你处理消息映射,就不必从零写起了。这时建议除去本开发库的图形部分,毕竟再优化的图形控件也不如Windows标准控件高效。
[技术路线]
TMLib本意是对MFC简化和优化,使之更易用。类似国外著名的wxWidgets(www.wxWidgets.org)和国内的WinX(www.WinXcn.com)。
表面看来仍然是走别人走过的老路,其实不然,在不断的修改中,它的功能已经和我们的本意不符了,不再是套单纯的类库或GUI界面库。
最初是想建一个没有MFC的清新世界,做一种取代MFC的标准。后来我们理想的标准中出现了具体应用。
现在包含了三条技术路线,一个是类似MFC的一套自编写的类库,内含一个底层开发的图形接口,对控件进行快速贴图,直接用高效的GDI画的,关键地方为效率不怕麻烦,该用汇编的地方用汇编,可以用这套类库直接派生大部分的界面元素。这套类库的最底层基类是TMLcnWnd,类似MFC中的CWnd但比他优化,是个相当抽象的类,对回调函数和事件响应函数进行处理和封装,以后的类中就不用再处理了。
其二是基于COM技术的超分类技术,利用钩子,将原来存在的控件子类化,然后重绘界面,可以将普通风格的控件变成Vista风格。这种方式好处就是不仅可以在C++中使用TMLib,而且可以再VB,C#,Delphi等开发中使用TMLib。
两种方式都直接采用高效的API编写,而且都支持DLL外部动态调用(TMLcnWnd本身就是导出类,超分类更不用说了),因此相当节省内存。而且减低应用程序的体积。
其三是FrameWork技术,TMLib不仅仅是一个库集,它还是一个应用程序框架,这也就意味着它提供有一个的体系结构,使之可以使用这些类来开发完整的应用程序。FrameWork的基类是由TMLcnFrame以及由此派生的TMLframe实现。
[体系结构]
最底层基类只有1个,就是TMLcnWnd。
二级辅助类有2个,TMLcnCtrl,TMLcnDialog,2个都是是由同1个底层基类(就是TMLcnWnd)用两种方式派生出来的,不同之处是TMLcnCtrl使用的RegisterClassEx与TMLcnWnd不同,而TMLcnDialog使用的窗口创建和管理方式与TMLcnWnd不同
三级扩展类有3个,TMLcnDlgEx,TMLcnCtrlEx,TMLcnWndEx,这3个是由TMLcnCtrl、TMLcnDialog扩展和交叉派生出来的,主要增加图形化元素
具体的应用类都是由以上的三种类相互组合派生产生的,比如TMLcnButton、TMLcnCheckBox、.TMLcnEdit、TMLcnSroll……,也可以自己随意增加。
此外还有一批原始的应用类,大家一看名字就知道了,TMLcnFont、TMLcnColor、TMLcnTray、TMLcnMenu、TMLcnSocket、TMLcnAdo、TMLcnWeb……
开发中直接他们用派生一个类即可。这个思想来源于MFC,这使得大多数MFC程序都可以比较舒服的移植到TMLib上。
[类库部分介绍]
TMLcnWnd和MFC中的CWnd类似,它实现了最基本窗口的创建等功能,所有窗口都由此派生。TMLcnWnd是个有点飘渺的原始类,只能用它派生类,然后扩充相应功能再创建对象,而不能直接此创建对象。有几个很重要的全局函数和全局变量,这对外部是不公开的,不允许对这些对象直接访问。
代码好写,难写的是设计模式、接口、封装、管理。TMLcnWnd创建的窗口需要有良好的管理,还有多线程和接口问题,实用的资料确实不多,我是连蒙带猜才明白其中的门道。
TMLcnWeb是纯Win32 SDK API开发的浏览器类库,没有MFC,WTL或ATL。
TMLIB的包含的应用库非常多,实际开发的时候只要拿出一个分支来组成一个子集就可以了。当然这个子集肯定包含最底层的TMLcnWnd搜搜
[一些说明]
1:类如果有父类,最终基类肯定是派生自TMLcnWnd、TMLcnCtrl、TMLcnDialog
2:句柄会很常用。很多操作的对象,都会是句柄。以前MFC是对控件操作,这里全对应为直接对他句柄的操作;当然这样更不会有定义控件这回事了,都定义成句柄了。
|