【发布时间】:2011-05-21 00:37:30
【问题描述】:
我正在尝试为应用程序获得媒体播放器玻璃效果,但我面临着各种障碍。是我,还是API?
我先打电话:
MARGINS margins = { -1, -1, -1, -1 };
HRESULT result = ::DwmExtendFrameIntoClientArea(m_hWnd, &margins);
并将背景擦除为黑色:
OnEraseBkgnd
在我添加编辑框之前一切都很好。使用 EditBox,黑色文本出现的地方被玻璃替换。这个问题与更高级的控件(如 ComboBoxEx 等)不成比例。那些开始看起来像一团糟。
这种方法的优点是 alpha 混合图像看起来不错。并逐渐融入玻璃中。
编辑框的解决方案似乎是使用带有 LWA_COLORKEY 的 WS_EX_LAYERED 并使用一些糟糕的颜色进行玻璃遮罩,并将背景擦除为该颜色。不幸的是,这破坏了其他事情。图标上的 alpha 混合看起来超级难看,阴影混合成放射性绿色,而且玻璃本身变得可以点击,即使我在窗口上没有 WS_EX_TRANSPARENT 样式。
第三个建议是使用 GDI+ 进行自定义合成,但这似乎是一种不好的方法,因为 GDI+ 是一种软件后备,我找不到如何将 EditBox 或 ComboBoxEx 渲染到我可以的图像的方法以后作曲用。
我错过了什么吗?
【问题讨论】:
-
您链接到的两个问题似乎与您在此处提出的问题几乎完全相同。你的问题是什么:有人有其他想法吗?
-
这些问题描述了 RGB(0,0,0) 的部分行为,这似乎被破坏了。我还尝试了通过 WinAPI 机制进行屏蔽,但仍然无法正常工作并导致完全不同但同样错误的结果。所以我仍然想知道是否有人找到了解决方案。
-
GDI 为 24bpp 是核心问题,玻璃效果需要设置 alpha。 Leo 的链接看起来不错。
标签: winapi gdi+ aero dwm aero-glass