gpt4 book ai didi

c++ - 使窗口完全透明的问题

转载 作者:行者123 更新时间:2023-11-28 02:49:39 25 4
gpt4 key购买 nike

我使用了在 http://www.codeproject.com/Articles/15523/Own-thread-Win32-splash-screen 找到的源文件为专用游戏服务器 GUI 创建启动画面。此初始屏幕如下图所示:

enter image description here

问题是:

enter image description here

可以看出,窗口背景不是透明的。我在 Adob​​e Illustrator 中弄乱了实际图像,但我可以确认图像没有错误。

我已经尝试按照这些线程/说明使窗口变得透明,以便看到启动画面的全部影响,但他们未能提出解决方案: Creating a transparent window in C++ Win32 How to create fully transparent window which has not transparent content? http://www.overclock.net/t/1113233/solved-c-semi-transparent-window

他们都使用不同的方法来创建启动画面,但有些解决方案应该适合我。我在这里做错了什么?

编辑:问题是,如何(成功地)使我的窗口透明?

最佳答案

这个问题对我来说仍然有些不清楚,但无论如何我都会尝试回答它。如果我错了请纠正我,我很乐意删除或修改这个答案......

据我了解,the first image您发布的是原始起始图像——您希望显示为初始屏幕的图像。你知道的,Adobe Photoshop-style .

按照这些思路,我假设您要透明绘制的区域是程式化玻尔模型上方和后面的灰色渐变区域。这将有效地反射(reflect)出 Adob​​e 的初始屏幕所实现的效果,其中装饰物似乎“悬挂”在矩形初始屏幕的边框上,因为它们具有透明背景。

问题是您希望透明的区域在原始图像中是透明的。它也不是纯色,可以将其剔除以模拟透明度。

事实上,这正是the answers to the linked question 的方式建议创建一个透明窗口:

  1. 创建一个适当大小的顶级窗口,并通过设置 WS_EX_LAYERED 扩展窗口标志使其成为分层窗口。
  2. 响应 WM_PAINT 消息,使用启动画面图像绘制其背景。
  3. 调用SetLayeredWindowAttributes function使用 LWA_COLORKEY 标志在初始屏幕图像中设置将变为透明的 mask 颜色。

为了让它起作用, mask 颜色需要填充您想要显示为透明的区域。这种 mask 颜色的常见选择是紫红色 (RGB = 255, 0, 255) — 一种被染成红色的颜色 ( credit to Hans Passant 对于这组短语!) 即不太可能出现在图像中的其他任何地方。

这还允许您仅使用 GDI 即可完成所有操作。不需要对 GDI+ 的依赖,而且可能会稍微快一些。对于启动画面,您希望内容尽可能快地出现在屏幕上。

当然,您可以做更复杂的事情,例如使用 BLENDFUNCTION 和/或带有预乘 alpha channel 值的图像。但除非绝对必要,否则我会避免所有努力。您的用户最多会看到此初始屏幕一两秒钟。它只是为了让他们放心,该应用程序实际上正在启动。如果他们看到它的时间比这更长,那么您最好将时间花在优化应用的启动时间上,而不是花在美化应用上。

关于c++ - 使窗口完全透明的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23353482/

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