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

Posted

技术标签:

【中文标题】适用于所有 Win32 程序员的在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例【英文标题】:Documentation and API Samples for drawing on Windows Aero Glass (DWM, GDI, GDI+) for all Win32 programmers 【发布时间】:2011-04-18 20:48:34 【问题描述】:

我正在寻找很好的资源来学习使用 Win32/GDI API 或任何替代它的东西来直接使用 Win32 API 对玻璃窗体进行绘图和绘画。

当我使用 Delphi 时,我将其标记为 Delphi 或 Visual C++。您可以找到任何代码示例和文章将不胜感激。 MSDN 文章似乎没有写这方面的内容。

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

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

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

【问题讨论】:

【参考方案1】:

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

普通玻璃链接

Using translucent windows with Delphi:在 Delphi 表单中使用 Glass 的很好的介绍(从最基础开始) Custom drawing on glass:介绍如何在窗口的玻璃区域上绘制位图或其他图像。也涵盖了 alpha 通道等,很好的概述 Using glass in a VC++ project:包括打开玻璃、绘制文本、处理通知等 - 对其工作原理进行了很好的一般性介绍。许多底层细节都由 VCL 处理(例如,GlassFrame property 和 TForm 内部负责处理其中的大部分内容),但无论如何理解它在 API 级别如何实现的基础知识非常有用 How to draw on the non-client area:这显示了如何在标题栏中绘制类似 Office 工具栏的内容。 .Net 代码,但可翻译 Setting up a custom title bar:关于非客户区绘图的非常详细的文章(在Delphi中,所以是Delphi代码)。紧随其后的是part 2,它演示了完全接管整个窗口并自己模仿标准标题栏。 这两篇文章将让您按照问题中的要求模仿 Office 和 Chrome How to set up various VCL controls to work best on a glass area: VCL 对玻璃的支持不是很好。无论您如何尝试解决它,您都会经常得到工件或控件根本无法正确绘制。本文列出了基本的 VCL 视觉组件(标签、按钮、进度条等)以及为每个组件设置的内容,以便它们完美地绘制,或者至少在将它们放置在玻璃区域时“尽可能好”李>

高级或切线相关:

How desktop composition works, with GDI and DirectX surfaces List of desktop manager APIs(仅部分与 Aero 相关)

【讨论】:

【参考方案2】:

Theseposts 在 Vista/Windows 7 下绘制自定义标题栏可能会让您感兴趣。

示例图片:

【讨论】:

【参考方案3】:

我确定您已经找到MSDN page about the DWM。它有很多主题和一些例子。那里的一些“概述”文章有示例(如DWM Blur Behind Overview)。

不幸的是,除了文档之外,很少有好文章。您可以从Using glass on codeproject 开始,然后查看detecting glass in delphi - 之后直接使用文档中的函数也不错。幸运的是,它们在实践中都非常简单。

【讨论】:

【参考方案4】:

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

http://rmklever.com/

【讨论】:

【参考方案5】:

另外,这些老文章可能会对你有所帮助:

Creating Windows Vista Ready Applications with Delphi Creating Windows Vista Ready Applications with Delphi Update - January 2007

【讨论】:

以上是关于适用于所有 Win32 程序员的在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Windows 运行时应用的 Win32 和 COM(设备)

适用于 Windows 运行时应用的 Win32 和 COM(数据)

适用于 Windows 运行时应用的 Win32 和 COM API(系统)

适用于Windows的PHP驱动的GUI应用程序

从 JavaScript 添加到浏览器收藏夹/书签,但适用于所有浏览器(我的在 Chrome 中不起作用)?

DirectX 11.1 和 Win32 桌面