用于所有Win32程序员的Windows Aero Glass(DWM,GDI,GDI +)绘图的文档和API示例

我正在寻找很好的资源来学习使用Win32 / GDI API,或者直接使用Win32 API绘制和绘制一个玻璃窗体。

当我使用Delphi时,我将其标记为Delphi或Visual C ++。 任何代码示例和文章,你可以find将不胜感激。 MSDN文章似乎并没有写这个。

作为一个目标,我们假设您想要:(a)重现Google Chrome的function(标签作为玻璃框架的一部分)(b)重现MS Office 2010的function(保存在玻璃框上的button,在MFC中为VS 2010,作为“快速访问工具栏”(见下图)。

我不使用MFC,但如果检查MFC源将是一个很好的信息来源,我很好奇知道哪里在MFC源或BCG原始来源(我都)实施快速访问工具栏渲染/绘画代码。

替代文字

更新:下面的答案中的一个相关的neato链接显示了NC(非客户端)Paint消息,以及如何在玻璃框架上绘画时处理它,以及关于它的MSDN文章。

这是我的“玻璃”书签文件夹的一个子集,这个主题的研究/搜索的结果。 我发现所有这些对于学习玻璃和解决其中的各种问题都很有用。 其中大部分包括Delphi代码,但是我已经注意到它在另一种语言的地方。

平原玻璃链接

  • 在Delphi中使用半透明窗口 :在Delphi中使用Glass很好的介绍(从最基本的)
  • 在玻璃上自定义绘图 :介绍如何在窗口的玻璃区域上绘制位图或其他图像。 涵盖阿尔法频道等,也很好的概述
  • 在一个VC ++项目中使用玻璃 :包括开启玻璃,绘制文本,处理通知等 – 一个很好的介绍它是如何工作的。 许多底层细节都是由VCL来处理的(例如, GlassFrame属性和TForm内部函数会关注很多这样的内容),但是理解它在API级别实现的基础是非常有用的
  • 如何绘制非客户区域 :这显示了如何在标题栏中绘制Office的工具栏。 .Net代码,但可以翻译
  • 设置一个自定义标题栏 :关于非客户区绘图的非常详细的文章(在Delphi中,所以是Delphi代码)。 接下来是第2部分 ,它演示了完全接管整个窗口并自己模拟标准标题栏。 这两篇文章可以让你按照你的要求模拟Office和Chrome
  • 如何设置各种VCL控件,以在玻璃区域上最好地工作 :VCL不能很好地支持玻璃。 不管你做什么来尝试和解决,你经常会得到文物,或控制根本就没有正确的绘画。 这篇文章列出了基本的VCL可视化组件(标签,按钮,进度条等)以及为每个组件设置的内容,以便当它们放置在玻璃区域上时完美地绘制,或者至少“尽可能地”

高级或切线相关:

  • 如何使用GDI和DirectX表面来组合桌面组件
  • 桌面管理器API列表 (仅其中一些与Aero相关)

在Vista / Windows 7下绘制自定义标题栏的这些 帖子可能会让你感兴趣。

示例图像:

样品

我相信你已经找到了有关DWM的MSDN页面 。 它跳了很多话题和几个例子。 一些“概述”文章中有一些例子(比如DWM Blur Behind Overview )。

不幸的是,除了文档以外,还有很少的好文章。 您可以从代码项目上使用玻璃开始,并在delphi中查看一个检测玻璃 – 然后直接从文档使用函数是不是太糟糕。 幸运的是,他们在实践中都非常直截了当。

良好的玻璃组件网站,包括玻璃按钮:

http://rmklever.com/

另外,这些旧文章可能会帮助你:

  • 使用Delphi创建Windows Vista Ready应用程序
  • 使用Delphi更新创建Windows Vista Ready应用程序 – 2007年1月