1 // =================================
 2 // Copyright (c) 2024 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 using System;
 7 using System.Windows.API;
 8 
 9 namespace System.Windows
10 {
11     public enum MessageBoxType : uint
12     {
13         MB_ABORTRETRYIGNORE = 2u
14         MB_CANCELTRYCONTINUE = 6u
15         MB_HELP = 16384u
16         MB_OK = 0u
17         MB_OKCANCEL = 1u
18         MB_RETRYCANCEL = 5u
19         MB_YESNO = 4u
20         MB_YESNOCANCEL = 3u
21         MB_ICONEXCLAMATION = 48u
22         MB_ICONWARNING = 48u
23         MB_ICONINFORMATION = 64u
24         MB_ICONASTERISK = 64u
25         MB_ICONQUESTION = 32u
26         MB_ICONSTOP = 16u
27         MB_ICONERROR = 16u
28         MB_ICONHAND = 16u
29     }
30 
31     public enum MessageBoxResult : int
32     {
33         ok = 1
34         cancel = 2
35         abort = 3
36         retry = 4
37         ignore = 5
38         yes = 6
39         no = 7
40         tryAgain = 10
41         continue_ = 11
42     }
43 
44     public static class MessageBox
45     {
46         public static Result<bool> Show(const string& message)
47         {
48             int result = WinShowMessageBox(message.Chars()null);
49             if (result == 0)
50             {
51                 int errorId = WinAllocateWindowsError("MessageBox.Show failed"WinGetLastError());
52                 return Result<bool>(ErrorId(errorId));
53             }
54             return Result<bool>(true);
55         }
56         public static Result<bool> Show(const string& messageconst string& caption)
57         {
58             int result = WinShowMessageBox(message.Chars()caption.Chars());
59             if (result == 0)
60             {
61                 int errorId = WinAllocateWindowsError("MessageBox.Show failed"WinGetLastError());
62                 return Result<bool>(ErrorId(errorId));
63             }
64             return Result<bool>(true);
65         }
66         public static Result<MessageBoxResult> Show(const string& messageconst string& captionControl* ownerMessageBoxType type)
67         {
68             void* ownerWindowHandle = null;
69             if (owner != null)
70             {
71                 ownerWindowHandle = owner->Handle();
72             }
73             int result = WinShowMessageBoxWithType(message.Chars()caption.Chars()ownerWindowHandletype);
74             if (result == 0)
75             {
76                 int errorId = WinAllocateWindowsError("MessageBox.Show failed"WinGetLastError());
77                 return Result<MessageBoxResult>(ErrorId(errorId));
78             }
79             else
80             {
81                 return Result<MessageBoxResult>(cast<MessageBoxResult>(result));
82             }
83         }
84     }