DirectUI和无窗口用户界面

DirectUI/DirectUser是一个用户界面框架(http://msdn.microsoft.com/en-us/library/system.windows.automation.automationelement.automationelementinformation.frameworkid.aspx)。用Spy++能够在MSN Messenger、Windows XP、Office、IE和Windows Media Player中看到窗口类名字是DirectUIHWND的窗口。web

从文件描述来看,DUI70.dll和DUser.dll看起来是这个框架的实现文件,而没有导入这些DLL的软件应该是复制了这个库的代码。举例来讲,Windows Vista和IE7的测试版的IEFrame.dll导入了DUser.dll(http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/6b801577-1699-4093-8a58-198c64b120e0)而正式版使用IEUI.DLL。这应该是微软不肯意公开支持这个功能变化频繁的类库,而反垄断案禁止非Windows组件调用未公开Windows API的缘故。windows

再看看DUser.dll的函数导出表(http://www.webtropy.com/articles/dll-api.aspx?dll=duser),能够看到Gadget这个词被普遍使用,而没有具体的控件。由于没有窗口句柄,因此控件不是用的窗口类来区分,而是可能和Windows Vista Sidebar Gadgets同样采用HTML作接口根据Office Communicator的资源来看,是使用XML作接口。api

从这个类库的名字和行为来看,实际上应该是基于DirectX,和WPF相似的界面类库框架。在微软的招聘网站上能够看到Office Communications项目组的一个职位的介绍中描述说“Native Win32/64 UX experience via DirectUI, and Web UX experience via Silverlight”,说明这个项目组把它和Silverlight同等对待。DirectUIHWND窗口能够在须要性能和安全性的场合看到,例如IE的Tab窗口、Shell中的DefView、Windows登陆界面等等。在Windows Vista上使用DirectUI的微软程序和WPF程序同样兼容Desktop Composition和远程桌面,应该是直接或者间接调用的Direct3D。安全

那么咱们怎么作到相似的效果?框架

无窗口模式的用户界面并非一个新的概念(http://blogs.msdn.com/oldnewthing/archive/2005/02/11/371042.aspx),Visual C++的应用程序向导就能够建立无窗口ActiveX。可是作过无窗口模式的RichEdit的实现的人都知道,微软的系统控件集中了各类各样的功能,好比各类快捷键、滚动条、界面风格、Accessibility、用户界面自动化等等,要像IE项目组那样几乎彻底实现无窗口并不容易。Raymond Chen在http://blogs.msdn.com/oldnewthing/archive/2005/02/11/371042.aspx提到可使用DrawThemeBackground和DrawFrameControl这两个API,不过这只对和Windows界面风格一致的程序有用。要是界面不复杂的话,能够简单的集成IE的Trident引擎,好比使用MFC的CHTMLView和CDHTMLDialog,以及Windows Forms的WebBrowser类。这样作的代价就是程序须要牺牲性能和可能在严格的IE安全性配置下没法工做,Visual Studio.Net开始的各类向导、Google Task、Microsoft Outlook、Outlook Express等就是使用的这种方案。编辑器

另一个方案就是集成WPF或者Silverlight。VC项目组在用户调查中发现,须要使用WPF的Visual C++用户大都用C#编写WPF代码再用C++/CLI和非托管代码作接口(http://social.msdn.microsoft.com/forums/en-US/wpf/thread/dd1e31bb-feb4-4d77-b524-42a282f519b1/),因此他们决定致力于改进更多用户使用的功能,例如编辑器的智能感知,而不提供对WPF的支持。Visual Studio 2010就是使用这种方案。ide

为何不能使用未公开的API?若是要看惊恐故事的话,能够参考http://blogs.msdn.com/oldnewthing/archive/2003/12/23/45481.aspxhttp://blogs.technet.com/stefan_gossner/archive/2005/07/27/undocumented_API_Part1.aspx函数

题后话:性能

*若是微软在产品文档中讨论未公开的API,那么API仍是未公开的吗?(http://msdn.microsoft.com/en-us/library/aa140182(office.10).aspx测试

*Visual Studio代码画廊中有个叫做DirectUI的类库,设计思想和微软的DirectUser库相似(http://visualstudiogallery.msdn.microsoft.com/en-us/1B69C9FE-E422-4799-9EB5-6AC7034C52E1),不过也有人误认为这就是微软用来实现MSN的界面的库。

*IE9将会使用Dierct2D做为渲染引擎,不知道IE项目组在移植完代码以后是否能把控件类库的接口公开。从VC项目组征求下一个版本意见的问题(http://www.surveymonkey.com/s/HDQWGJR)来看,微软也有意开发利用GPU的类库。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jiangsheng/archive/2010/03/22/5404320.aspx

相关文章
相关标签/搜索