托管Flash ActiveX组件时WPF窗口透明度

时间:2010-11-23 07:20:58

标签: c# wpf flash activex transparency

我的应用程序有一个自定义窗口设计,这意味着每个窗口都设置了以下参数(XAML): WindowStyle = “无” AllowsTransparency = “假”

其中一个子窗口需要显示Flash组件,Flash ActiveX组件通过XAML托管:    

关于窗口透明度,WPF和托管的winforms组件存在已知问题,它只是不能开箱即用。为了能够查看Flash组件,AllowTransparency必须设置为“False”,否则,Flash组件将不会显示。

为了保持窗口的透明度(以及一般的L& F),我修改了这段代码:http://blogs.msdn.com/b/adam_nathan/archive/2006/05/04/589686.aspx

        IntPtr hwnd = new WindowInteropHelper(window).Handle;

        // Set the background to transparent from both the WPF and Win32 perspectives
        window.Background = Brushes.Transparent;
        HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;

        MARGINS margins = new MARGINS(margin);
        DwmExtendFrameIntoClientArea(hwnd, ref margins);

所以现在一切都很好,直到我开始在 XP 上查看它。显然,上面的代码片段在XP上不起作用,因为使用的DLL(dwmapi.dll)是Vista DLL。

问题是在XP中是否可以实现相同的结果,如果是,如何?

我已经尝试更改这段代码:How to create a semi transparent window in WPF that allows mouse events to pass through或类似的其他示例,但是,我无法实现任何窗口透明度。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

我相信我不可能做我想做的事情......我最终在XP上创建了方形窗口以避免任何与透明度相关的视觉问题。