use std::iter::once;
use windows::Win32::UI::Input::KeyboardAndMouse::GetActiveWindow;
use windows::Win32::UI::WindowsAndMessaging::IDNO;
use windows::Win32::UI::WindowsAndMessaging::IDYES;
use windows::Win32::UI::WindowsAndMessaging::MB_ICONERROR;
use windows::Win32::UI::WindowsAndMessaging::MB_ICONINFORMATION;
use windows::Win32::UI::WindowsAndMessaging::MB_ICONQUESTION;
use windows::Win32::UI::WindowsAndMessaging::MB_ICONWARNING;
use windows::Win32::UI::WindowsAndMessaging::MB_OK;
use windows::Win32::UI::WindowsAndMessaging::MB_YESNO;
use windows::Win32::UI::WindowsAndMessaging::MB_YESNOCANCEL;
use windows::Win32::UI::WindowsAndMessaging::MESSAGEBOX_RESULT;
use windows::Win32::UI::WindowsAndMessaging::MESSAGEBOX_STYLE;
use windows::Win32::UI::WindowsAndMessaging::MessageBoxW;
use windows::core::PCWSTR;
pub fn show_message(text: &str, caption: &str) {
message_box(text, caption, MB_OK);
}
pub fn show_info(text: &str, caption: &str) {
message_box(text, caption, MB_OK | MB_ICONINFORMATION);
}
pub fn show_warn(text: &str, caption: &str) {
message_box(text, caption, MB_OK | MB_ICONWARNING);
}
pub fn show_error(text: &str, caption: &str) {
message_box(text, caption, MB_OK | MB_ICONERROR);
}
pub fn query_yes_no(text: &str, caption: &str) -> bool {
message_box(text, caption, MB_YESNO | MB_ICONQUESTION) == IDYES
}
pub fn query_yes_no_cancel(text: &str, caption: &str) -> Option<bool> {
match message_box(text, caption, MB_YESNOCANCEL | MB_ICONQUESTION) {
IDYES => Some(true),
IDNO => Some(false),
_ => None
}
}
pub fn message_box(text: &str, caption: &str, styles: MESSAGEBOX_STYLE) -> MESSAGEBOX_RESULT {
let text: Vec<u16> = text.encode_utf16().chain(once(0u16)).collect();
let lptext = PCWSTR::from_raw(text.as_ptr());
let caption: Vec<u16> = caption.encode_utf16().chain(once(0u16)).collect();
let lpcaption = PCWSTR::from_raw(caption.as_ptr());
unsafe {
let hwnd = GetActiveWindow();
MessageBoxW(hwnd, lptext, lpcaption, styles)
}
}