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

2024-06-20

我正在寻找良好的资源来学习使用 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 http://msdn.microsoft.com/en-us/library/bb688195(VS.85).aspx.


这是我的“Glass”书签文件夹的子集,是lot关于该主题的研究/搜索。我发现所有这些对于了解玻璃和解决利用玻璃解决各种问题都很有用。其中大部分都包含 Delphi 代码,但我已经指出了其他语言的代码。

普通玻璃链接

  • 在 Delphi 中使用半透明窗口 http://blog.delphi-jedi.net/2008/05/01/translucent-windows-with-aero/:在 Delphi 表单中使用 Glass 的良好介绍(从基础开始)
  • 玻璃上的定制绘图 http://delphihaven.wordpress.com/2010/08/19/custom-drawing-on-glass-1/:介绍如何在窗口的玻璃区域上绘制位图或其他图像。也涵盖 Alpha 通道等,很好的概述
  • 在 VC++ 项目中使用 glass http://www.codeproject.com/KB/vista/VGGlassIntro.aspx:涵盖打开玻璃、绘制文本、处理通知等 - 很好地介绍了其工作原理。许多底层细节由 VCL 处理(例如GlassFrame 属性 http://docwiki.embarcadero.com/VCL/en/Forms.TForm.GlassFrame和 TForm 内部负责处理很多事情),但是无论如何,了解它在 API 级别如何实现的基础知识是非常有用的
  • 如何在非客户区绘图 http://www.codeproject.com/KB/dialog/AeroNonClientAreaButtons.aspx:这展示了如何在标题栏中绘制类似于 Office 工具栏的内容。 .Net 代码,但可翻译
  • 设置自定义标题栏 http://delphihaven.wordpress.com/2010/04/19/setting-up-a-custom-titlebar/:关于非客户区绘图的非常详细的文章(在Delphi中,所以Delphi代码)。跟进的是part 2 http://delphihaven.wordpress.com/2010/04/22/setting-up-a-custom-title-bar-reprise/,它演示了完全接管整个窗口并模仿标准标题栏。这两篇文章将让你模仿Office和Chrome正如你在问题中所要求的
  • 如何设置各种 VCL 控件以在玻璃区域上发挥最佳作用 http://delphihaven.wordpress.com/2010/07/29/controls-and-glass/:VCL 不能很好地支持玻璃。无论您采取什么措施来尝试解决问题,您都会经常遇到伪影或控件根本无法正确绘制。本文列出了基本的 VCL 视觉组件(标签、按钮、进度条等)以及为每个组件设置的内容,以便它们能够完美绘制,或者至少在将它们放置在玻璃区域上时“尽可能好”

高级的,或切线相关的:

  • 桌面合成如何使用 GDI 和 DirectX 表面进行工作 http://blogs.msdn.com/b/greg_schechter/archive/2006/05/02/588934.aspx
  • 桌面管理器 API 列表 http://blogs.msdn.com/b/greg_schechter/archive/2006/09/14/753605.aspx(仅部分与航空相关)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

