2

When using DwmExtendFrameIntoClientArea function I need to choose Form.TransparencyKey, a color that a glass will be drawn on instead.

The problem is that i writing image-edit tool, and when TransparencyKey color appear inside the edited image, the user see glass instead.

How do i extend the glass into client area without losing some color?

4

1 回答 1

0

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

GDI 将黑色视为透明色,因此您应该只使用黑色画笔绘制您希望显示为玻璃的表单的特定区域。因为您将黑色填充仅限于这些区域,所以没有理由干扰您的 UI 的其余部分。

当然,出现在您正在渲染为玻璃的区域中的任何黑色文本(例如绘制在控件上的文本)都会看起来很难看。解决方案是切换到基于 GDI+ 的渲染或将控件移到要渲染为玻璃的区域之外。如果您需要更好地控制表单区域应该看起来像玻璃而不是提供的DwmExtendFrameIntoClientArea(实际上只是将框架扩展了一定量),请考虑使用DwmEnableBlurBehindWindow。有关如何使用该功能,请在此处查看我更完整的答案。

于 2011-01-22T16:08:52.227 回答