From 2d4db1575d787122e6d594ade501c2a05b99d401 Mon Sep 17 00:00:00 2001 From: Mirko Covizzi Date: Mon, 8 Jun 2020 22:59:17 +0200 Subject: [PATCH 1/3] Windows: Add message box --- src/win/window.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/win/window.rs b/src/win/window.rs index 6aa80b9..347ef57 100644 --- a/src/win/window.rs +++ b/src/win/window.rs @@ -13,16 +13,22 @@ use self::winapi::um::wingdi::{ PFD_DOUBLEBUFFER, PFD_DRAW_TO_WINDOW, PFD_MAIN_PLANE, PFD_SUPPORT_OPENGL, PFD_TYPE_RGBA, PIXELFORMATDESCRIPTOR, }; -use self::winapi::um::winuser::{ - CreateWindowExA, DefWindowProcA, DispatchMessageA, GetDC, PeekMessageA, PostQuitMessage, - RegisterClassA, TranslateMessage, CS_HREDRAW, CS_OWNDC, CS_VREDRAW, CW_USEDEFAULT, MSG, - PM_REMOVE, WM_DESTROY, WM_QUIT, WNDCLASSA, WS_CAPTION, WS_CHILD, WS_CLIPSIBLINGS, - WS_MAXIMIZEBOX, WS_MINIMIZEBOX, WS_POPUPWINDOW, WS_SIZEBOX, WS_VISIBLE, -}; +use self::winapi::um::winuser::{CreateWindowExA, DefWindowProcA, DispatchMessageA, GetDC, PeekMessageA, PostQuitMessage, RegisterClassA, TranslateMessage, CS_HREDRAW, CS_OWNDC, CS_VREDRAW, CW_USEDEFAULT, MSG, PM_REMOVE, WM_DESTROY, WM_QUIT, WNDCLASSA, WS_CAPTION, WS_CHILD, WS_CLIPSIBLINGS, WS_MAXIMIZEBOX, WS_MINIMIZEBOX, WS_POPUPWINDOW, WS_SIZEBOX, WS_VISIBLE, MessageBoxA, MB_ICONERROR, MB_TOPMOST, MB_OK}; use crate::Parent::WithParent; use crate::WindowOpenOptions; +unsafe fn message_box(title: &str, msg: &str) { + let title = (title.to_owned() + "\0").as_ptr() as *const i8; + let msg = (msg.to_owned() + "\0").as_ptr() as *const i8; + MessageBoxA( + null_mut(), + msg, + title, + MB_ICONERROR | MB_OK | MB_TOPMOST + ); +} + pub struct Window; impl Window { From 9324b1b129b2abb9efcc99a0a03d4dc18f32a7b4 Mon Sep 17 00:00:00 2001 From: Mirko Covizzi Date: Mon, 8 Jun 2020 23:02:42 +0200 Subject: [PATCH 2/3] Windows: Refactor: move guid generation to fn --- src/win/window.rs | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/win/window.rs b/src/win/window.rs index 347ef57..310dd70 100644 --- a/src/win/window.rs +++ b/src/win/window.rs @@ -29,6 +29,25 @@ unsafe fn message_box(title: &str, msg: &str) { ); } +unsafe fn generate_guid() -> String { + let mut guid: GUID = std::mem::zeroed(); + CoCreateGuid(&mut guid); + format!( + "{:0X}-{:0X}-{:0X}-{:0X}{:0X}-{:0X}{:0X}{:0X}{:0X}{:0X}{:0X}\0", + guid.Data1, + guid.Data2, + guid.Data3, + guid.Data4[0], + guid.Data4[1], + guid.Data4[2], + guid.Data4[3], + guid.Data4[4], + guid.Data4[5], + guid.Data4[6], + guid.Data4[7] + ) +} + pub struct Window; impl Window { @@ -36,22 +55,7 @@ impl Window { pub fn open(options: WindowOpenOptions) -> Self { unsafe { // We generate a unique name for the new window class to prevent name collisions - let mut guid: GUID = std::mem::zeroed(); - CoCreateGuid(&mut guid); - let class_name = format!( - "Baseview-{:0X}-{:0X}-{:0X}-{:0X}{:0X}-{:0X}{:0X}{:0X}{:0X}{:0X}{:0X}\0", - guid.Data1, - guid.Data2, - guid.Data3, - guid.Data4[0], - guid.Data4[1], - guid.Data4[2], - guid.Data4[3], - guid.Data4[4], - guid.Data4[5], - guid.Data4[6], - guid.Data4[7] - ); + let class_name = format!("Baseview-{}", generate_guid()); let wnd_class = WNDCLASSA { // todo: for OpenGL, will use it later From 561d1a3005d6118c1be80995bed8badf72276a4c Mon Sep 17 00:00:00 2001 From: Mirko Covizzi Date: Mon, 8 Jun 2020 23:04:18 +0200 Subject: [PATCH 3/3] Cargo fmt --- src/win/window.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/win/window.rs b/src/win/window.rs index 310dd70..1b89425 100644 --- a/src/win/window.rs +++ b/src/win/window.rs @@ -13,7 +13,13 @@ use self::winapi::um::wingdi::{ PFD_DOUBLEBUFFER, PFD_DRAW_TO_WINDOW, PFD_MAIN_PLANE, PFD_SUPPORT_OPENGL, PFD_TYPE_RGBA, PIXELFORMATDESCRIPTOR, }; -use self::winapi::um::winuser::{CreateWindowExA, DefWindowProcA, DispatchMessageA, GetDC, PeekMessageA, PostQuitMessage, RegisterClassA, TranslateMessage, CS_HREDRAW, CS_OWNDC, CS_VREDRAW, CW_USEDEFAULT, MSG, PM_REMOVE, WM_DESTROY, WM_QUIT, WNDCLASSA, WS_CAPTION, WS_CHILD, WS_CLIPSIBLINGS, WS_MAXIMIZEBOX, WS_MINIMIZEBOX, WS_POPUPWINDOW, WS_SIZEBOX, WS_VISIBLE, MessageBoxA, MB_ICONERROR, MB_TOPMOST, MB_OK}; +use self::winapi::um::winuser::{ + CreateWindowExA, DefWindowProcA, DispatchMessageA, GetDC, MessageBoxA, PeekMessageA, + PostQuitMessage, RegisterClassA, TranslateMessage, CS_HREDRAW, CS_OWNDC, CS_VREDRAW, + CW_USEDEFAULT, MB_ICONERROR, MB_OK, MB_TOPMOST, MSG, PM_REMOVE, WM_DESTROY, WM_QUIT, WNDCLASSA, + WS_CAPTION, WS_CHILD, WS_CLIPSIBLINGS, WS_MAXIMIZEBOX, WS_MINIMIZEBOX, WS_POPUPWINDOW, + WS_SIZEBOX, WS_VISIBLE, +}; use crate::Parent::WithParent; use crate::WindowOpenOptions; @@ -21,12 +27,7 @@ use crate::WindowOpenOptions; unsafe fn message_box(title: &str, msg: &str) { let title = (title.to_owned() + "\0").as_ptr() as *const i8; let msg = (msg.to_owned() + "\0").as_ptr() as *const i8; - MessageBoxA( - null_mut(), - msg, - title, - MB_ICONERROR | MB_OK | MB_TOPMOST - ); + MessageBoxA(null_mut(), msg, title, MB_ICONERROR | MB_OK | MB_TOPMOST); } unsafe fn generate_guid() -> String {