首页 / 软件开发 / VC.NET / 使用桌面窗口管理器创建Aero玻璃效果
使用桌面窗口管理器创建Aero玻璃效果2010-05-29 msdn.microsoft.com 要正常使用该代码你应该使用具有Aero效果的Vista版本DWM 是一种新界面,用于管理如何将运行和呈现的各种窗口合并到Windows Vista 桌面上。Windows® Presentation Foundation (WPF)提供了一种更高级别的层,控制着到桌面层的呈现,Windows Display Driver Model (WDDM) 用于处理到显示器的实际低级呈现。本文仅讨论如何使用DWM 界面。有关该主题的详细信息,请阅读 David Chappell 编写的MSDN 文章“Windows Presentation Foundation 简介”(msdn2.microsoft.com/aa663364.aspx)。WDDM 之所以是本文通篇关注的唯一内容,是因为它可以通过 DWM 界面实现新效果,而且可以修复一些特定问题。DWM的技术概览在除 Windows Vista Home Basic 之外的所有 Windows Vista 版本中均提供 DWM 界面,通过 dwm.exe 可以启动该界面。系统中的所有应用程序都可以从DWM 获益,而无需进行修改或重新编译。不过,选择利用特定 DWM 功能的应用程序可以调用dwmapi.dll中的界面(DWM的公用界面),然后将这些界面传递到dwm.exe。界面声明可在dwmapi.h中找到,并且可以从windowssdk.msdn.microsoft.com 在线获取最新的API 信息。Windows Vista 在设计上对每个窗口都使用图形加速器,而不是仅针对三维 DirectX® 应用程序。为了实现这一点,DWM 需要与 WDDM 通信,后者是图形处理器和视频内存的最终所有者。(DWM 依赖于 milcore.dll,后者是与 Windows Presentation Foundation 共享的组件,用于输出和呈现到DirectX。)呈现操作由DWM中的单独线程处理,拥有 DirectX 设备的用户无法对其进行访问。另外,大多数应用程序本身有处理呈现操作和 UI的线程(如典型的Win32® 应用程序中的USER 消息弹出线程),但其与 DWM的呈现线程不冲突。DWM 获取一个窗口列表,并在树结构中管理其位图,然后将其组合到最终桌面。换言之,每个应用程序均呈现自己的位图,然后由DWM 进行组合。应用程序的主窗口线程呈现其场景,DWM 呈现线程对该场景进行访问,并且呈现线程通过其 DirectX 界面更新桌面。传递的信息被压缩为仅对以前呈现的更改(差异),大型数据(如图像)则置于共享内存中。这就潜在地允许在一台计算机上生成场景,而最终的呈现操作可以在另一台计算机上完成。使用过 OpenGL的三维程序员会对此体系结构非常熟悉,它允许服务器管理三维场景,并且仅将差异发送到客户端计算机。您可以分布式呈现三维场景,并让其在任何数量的客户端计算机上使用完全硬件加速运行。此体系结构使 DWM 能够为远程桌面方案提供一级支持。尽管 Windows Vista 将与旧版 Windows XP 兼容驱动程序一起运行,但需要让 WDDM 视频驱动程序来获得所有 DWM 功能。与某些假定情况相反,DWM 不需要 DirectX 10,但它确实需要更多的视频/纹理内存和支持Shader Model 2.0或更高版本的视频卡。使用WDDM的最大改变是它引入了Video Memory Manager (VidMM),后者可以在系统内存和视频内存之间交换视频内存分布。这意味着 WDDM 可以虚拟化视频卡的资源,因而在共享和交换视频内存方面以及在不同应用程序的不同线程之间对图形处理器进行上下文切换方面可以做得更好。以前几乎不可能稳定地运行多个三维应用程序,原因是驱动程序无法处理上下文切换。而且在WDDM 出现之前,没有可用的正式计划,因此通常会出现一个 DirectX 应用程序耗尽其他应用程序的资源。而使用WDDM 就很难发生这种情况。Windows Vista 对驱动程序的控制也严格得多,并要求比以前 Windows 版本的驱动程序更强大可靠。另外请注意,DirectX 10 是一个仅用于 Windows Vista的API。为DirectX 以前版本设计的应用程序将运行于旧版 DirectX API实现(预计将被称为DirectX 9 L)上。这将是 WDDM 之前的驱动程序支持的最后版本。DirectX 9 L 应用程序预计将运行于装有 DirectX 9 L的Windows XP 上和 Windows Vista 上。DirectX 10 不包含旧式界面。组合桌面的好处所有这些新的子系统可让您独立呈现窗口,并在将它们呈现到桌面之前对其执行组合步骤。在Windows Vista 和随之发布的一些更新应用程序中可以很好地利用这一点。关于这一点,我要向您展示的两个用法是 Aero™ 玻璃效果和缩略图。玻璃效果仅在运行 Aero Glass 方案并打开组合功能时才可用。Aero Basic 不提供此效果。由于每个窗口都在自己的视频内存区中创建,因此需要由DWM 将该窗口的最后组合呈现到桌面。这意味着,DWM 可以访问桌面上的图像,并可以将其与您的窗口呈现混合在一起,创建由二者组合的呈现。在与现有桌面图像混合以创建霜冻玻璃效果的任何窗口区域中,这一点非常明显。由于每个窗口都呈现到中间屏外表面,这意味着 DWM 是涉及更新玻璃效果的唯一程序。在移动使用玻璃效果的窗口时,不需要使任何基本窗口无效。DWM 会处理半透明可视图像到新坐标的更新。可以指示 DWM 为要呈现玻璃效果的窗口添加某些客户端区域,这样可让您创建供自己使用的玻璃区域。此屏外组合使得桌面响应更快。由于每个窗口现在都从桌面中单独呈现,因此就消除了您在更新较慢的应用程序(如 Web 浏览器)中经常遇到的问题。在Windows的以前版本中,图2 显示的内容并不陌生。在另一个应用程序上方来回移动窗口时会出现这种撕裂现象,这是因为下面的窗口更新的速度太慢。进行桌面组合之后,就不会再看到这种现象。