diff --git a/CHANGELOG.md b/CHANGELOG.md index 77ae2ff9..1c780b6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Unreleased +- On Windows, implemented function to get HINSTANCE - On macOS, implement `run_return`. - On iOS, fix inverted parameter in `set_prefers_home_indicator_hidden`. - On X11, performance is improved when rapidly calling `Window::set_cursor_icon`. diff --git a/src/platform/windows.rs b/src/platform/windows.rs index 43133e04..0b93b330 100644 --- a/src/platform/windows.rs +++ b/src/platform/windows.rs @@ -34,6 +34,8 @@ impl EventLoopExtWindows for EventLoop { /// Additional methods on `Window` that are specific to Windows. pub trait WindowExtWindows { + /// Returns the HINSTANCE of the window + fn hinstance(&self) -> *mut libc::c_void; /// Returns the native handle that is used by this window. /// /// The pointer will become invalid when the native window was destroyed. @@ -44,6 +46,11 @@ pub trait WindowExtWindows { } impl WindowExtWindows for Window { + #[inline] + fn hinstance(&self) -> *mut libc::c_void { + self.window.hinstance() as *mut _ + } + #[inline] fn hwnd(&self) -> *mut libc::c_void { self.window.hwnd() as *mut _ diff --git a/src/platform_impl/windows/window.rs b/src/platform_impl/windows/window.rs index cb32c2ac..4a00962b 100644 --- a/src/platform_impl/windows/window.rs +++ b/src/platform_impl/windows/window.rs @@ -14,7 +14,7 @@ use std::{ use winapi::{ ctypes::c_int, shared::{ - minwindef::{DWORD, LPARAM, UINT, WORD, WPARAM}, + minwindef::{DWORD, HINSTANCE, LPARAM, UINT, WORD, WPARAM}, windef::{HWND, POINT, RECT}, }, um::{ @@ -358,6 +358,11 @@ impl Window { self.window.0 } + #[inline] + pub fn hinstance(&self) -> HINSTANCE { + unsafe { winuser::GetWindowLongW(self.hwnd(), winuser::GWL_HINSTANCE) as *mut _ } + } + #[inline] pub fn raw_window_handle(&self) -> RawWindowHandle { let handle = WindowsHandle {