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



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

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

现在,当我将显示适配器的颜色深度从32位调低到16位时,我遇到了问题。在那一刻,我无法再在透明窗口上绘制,而是鼠标到达透明WPF窗口下方的控件。有什么办法解决这个问题吗?

(顺便说一句,使用PInvoke是我在"Windows Basic"one_answers"High contrast"主题上正确使用透明度的唯一方法,这些主题会关闭Aero透明度)

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

最新更新