如何将RawWindowHandle::Windows传递给winapi::winuser::SetWindowPos

如何将RawWindowHandle::Windows传递给winapi::winuser::SetWindowPos,winapi,rust,Winapi,Rust,我正在尝试使我使用winit板条箱创建的窗口始终位于顶部(HWND\u-topmest)。我正在创建我的窗口,并从中获取RawWindowHandle::Windows。它有一个pub hwnd,它是一个*mut c_void。现在我的问题是,我如何将*mut c_void转换为*mut-winapi::shared::windef::HWND__,以便将其传递给winapi::winuser::SetWindowPos(…) 以下是获取原始窗口句柄的代码: let win\u handle=m

我正在尝试使我使用
winit
板条箱创建的窗口始终位于顶部(
HWND\u-topmest
)。我正在创建我的窗口,并从中获取
RawWindowHandle::Windows
。它有一个
pub hwnd
,它是一个
*mut c_void
。现在我的问题是,我如何将
*mut c_void
转换为
*mut-winapi::shared::windef::HWND__
,以便将其传递给
winapi::winuser::SetWindowPos(…)

以下是获取原始窗口句柄的代码:

let win\u handle=match window.raw\u window\u handle(){
RawWindowHandle::Windows(Windows\u handle)=>Windows\u handle.hwnd,
_=>恐慌!(“不支持的平台!”),
};
这是我的代码,将
win\u handle
传递到
SetWindowPos

不安全{
如果winuser::SetWindowPos(win_句柄,winuser::HWND_最顶端,0,0,0,winuser::SWP_NOMOVE | winuser::SWP_NOSIZE)==1{
println!(“成功”);
}否则{
println!(“失败”);
}
}
我做错了什么?

事实证明,有一个问题,你可以简单地将
*mut c_void
转换为:

让winapi_handle=win_handle作为winuser::shared::windef::HWND;
//或者更简单,在调用中使用“as u2;”
//喊到@IInspectable
SetWindowPos(win_句柄为|,winuser::HWND_最上面的,0,0,0,winuser::SWP_NOMOVE | winuser::SWP_NOSIZE)
编辑:只有在我尝试了这一点之后,我才在谷歌上搜索到“Winit set window always on top”,并找到了它。因此,在使用WindowBuilder构建窗口时,只需调用

window\u builder.始终在顶部(true)

在所有受支持的平台上(Linux、Windows和MacOS.Adnroid、iOS和Web不支持它),它都能为您提供支持。

更简单的解决方案:让Rust找出类型。在调用
SetWindowPos
时,只需将
win\u handle作为
传递即可。但请记住:@IInspectable啊,这也行。谢谢你的提示,虽然我用简单的方法解决了我的问题(让winit帮我处理),但我会记住,每当我需要施放一些东西的时候