diff --git a/src/lib.rs b/src/lib.rs index e7f9d500..ba32be01 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -439,6 +439,15 @@ pub mod window { let d = native_display().lock().unwrap(); d.view_ctrl } + + /// Get the main window HWND as a raw pointer (`*mut c_void`). + /// + /// Returns `null_mut()` if the window has not been created yet. + /// Only available on Windows. + #[cfg(target_os = "windows")] + pub fn windows_hwnd() -> *mut std::ffi::c_void { + crate::native_display().lock().unwrap().hwnd + } } #[derive(Debug, Copy, Clone, PartialEq, Hash, Eq)] diff --git a/src/native.rs b/src/native.rs index f3820036..089ce5c8 100644 --- a/src/native.rs +++ b/src/native.rs @@ -24,6 +24,9 @@ pub(crate) struct NativeDisplayData { pub dropped_files: DroppedFiles, pub blocking_event_loop: bool, + #[cfg(target_os = "windows")] + pub hwnd: *mut std::ffi::c_void, + #[cfg(target_vendor = "apple")] pub view: crate::native::apple::frameworks::ObjcId, #[cfg(target_os = "ios")] @@ -31,9 +34,9 @@ pub(crate) struct NativeDisplayData { #[cfg(target_vendor = "apple")] pub gfx_api: crate::conf::AppleGfxApi, } -#[cfg(target_vendor = "apple")] +#[cfg(any(target_vendor = "apple", target_os = "windows"))] unsafe impl Send for NativeDisplayData {} -#[cfg(target_vendor = "apple")] +#[cfg(any(target_vendor = "apple", target_os = "windows"))] unsafe impl Sync for NativeDisplayData {} impl NativeDisplayData { @@ -56,6 +59,8 @@ impl NativeDisplayData { clipboard, dropped_files: Default::default(), blocking_event_loop: false, + #[cfg(target_os = "windows")] + hwnd: std::ptr::null_mut(), #[cfg(target_vendor = "apple")] gfx_api: crate::conf::AppleGfxApi::OpenGl, #[cfg(target_vendor = "apple")] diff --git a/src/native/windows.rs b/src/native/windows.rs index 01ffe5fa..cf46ed3a 100644 --- a/src/native/windows.rs +++ b/src/native/windows.rs @@ -1203,6 +1203,7 @@ where high_dpi: conf.high_dpi, dpi_scale: display.window_scale, blocking_event_loop: conf.platform.blocking_event_loop, + hwnd: wnd as *mut std::ffi::c_void, ..NativeDisplayData::new(conf.window_width, conf.window_height, tx, clipboard) });