没有TransparencyKey的DwmExtendFrameIntoClientArea?

时间:2011-01-22 15:58:32

标签: .net winforms transparency dwm aero-glass

使用DwmExtendFrameIntoClientArea功能时,我需要选择Form.TransparencyKey,这是一种将绘制玻璃的颜色。

问题在于我编写了图像编辑工具,当编辑后的图像中出现TransparencyKey颜色时,用户会看到玻璃。

如何将玻璃延伸到客户区而不会丢失一些颜色?

1 个答案:

答案 0 :(得分:0)

您没有理由将Form.TransparencyKey属性与DWM函数一起使用。该属性与分层窗口有关,与Aero玻璃效果无关。我认为它可能起作用的事实更多是实现细节的结果(就像你设置为TransparencyKey的颜色的所有3个RGB值一样),而不是设计。

GDI将黑色视为透明色,因此您应该使用黑色笔刷绘制要显示为玻璃的特定区域。因为你只是将黑色填充限制在那些区域,所以没有理由这会干扰你的其他UI。

当然,出现在玻璃上的区域中出现的任何黑色文本(例如控件上绘制的文本)看起来都很难看。解决方案是切换到基于GDI +的渲染或将控件移动到区域之外以呈现为玻璃。如果您需要更好地控制表单区域,该区域应该显示为DwmExtendFrameIntoClientArea提供的玻璃状(实际上只是将框架扩展了一定量),请使用DwmEnableBlurBehindWindow代替。有关如何使用该功能,请参阅my more complete answer here