#![allow(non_camel_case_types, non_snake_case)]
use crate::co;
use crate::comctl::ffi;
use crate::decl::*;
use crate::kernel::privs::*;
use crate::ole::privs::*;
use crate::prelude::*;
impl HWND {
pub unsafe fn DefSubclassProc<M>(&self, msg: M) -> M::RetType
where
M: MsgSend,
{
let mut msg = msg;
let wm_any = msg.as_generic_wm();
unsafe {
msg.isize_to_ret(ffi::DefSubclassProc(
self.ptr(),
wm_any.msg_id.raw(),
wm_any.wparam,
wm_any.lparam,
))
}
}
pub fn InitializeFlatSB(&self) -> HrResult<()> {
HrRet(unsafe { ffi::InitializeFlatSB(self.ptr()) }).to_hrresult()
}
pub fn RemoveWindowSubclass(
&self,
subclass_func: SUBCLASSPROC,
subclass_id: usize,
) -> SysResult<()> {
BoolRet(unsafe { ffi::RemoveWindowSubclass(self.ptr(), subclass_func as _, subclass_id) })
.to_sysresult()
}
pub unsafe fn SetWindowSubclass(
&self,
subclass_proc: SUBCLASSPROC,
subclass_id: usize,
ref_data: usize,
) -> SysResult<()> {
BoolRet(unsafe {
ffi::SetWindowSubclass(self.ptr(), subclass_proc as _, subclass_id, ref_data)
})
.to_sysresult()
}
pub fn TaskDialog(
&self,
window_title: Option<&str>,
main_instruction: Option<&str>,
content: Option<&str>,
common_buttons: co::TDCBF,
icon: IconRes,
) -> HrResult<co::DLGID> {
let mut pn_button = 0i32;
let (hinst, raw_ico) = icon.as_ptr();
HrRet(unsafe {
ffi::TaskDialog(
self.ptr(),
hinst.ptr(),
WString::from_opt_str(window_title).as_ptr(),
WString::from_opt_str(main_instruction).as_ptr(),
WString::from_opt_str(content).as_ptr(),
common_buttons.raw(),
raw_ico,
&mut pn_button,
)
})
.to_hrresult()
.map(|_| unsafe { co::DLGID::from_raw(pn_button as _) })
}
pub fn UninitializeFlatSB(&self) -> HrResult<()> {
HrRet(unsafe { ffi::UninitializeFlatSB(self.ptr()) }).to_hrresult()
}
}