18

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

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

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

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

替代文字

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

4

5 回答 5

21

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

普通玻璃链接

  • 在 Delphi 中使用半透明窗口:在 Delphi 表单中使用 Glass 的良好介绍(从基础开始)
  • 玻璃上的自定义绘图:涵盖如何在窗口的玻璃区域上绘制位图或其他图像。也涵盖了 alpha 通道等,很好的概述
  • 在 VC++ 项目中使用玻璃:包括打开玻璃、绘制文本、处理通知等 - 很好地介绍了它的工作原理。很多底层细节都由 VCL 处理(例如GlassFrame 属性和 TForm 内部处理了很多),但无论如何理解它如何在 API 级别实现的基础知识非常有用
  • 如何在非客户区绘制:这显示了如何在标题栏中绘制类似 Office 工具栏的东西。.Net 代码,但可翻译
  • 设置自定义标题栏:关于非客户区绘图的非常详细的文章(在 Delphi 中,所以是 Delphi 代码)。接下来是第 2 部分,它演示了完全接管整个窗口并自己模仿标准标题栏。 这两篇文章将让您按照问题中的要求模仿 Office 和 Chrome
  • 如何设置各种 VCL 控件以在玻璃区域上发挥最佳效果:VCL 不能很好地支持玻璃。无论您如何尝试解决它,您都会经常得到工件或控件根本无法正确绘制。本文列出了基本的 VCL 视觉组件(标签、按钮、进度条等)以及为每个组件设置的内容,以便它们完美地绘制,或者至少在将它们放置在玻璃区域时“尽可能好”

高级的或相切相关的:

于 2010-09-30T00:05:59.830 回答
6

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

示例图片:

样本

于 2010-09-29T14:47:30.933 回答
5

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

不幸的是,除了文档之外,很少有好文章。您可以从在 codeproject 上使用 glass开始,然后看一下delphi 中的检测 glass - 之后直接使用文档中的功能还不错。幸运的是,它们在实践中都非常简单。

于 2010-09-29T14:45:23.960 回答
2

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

http://rmklever.com/

于 2011-06-30T01:39:12.197 回答
0

此外,这些旧文章可能会对您有所帮助:

于 2010-09-29T22:22:16.203 回答