Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在16位颜色深度上使用WS_EX_TRANSPARENT的透明度_C#_Wpf_Transparency - Fatal编程技术网

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

C# 在16位颜色深度上使用WS_EX_TRANSPARENT的透明度,c#,wpf,transparency,C#,Wpf,Transparency,我有一个WPF应用程序,它通过在透明窗口上绘制来在计算机屏幕上进行注释。使用PInvoke设置透明度: extendedWindowStyle = GetWindowLong(hwnd, GWL_EXSTYLE); SetWindowLong(hwnd, GWL_EXSTYLE, extendedWindowStyle | WS_EX_TRANSPARENT); 现在,当我将显示适配器颜色深度从32位调低到16位时,出现了问题。 此时,我不再能够在透明窗口上绘制,而是将鼠标移到透明WPF窗口下

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

extendedWindowStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedWindowStyle | WS_EX_TRANSPARENT);
现在,当我将显示适配器颜色深度从32位调低到16位时,出现了问题。 此时,我不再能够在透明窗口上绘制,而是将鼠标移到透明WPF窗口下方的控件上。有什么办法解决这个问题吗


顺便说一句,使用PInvoke是我在Windows Basic和高对比度主题上正确运行透明度的唯一方法,这些主题关闭了Aero transparency

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

WS_EX_TRANSPARENT是一个非常弱的Windows黑客,用于模拟透明度,仅适用于子窗口。一个WPF应用程序永远不应该需要的,非常不清楚你为什么要使用它。顶层窗口应使用AllowTransparency=True和0%不透明背景笔刷。