在16位颜色深度上使用WS_EX_TRANSPARENT的透明度

时间:2014-09-26 14:12:47

标签: c# wpf transparency

我有一个WPF应用程序,它通过在透明窗口上绘画在计算机屏幕上进行注释。透明度使用PInvoke设置:

extendedWindowStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedWindowStyle | WS_EX_TRANSPARENT);

现在,当我将显示适配器colordepth从32位调低到16位时,我遇到了问题。 那时我不再能够在透明窗口上绘画,而是鼠标到达透明WPF窗口下方的控件。任何想法如何解决这个问题?

(BTW使用PInvoke是我在“Windows Basic”和“高对比度”主题上正确使用透明度的唯一方法,可以关闭Aero透明度)

1 个答案:

答案 0 :(得分:0)

我终于发现问题与通过WS_EX_TRANSPARENT设置透明度或WPF中的AllowTransparency = true无关,它与" 0%不透明背景画笔"有关。我只是忽略了我在那里所做的事情:为了在透明画布上绘画,你不能将它设置为0%不透明,因为这会导致你的鼠标事件被忽略。因此我将不透明度设置为01(背景="#01FFFFFF")。现在我意识到这个值太小而无法在使用16位颜色分辨率时检测到。它被视为0%不透明度,不再捕获鼠标事件。将背景设置为" 04FFFFFF"解决了这个问题。以防万一其他人遇到同样的问题 - 我只是看着代码的错误部分试图解决这个问题......