diff options
| -rw-r--r-- | dialog_windows.go | 20 | ||||
| -rw-r--r-- | zconstants_windows_386.go | 1 | ||||
| -rw-r--r-- | zconstants_windows_amd64.go | 1 |
3 files changed, 15 insertions, 7 deletions
diff --git a/dialog_windows.go b/dialog_windows.go index 91507d3..dec06ae 100644 --- a/dialog_windows.go +++ b/dialog_windows.go @@ -13,21 +13,27 @@ var ( _messageBox = user32.NewProc("MessageBoxW") ) -func _msgBox(primarytext string, secondarytext string, uType uint32) (result int) { +func _msgBox(parent *Window, primarytext string, secondarytext string, uType uint32) (result int) { // http://msdn.microsoft.com/en-us/library/windows/desktop/aa511267.aspx says "Use task dialogs whenever appropriate to achieve a consistent look and layout. Task dialogs require Windows Vista® or later, so they aren't suitable for earlier versions of Windows. If you must use a message box, separate the main instruction from the supplemental instruction with two line breaks." text := primarytext if secondarytext != "" { text += "\n\n" + secondarytext } - uType |= _MB_TASKMODAL // make modal to every window in the program (they're all windows of the uitask, which is a single thread) ptext := toUTF16(text) ptitle := toUTF16(os.Args[0]) ret := make(chan uiret) defer close(ret) + parenthwnd := _HWND(_NULL) + if parent != nil { + parenthwnd = parent.sysData.hwnd + uType |= _MB_APPLMODAL // only for this window + } else { + uType |= _MB_TASKMODAL // make modal to every window in the program (they're all windows of the uitask, which is a single thread) + } uitask <- &uimsg{ call: _messageBox, p: []uintptr{ - uintptr(_NULL), + uintptr(parenthwnd), utf16ToArg(ptext), utf16ToArg(ptitle), uintptr(uType), @@ -41,10 +47,10 @@ func _msgBox(primarytext string, secondarytext string, uType uint32) (result int return int(r.ret) } -func msgBox(primarytext string, secondarytext string) { - _msgBox(primarytext, secondarytext, _MB_OK) +func msgBox(parent *Window, primarytext string, secondarytext string) { + _msgBox(parent, primarytext, secondarytext, _MB_OK) } -func msgBoxError(primarytext string, secondarytext string) { - _msgBox(primarytext, secondarytext, _MB_OK | _MB_ICONERROR) +func msgBoxError(parent *Window, primarytext string, secondarytext string) { + _msgBox(parent, primarytext, secondarytext, _MB_OK | _MB_ICONERROR) } diff --git a/zconstants_windows_386.go b/zconstants_windows_386.go index 677a45e..6e06392 100644 --- a/zconstants_windows_386.go +++ b/zconstants_windows_386.go @@ -48,6 +48,7 @@ const _LB_GETTEXTLEN = 394 const _LB_INSERTSTRING = 385 const _LF_FACESIZE = 32 const _MA_ACTIVATE = 1 +const _MB_APPLMODAL = 0 const _MB_ICONERROR = 16 const _MB_OK = 0 const _MB_TASKMODAL = 8192 diff --git a/zconstants_windows_amd64.go b/zconstants_windows_amd64.go index 8ba09be..9bcb36d 100644 --- a/zconstants_windows_amd64.go +++ b/zconstants_windows_amd64.go @@ -48,6 +48,7 @@ const _LB_GETTEXTLEN = 394 const _LB_INSERTSTRING = 385 const _LF_FACESIZE = 32 const _MA_ACTIVATE = 1 +const _MB_APPLMODAL = 0 const _MB_ICONERROR = 16 const _MB_OK = 0 const _MB_TASKMODAL = 8192 |
