使用DwmExtendFrameIntoClientArea
功能时,我需要选择Form.TransparencyKey
,这是一种将绘制玻璃的颜色。
问题在于我编写了图像编辑工具,当编辑后的图像中出现TransparencyKey
颜色时,用户会看到玻璃。
如何将玻璃延伸到客户区而不会丢失一些颜色?
答案 0 :(得分:0)
您没有理由将Form.TransparencyKey
属性与DWM函数一起使用。该属性与分层窗口有关,与Aero玻璃效果无关。我认为它可能起作用的事实更多是实现细节的结果(就像你设置为TransparencyKey
的颜色的所有3个RGB值一样),而不是设计。
GDI将黑色视为透明色,因此您应该使用黑色笔刷绘制要显示为玻璃的特定区域。因为你只是将黑色填充限制在那些区域,所以没有理由这会干扰你的其他UI。
当然,出现在玻璃上的区域中出现的任何黑色文本(例如控件上绘制的文本)看起来都很难看。解决方案是切换到基于GDI +的渲染或将控件移动到区域之外以呈现为玻璃。如果您需要更好地控制表单区域,该区域应该显示为DwmExtendFrameIntoClientArea
提供的玻璃状(实际上只是将框架扩展了一定量),请使用DwmEnableBlurBehindWindow
代替。有关如何使用该功能,请参阅my more complete answer here。