【发布时间】:2021-01-29 18:28:20
【问题描述】:
我正在尝试使我使用 winit 板条箱创建的窗口始终位于顶部 (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_handle 传递给SetWindowPos 的代码:
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");
}
}
我做错了什么?
【问题讨论】:
-
更简单的解决方案:让 Rust 找出类型。在您致电
SetWindowPos时,只需传递win_handle as _。但请记住:What if two programs did this? -
@IInspectable 啊,这也有效。感谢您的提示,虽然我以简单的方式解决了我的问题(让 winit 为我处理),但我会记住,每当我需要投射一些东西时