6/24/2010

分析Hilo项目

image

Hilo项目是微软的一个用于演示Windows 7 API和Visual C++ 2010的功能的一个开源项目。这个项目不仅演示了Windows API的使用,而且也提供了设计和开发高性能Windows程序的建议。这个项目的目标在它的twitter主页表现无遗:将开发本地代码重新作为重点。

这个项目是基于免费的Visual C++ Express和Windows 7 SDK,这意味着更多的程序员可以尝试这个项目而不必购买Visual Studio 2010。这有助于扩展这个项目的影响力。不过这也意味着不能使用成熟MFC和ATL类库。作为替代,Hilo项目包含了以下类

  • ComPtr COM指针管理
  • WindowApplication 消息循环处理
  • Window 窗口API封装
  • WindowFactory 窗口类和窗口过程
  • WindowLayout 窗口布局
  • WindowMessageHandler 窗口消息分发

可以很明显地看到,这些类都被放在了一个比较容易重用的DLL模块里面,文档中也允许程序员在自己的程序中直接拿来使用。

由于WIndows Vista/7中WDDM 1.0的驱动是没有GDI硬件加速的,直到WDDM1.1才有有限度的支持,所以在不支持DirectX 10.1的显卡下GDI会很慢。在对于用户界面技术的选择上,Hilo项目组根据这个现象选择了在现代硬件上更快、更节省内存和CPU(当然,这也意味着更耗显存和GPU)的DirectX,而不是比较慢的GDI。这也减少了窗口的数目,整个程序现在只有一个窗口。这样做的好处是发明MFC的消息映射的时候所针对的项目需求,例如大量的窗口、很小内存、派生类需要继承消息处理函数现在都不成为问题了,所以在这唯一的一个窗口的过程里面可以放一个大大的switch语句。

Hilo在模块化这方面做得比较深好,基本上看到类名字就知道这个类是做什么的,不像看文档里面成员函数看到眼花的CWnd,可以看到Hilo对窗口的各个方面处理是分开的。而且虽然Hilo并不是一个COM服务器,但是在耦合的时候是使用COM的接口而不是直接使用类的名字,这样在编译的时候就可以执行类型检同时也保留可扩展性。MFC就做得比较差,不但CObject::IsKindOf需要在运行的时候判断,而且有引用视图类的头文件之前必须先包含文档类的头文件的问题。

比较遗憾的是,在推广本地代码开发方面,Hilo项目似乎做得还不够。Visual C++ Express的使用者主要是学生和业余人员,而这个项目演示的代码复用、COM和模板对于他们来说需要花一些时间来理解。另外,项目的许可协议看起来也让人一头雾水,里面把Hilo描述为软件而不是源代码。不过Visual C++项目组宣布这个项目的时候声称Hilo只是本地开发示例系列的第一个例子,作为原型来说,Hilo的作用在把“酷”这个词和Windows本地开发联系起来这个方面还是做得不错的。上一次VC开发被人称为酷的时间应该是远在98年了吧……

1 comment:

Anonymous said...

偶是菜鸟,不过看到这3个module的介绍后,思路变得清晰了,http://msdn.microsoft.com/en-us/library/ff684175(v=VS.85).aspx