gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:44:38 26 4
gpt4 key购买 nike

我正在尝试使用 winit 创建一个窗口 crate 始终在顶部( HWND_TOPMOST )。我正在创建我的窗口,并获得 RawWindowHandle::Windows从中。那个struct有一个 pub hwnd这是一个 *mut c_void .我现在的问题是,我该如何转换 *mut c_void*mut winapi::shared::windef::HWND__所以我可以把它传递给 winapi::winuser::SetWindowPos(...) ?
这是我获取原始窗口句柄的代码:

let win_handle = match window.raw_window_handle() {
RawWindowHandle::Windows(windows_handle) => windows_handle.hwnd,
_ => panic!("Unsupported platform!"),
};
这是我通过的代码 win_handleSetWindowPos :
unsafe {
if winuser::SetWindowPos(win_handle, winuser::HWND_TOPMOST, 0, 0, 0, 0, winuser::SWP_NOMOVE | winuser::SWP_NOSIZE) == 1 {
println!("Success");
} else {
println!("Failure");
}
}
我究竟做错了什么?

最佳答案

原来,有一个 HWND struct您可以简单地将 *mut c_void 转换到其中,像这样:

let winapi_handle = win_handle as winuser::shared::windef::HWND;

// Or even simple, cast it in the call with 'as _'
// Shoutout to @IInspectable
SetWindowPos(win_handle as _, winuser::HWND_TOPMOST, 0, 0, 0, 0, winuser::SWP_NOMOVE | winuser::SWP_NOSIZE)
编辑:只是在我尝试了这个之后,我才真正在谷歌上搜索了“Winit 设置窗口总是在顶部”并找到了 this .因此,在使用 WindowBuilder 构建窗口时你可以简单地打电话
window_builder.with_always_on_top(true)
它会在所有支持的平台上为您完成(Linux、Windows 和 MacOS。Adnroid、iOS 和 Web 不支持它)

关于winapi - 如何将 RawWindowHandle::Windows 传递给 winapi::winuser::SetWindowPos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64368724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com