供所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例 的相关文章

  • 如何在 Flutter 中创建类似 Telegram 或 WhatsApp 聊天页面的富文本输入?

    How can I create a Rich Text Input like a Telegram chat page without displaying reserved characters such as bold italic
  • 我如何淡入/淡出 TImage?

    我有一个简单的TForm命名为Form1 Image1 是一个TImage加载了一个 PNGImage 和一个 Button1TButton测试事物 成功实现了对图像1的Alpha Blend的方法 代码如下 procedure SetPN
  • 如何以编程方式移动 Windows 任务栏?

    我想知道任何类型的 API 或解决方法 例如脚本或注册表 来将 Windows 任务栏移动 或调整大小 到另一个位置 包括另一个显示器 如果是双显示器 当然 我们可以使用鼠标来移动任务栏 但我想通过程序或某种自动化方式来移动它 我试图找到
  • Windows Azure 虚拟机在扩展时访问网络速度很慢

    我正在我的小型 azure VM 上运行一些启动脚本 cmd bat 其中包括从已安装的 VHD 进行文件传输操作 通常会在大约 3 分钟内完成 复制文件并使用命令行提取 500Mb zip 文件 7z 当我扩展到约 150 个实例时 相同
  • 通过.NET/C#发送传真

    如何在 NET 中发送传真 我们有一个传真服务器 我们需要通过它将文件传真给客户 由于我们有传真服务器 我不认为我必须在我的机器上配置传真调制解调器 对吧 它只会通过传真服务器吗 有没有好的免费 或便宜 传真 API 在我的研究中 我遇到过
  • 判断两个文件是否属于同一个卷

    我正在参与一些 ntfs 硬链接项目 我想知道如何确定两个文件 具有完整路径 是否属于同一卷 有几个选项可用于查找与文件关联的卷信息 找到两个文件的根路径 然后使用GetVolumeInformation http msdn microso
  • 为什么 C++ CLI 对于托管类型没有默认参数?

    以下行有错误Default argument is not allowed public ref class SPlayerObj private void k int s 0 ERROR 为什么 C 对托管类型没有默认参数 我想知道是否有
  • c Sharp exe 在打开时应要求“以管理员身份运行”提示

    我有一个由 c Sharp 程序生成的 exe 当我运行 exe 时 我希望出现 UAC 提示 并提供以管理员身份运行 exe 的选项 我见过默认以管理员身份运行 exe 的示例 但是 如何让 UAC 要求我以管理员身份运行 exe 任何想
  • 使用标准用户帐户在提升的脚本中获取登录用户名

    在 Windows 7 中运行的批处理脚本中 我有几个 IF 子句 例如 IF USERNAME foo GOTO bar 不幸的是 当我运行这个批处理脚本时 用 以管理员身份运行 从上下文菜单中 USERNAME 始终是管理员的用户名 而
  • Delphi - 引用在运行时创建的组件

    我正在使用 Delphi 5 并且在运行时创建许多面板 然后在面板上创建按钮 显然也是在运行时创建 我需要这样做 因为将来我可能需要动态创建更多面板 按钮组合 我可以完成所有这些 但我不知道如何引用我创建的面板 因为我找不到访问面板组件名称
  • 导出的 DLL 函数未按词法排序?

    嗯 今天我遇到了一个奇怪的事情 我不久前编写了自己的 GetProcAddress 版本 用于从远程进程获取函数地址 显然我花了很多时间阅读 PE 架构来找出解决这个问题的最佳方法 根据 PECOFF v8 规范 我认为这是最新的官方规范
  • 以编程方式断开和重新连接显示器

    问题 以编程方式断开和重新连接显示器的最佳方法是什么 目标 关闭显示器上的视频输出 黑屏 无背光 然后重新打开 想象一下从显示器上拔下视频线 然后重新插入 我的尝试 Get the monitor to disable uint iDevN
  • VC++致命错误LNK1168:无法打开filename.exe进行写入

    Suddenly my Visual Studio Express 2010 C stopped rebuilding my project When I first hit F7 the project builds and runs f
  • 触摸屏模拟器:是否有任何 Windows 模拟器可以在触摸屏环境中测试应用程序

    我想在触摸屏环境中测试我的应用程序 我的应用程序是一个使用 asp net net Framework 3 5 和 flash 构建的网站 我想使用 Windows XP Vista 7 的模拟器来测试我的应用程序 请告诉我是否有 Micr
  • 关于 Windows、原始鼠标数据的代码要 #include 哪些内容

    我发现下面的帖子对于做我自己的项目非常有用 那么新手问题是 我必须包含什么才能使其发挥作用 Link 如何准确测量具有已知 DPI 的鼠标的鼠标移动 以英寸或厘米为单位 https stackoverflow com questions 1
  • 适用于 Python 的旧版本 Windows 二进制库 Wheel 的存储库?

    作为很多用户 我使用很棒的Christopher 的 Windows 二进制轮子 http www lfd uci edu gohlke pythonlibs vlfd当尝试在 Windows 上安装一些 python 包 例如 GDAL
  • 如何检查窗口在用户屏幕上是否完全可见?

    有没有办法检查 WinForm 在屏幕上完全可见 例如是否超出屏幕范围 我已经尝试使用 SystemInformation VirtualScreen 来实现此目的 只要虚拟屏幕是一个矩形 它就可以很好地工作 但是一旦它不是 例如 L 形的
  • WinSock.h 和 WinSock2.h 使用哪个?

    有谁知道 WinSock h 和 WinSock2 h 之间的区别 我知道它们不使用相同的库 lib 但我不知道 WinSock2 是否仅添加了新功能 或者是否还改进了 WinSock 1 功能 我正在使用 IP TCP 套接字 并希望使用
  • Windows Defender 检测 Python EXE 为木马

    我制作了一个 Python 脚本 将 Windows 目录以 zip 形式邮寄给我 我使用 sched 模块添加了一个调度程序 每小时重复一次 我试图制作一个简单的同步应用程序供个人使用 在 Windows 启动时启动 我使用将其转换为 e
  • 就 ADO 而言,nvarchar(max) 有多大?

    我正在尝试使用针对 ADO 的参数化查询 http msdn microsoft com en us library windows desktop ms677209 28v vs 85 29 aspx INSERT INTO Foo 名称

随机推荐