分析Hilo项目

原创 2010年06月25日 06:09:00

image

Hilo项目的类关系图,使用Visual Studio 2010的可视化和建模功能包创建。

Hilo项目是微软的一个用于演示Windows 7 API和Visual C++ 2010的功能的一个开源项目。这个项目不仅演示了Windows 7 和Windows Vista新增的触摸、Direct2D、Shell 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年了吧……

 

使用hilo高低位算法-生成商品编号

/** 高低位算法*/ private class HiloOptimizer { private String prefix; //前缀 private int ...
  • u013126379
  • u013126379
  • 2016年09月27日 18:22
  • 1261

Github项目解析系列

Github项目解析系列主要解析的是平时开发过程中遇到的小项目小例子,自己总结的一些研发技巧与实践,以及一些Github中流行的项目等...
  • qq_23547831
  • qq_23547831
  • 2016年03月23日 20:42
  • 2401

需求分析--我的第一个java-web项目之路(一)

需求分析(-:引用的定义:-) 所谓”需求分析“,是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应输出什么. 需求分析是一个项目的开始,主要是弄明白这个...
  • timo1160139211
  • timo1160139211
  • 2017年06月16日 20:36
  • 1317

【JAVA服务端架构】分布式环境下Hilo算法生成自增编号

常见的编号生成策略有以下几种方式: 1.数字型自增长,但有时候我们需要编号有一定的长度,并不是像0,1,2,3这种,还有可能会对编号加上一定的前戳 2.使用UUID,但是UUID是无序的,毫无意义的字...
  • cc_want
  • cc_want
  • 2017年04月05日 14:19
  • 632

关于Hibernate的hilo主键生成器(另附继承映射)

-------------------- 题记 因为项目需要使用hibernate继承映射,于是测试了hibernate的三种继承映射,subclass、join和union。在union的测试中,基...
  • u011483012
  • u011483012
  • 2013年12月24日 17:07
  • 661

使用hilo高低位算法-生成商品编号

/** 高低位算法*/ private class HiloOptimizer { private String prefix; //前缀 private int ...
  • u013126379
  • u013126379
  • 2016年09月27日 18:22
  • 1261

Hibernate--Increment和Hilo主键生成策略原理

最近项目中遇到集群问题,比如我们有两个集群节点,在正常情况下只有一个节点工作(A),当出现异常时切换到另一个集群节点(B)上。项目中使用Hibernate的increment作为数据库主键生成策略。它...
  • lb85858585
  • lb85858585
  • 2012年02月21日 21:21
  • 1746

7.4 Hibernate:内置生成器 – hilo

7.4 Hibernate:内置生成器 – hilo
  • Silent_Paladin
  • Silent_Paladin
  • 2017年07月02日 20:41
  • 104

HILO 驱动软件WIN7

  • 2015年02月18日 07:59
  • 3.57MB
  • 下载

2017年11月软考系统集成项目管理工程师案例分析真题及答案-徐朋

  • 2018年01月12日 08:57
  • 491KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分析Hilo项目
举报原因:
原因补充:

(最多只允许输入30个字)