提问人:qakmak 提问时间:11/1/2023 最后编辑:qakmak 更新时间:11/1/2023 访问量:42
如何创建支持透明度并由WPF窗口托管的窗口(CreateWindowEx)?
How to create window(CreateWindowEx) which support transparency and hosted by WPF window?
问:
我正在尝试创建支持透明度的窗口,并将其放在.net4.5的WPF窗口中
我决定使用:,所以我扩展类并覆盖其中的方法:HwndHost
HwndHost
BuildWindowCore
protected override HandleRef BuildWindowCore(HandleRef hwndParent)
{
_winHand = CreateWindowEx(WS_EX_LAYERED, "static", string.Empty, WS_POPUP | WS_VISIBLE, 0, 0, _width, _height, hwndParent.Handle, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
// set it support transparent
SetLayeredWindowAttributes(_windowHandle, 100, 0, 2);
return new HandleRef(this, _winHand);
}
但最后它会抛出异常:托管 HWND 必须是指定父窗口的子窗口。
现在我处于死循环中,如果我想要一个透明窗口,它必须是样式,但如果我想将窗口放在 wpf 中,它必须是WS_POPUP
HwndHost
WS_Child
无论如何都有办法吗?
原因是窗口必须是透明窗口,因为我需要使用 SDL2 渲染一些包含 alpha 通道的 rgba 图像。但是如果我没有设置,窗口就无法将 Alpha 通道显示为透明度。
答: 暂无答案
评论
SetLayeredWindowAttributes
SDL2
SetLayeredWindowAttributes
false
WS_POPUP