Implemented a HINSTANCE getter function for Windows (#1213)

* Expose HINSTANCE now using a getter function

* Missing changes

* remove unused import

* Required changes for the PR

* Rust fmt

* Use GetWindowLong

* Use GetWindowLong
This commit is contained in:
Antonino Siena 2019-10-05 20:52:40 +02:00 committed by Osspial
parent 55640a91ae
commit 42e0ccfa1c
3 changed files with 14 additions and 1 deletions

View file

@ -1,5 +1,6 @@
# Unreleased # Unreleased
- On Windows, implemented function to get HINSTANCE
- On macOS, implement `run_return`. - On macOS, implement `run_return`.
- On iOS, fix inverted parameter in `set_prefers_home_indicator_hidden`. - On iOS, fix inverted parameter in `set_prefers_home_indicator_hidden`.
- On X11, performance is improved when rapidly calling `Window::set_cursor_icon`. - On X11, performance is improved when rapidly calling `Window::set_cursor_icon`.

View file

@ -34,6 +34,8 @@ impl<T> EventLoopExtWindows for EventLoop<T> {
/// Additional methods on `Window` that are specific to Windows. /// Additional methods on `Window` that are specific to Windows.
pub trait WindowExtWindows { 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. /// Returns the native handle that is used by this window.
/// ///
/// The pointer will become invalid when the native window was destroyed. /// The pointer will become invalid when the native window was destroyed.
@ -44,6 +46,11 @@ pub trait WindowExtWindows {
} }
impl WindowExtWindows for Window { impl WindowExtWindows for Window {
#[inline]
fn hinstance(&self) -> *mut libc::c_void {
self.window.hinstance() as *mut _
}
#[inline] #[inline]
fn hwnd(&self) -> *mut libc::c_void { fn hwnd(&self) -> *mut libc::c_void {
self.window.hwnd() as *mut _ self.window.hwnd() as *mut _

View file

@ -14,7 +14,7 @@ use std::{
use winapi::{ use winapi::{
ctypes::c_int, ctypes::c_int,
shared::{ shared::{
minwindef::{DWORD, LPARAM, UINT, WORD, WPARAM}, minwindef::{DWORD, HINSTANCE, LPARAM, UINT, WORD, WPARAM},
windef::{HWND, POINT, RECT}, windef::{HWND, POINT, RECT},
}, },
um::{ um::{
@ -358,6 +358,11 @@ impl Window {
self.window.0 self.window.0
} }
#[inline]
pub fn hinstance(&self) -> HINSTANCE {
unsafe { winuser::GetWindowLongW(self.hwnd(), winuser::GWL_HINSTANCE) as *mut _ }
}
#[inline] #[inline]
pub fn raw_window_handle(&self) -> RawWindowHandle { pub fn raw_window_handle(&self) -> RawWindowHandle {
let handle = WindowsHandle { let handle = WindowsHandle {