gpt4 book ai didi

c++ - MFC:如何创建带有透明 PNG 作为背景(而不是窗口镶边)的 Skinnied Dialog?

转载 作者:行者123 更新时间:2023-11-28 08:06:45 25 4
gpt4 key购买 nike

所以这是一个炉排 small, readable MFC sample .但它的背景是立体图像;我想知道如何创建一个透明的 PNG 作为应用程序背景?

最佳答案

有两种基本方法可以改变窗口的非客户端(“chrome”)区域。

Layered windows , 在 Windows XP 中引入 - 并允许不同级别的窗口效果。这里的技术是将 WS_EX_LAYERED 样式添加到窗口 - 这会阻止 WM_PAINT(在 MFC CWnd::OnPaint 中)运行。相反,分层窗口由调用 UpdateLayeredWindow 的应用程序绘制,提供一个充满预乘 32bpp 数据的 DIBSection。

Windows Vista 引入了 Desktop Window Manager ,在绘制窗口之前组合窗口以启用桌面 alpha 效果。使用 DWM API 获得 alpha 效果不像 PNG 那样可定制,但仍然很有吸引力。

这两种技术都会遇到问题,因为子窗口绘制不是 alpha 感知 - 分层窗口根本不绘制子窗口,因此您需要手动枚举所有子控件并将其绘制到屏幕外表面。 DWM 窗口会绘制子控件 - 但 native 应用程序可用的标准窗口控件均未修改为可感知 alpha。

具有讽刺意味的是,.NET WinForms 应用程序,表面上似乎只是简单地包装了标准的 Windows 通用控件,但实际上所有标准控件都已针对 .NET 重新开发,并且在放置在窗口的“玻璃”区域时它们可以正确绘制.

关于c++ - MFC:如何创建带有透明 PNG 作为背景(而不是窗口镶边)的 Skinnied Dialog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10153863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com