winsafe\gdi\handles/
hbitmap.rs

1#![allow(non_camel_case_types, non_snake_case)]
2
3use crate::decl::*;
4use crate::gdi::ffi;
5use crate::guard::*;
6use crate::kernel::privs::*;
7use crate::prelude::*;
8
9impl GdiObject for HBITMAP {}
10
11impl HBITMAP {
12	/// [`CreateBitmap`](https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createbitmap)
13	/// function.
14	#[must_use]
15	pub fn CreateBitmap(
16		sz: SIZE,
17		num_planes: u32,
18		bit_count: u32,
19		bits: *mut u8,
20	) -> SysResult<DeleteObjectGuard<HBITMAP>> {
21		unsafe {
22			PtrRet(ffi::CreateBitmap(sz.cx, sz.cy, num_planes, bit_count, bits as _))
23				.to_invalidparm_handle()
24				.map(|h| DeleteObjectGuard::new(h))
25		}
26	}
27
28	/// [`GetObject`](https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-getobjectw)
29	/// function.
30	pub fn GetObject(&self) -> SysResult<BITMAP> {
31		let mut bm = BITMAP::default();
32		BoolRet(unsafe {
33			ffi::GetObjectW(self.ptr(), std::mem::size_of::<BITMAP>() as _, pvoid(&mut bm))
34		})
35		.to_invalidparm()
36		.map(|_| bm)
37	}
38}