Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使窗口完全透明的问题_C++_Windows - Fatal编程技术网

C++ 使窗口完全透明的问题

C++ 使窗口完全透明的问题,c++,windows,C++,Windows,我已经使用在中找到的源文件为专用Gameserver GUI创建了一个启动屏幕。此启动屏幕如下图所示: 这就是问题所在: 可以看出,窗口背景不是透明的。我把Adobe Illustrator中的实际图像弄乱了,但我可以确认图像没有错 我曾尝试按照这些线程/说明使窗口透明,以查看启动屏幕的全部效果,但他们没有找到解决方案: 他们都使用不同的方法来创建初始屏幕,但有些解决方案应该适合我。 我做错了什么 编辑: 问题是,我如何(成功地)使我的窗口透明?这个问题对我来说有些不清楚,但我还是会尝试回

我已经使用在中找到的源文件为专用Gameserver GUI创建了一个启动屏幕。此启动屏幕如下图所示:

这就是问题所在:

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

我曾尝试按照这些线程/说明使窗口透明,以查看启动屏幕的全部效果,但他们没有找到解决方案:

他们都使用不同的方法来创建初始屏幕,但有些解决方案应该适合我。 我做错了什么

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

这个问题对我来说有些不清楚,但我还是会尝试回答它。纠正我,如果我错了,我很高兴删除或修改这个答案

据我所知,您发布的是原始的起始图像,即您希望显示为初始屏幕的图像。你知道

沿着这些线,我假设您希望透明地绘制的区域是样式化玻尔模型上方和后面的灰色渐变区域。这将有效地反映Adobe的闪屏所达到的效果,在闪屏上,装饰物似乎“悬挂”在矩形闪屏的边框上,因为它们有一个透明的背景

问题是要透明的区域在原始图像中不是透明的。它也不是纯色,可以去掉纯色以模拟透明度

事实上,这正是创建透明窗口的建议:

  • 创建一个大小合适的顶级窗口,并通过设置
    WS_EX_layered
    extended window标志使其成为分层窗口
  • 响应
    WM_Paint
    消息,使用闪屏图像绘制背景
  • 使用
    LWA_COLORKEY
    标记调用,以在闪屏图像中设置将变为透明的遮罩颜色
  • 为了使其工作,遮罩颜色需要填充要显示为透明的区域。这种遮罩颜色的常见选择是紫红色(RGB=255,0255)-一种紫红色(对于这个短语!),不太可能出现在图像中的其他任何地方

    这也允许您使用简单的GDI做任何事情。不需要依赖GDI+,而且可能会稍微快一点。有了闪屏,你就想让东西尽可能快地出现在屏幕上


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

    等等,有什么问题吗?它们怎么不起作用?对我来说它看起来是透明的。我很抱歉-另一个屏幕截图现在已正确上传,并且可以清楚地看到窗口不透明图像的格式是什么,更具体地说,您是如何加载的?希望您没有尝试使用LoadImage或其他GDI函数。如果要加载每个像素的所有32位,则需要使用GDI+加载图像。您应该更新您的问题,以包括以下内容:(1)图像加载代码和(2)图像绘图代码。格式为.png 48。正如我之前所说,我在这里使用了代码:正是我想要的答案。非常感谢。