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

相關文章
相關標籤/搜索