【问题标题】:Transparent window with blurred corners带有模糊角落的透明窗口
【发布时间】:2013-06-12 21:54:54
【问题描述】:

我想要一个边缘模糊的WS_POPUP 窗口,如下图所示:

有什么建议吗?我一直在研究分层窗口,但仍然不知道如何在边缘实现完全透明的像素。也许我可以在整个窗口上放置一个位图,但是如何使背景透明?如果我有一个带有位图的分层窗口,那么完整的位图就会变得透明。

【问题讨论】:

  • 您的链接已损坏。 SO 有图像标签。

标签: c++ winapi user-interface


【解决方案1】:

您需要使用分层窗口(带有WS_EX_LAYERED 扩展窗口样式集的窗口)并使用UpdateLayeredWindow 函数提供带Alpha 通道的32 位位图。

这个函数的文档在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms633556(v=vs.85).aspx

基本上,您不再使用WM_PAINT 的标准绘制循环,而是为窗口的全部内容提供完整的 32 位位图。请注意,API 使用 premultiplied alpha,这意味着位图中的红色、绿色和蓝色通道值必须与 alpha 通道值进行预乘(此处解释:http://msdn.microsoft.com/en-us/library/windows/desktop/dd183393(v=vs.85).aspx)。

【讨论】:

  • 谢谢,但我应该在哪里调用 UpdateLayeredWindow?是否应该在每个 WM_PAINT 上调用它?我无法让它正常工作
  • 我在创建窗口后使用了 UpdateLayeredWindow,它使窗口忽略了鼠标并且我的控件都没有显示。 Here's 屏幕转储。
猜你喜欢
  • 2017-12-28
  • 2019-07-15
  • 2021-06-24
  • 2015-10-25
  • 2010-12-26
  • 2017-04-14
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多