Refactor (windows).
This commit is contained in:
parent
2428e68504
commit
113333268d
9 changed files with 323 additions and 205 deletions
|
@ -1,46 +0,0 @@
|
||||||
package zenity
|
|
||||||
|
|
||||||
const (
|
|
||||||
_CW_USEDEFAULT = 0x80000000
|
|
||||||
|
|
||||||
_WS_TABSTOP = 0x00010000
|
|
||||||
_WS_GROUP = 0x00020000
|
|
||||||
_WS_SYSMENU = 0x00080000
|
|
||||||
_WS_VSCROLL = 0x00200000
|
|
||||||
_WS_DLGFRAME = 0x00400000
|
|
||||||
_WS_BORDER = 0x00800000
|
|
||||||
_WS_CLIPSIBLINGS = 0x04000000
|
|
||||||
_WS_DISABLED = 0x08000000
|
|
||||||
_WS_VISIBLE = 0x10000000
|
|
||||||
_WS_CHILD = 0x40000000
|
|
||||||
_WS_POPUP = 0x80000000
|
|
||||||
_WS_POPUPWINDOW = _WS_POPUP | _WS_BORDER | _WS_SYSMENU
|
|
||||||
|
|
||||||
_WS_EX_DLGMODALFRAME = 0x00000001
|
|
||||||
_WS_EX_WINDOWEDGE = 0x00000100
|
|
||||||
_WS_EX_CLIENTEDGE = 0x00000200
|
|
||||||
_WS_EX_CONTROLPARENT = 0x00010000
|
|
||||||
|
|
||||||
_BS_DEFPUSHBUTTON = 0x0001
|
|
||||||
_ES_AUTOHSCROLL = 0x0080
|
|
||||||
_ES_PASSWORD = 0x0020
|
|
||||||
_SS_NOPREFIX = 0x0080
|
|
||||||
_SS_EDITCONTROL = 0x2000
|
|
||||||
_SS_WORDELLIPSIS = 0xc000
|
|
||||||
_LBS_EXTENDEDSEL = 0x0800
|
|
||||||
_MCS_NOTODAY = 0x0010
|
|
||||||
_PBS_SMOOTH = 0x0001
|
|
||||||
_PBS_MARQUEE = 0x0008
|
|
||||||
|
|
||||||
_SW_NORMAL = 1
|
|
||||||
|
|
||||||
_SWP_NOMOVE = 0x0002
|
|
||||||
_SWP_NOZORDER = 0x0004
|
|
||||||
|
|
||||||
_SC_CLOSE = 0xf060
|
|
||||||
|
|
||||||
_GWL_STYLE = -16
|
|
||||||
|
|
||||||
_PROGRESS_CLASS = "msctls_progress32"
|
|
||||||
_MONTHCAL_CLASS = "SysMonthCal32"
|
|
||||||
)
|
|
|
@ -59,35 +59,32 @@ func (dlg *calendarDialog) setup(text string, opts options) (time.Time, error) {
|
||||||
defer win.UnregisterClass(cls, instance)
|
defer win.UnregisterClass(cls, instance)
|
||||||
|
|
||||||
owner, _ := opts.attach.(win.HWND)
|
owner, _ := opts.attach.(win.HWND)
|
||||||
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_CONTROLPARENT|_WS_EX_WINDOWEDGE|_WS_EX_DLGMODALFRAME,
|
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_ZEN_DIALOG,
|
||||||
cls, strptr(*opts.title),
|
cls, strptr(*opts.title), _WS_ZEN_DIALOG,
|
||||||
_WS_POPUPWINDOW|_WS_CLIPSIBLINGS|_WS_DLGFRAME,
|
win.CW_USEDEFAULT, win.CW_USEDEFAULT,
|
||||||
_CW_USEDEFAULT, _CW_USEDEFAULT,
|
|
||||||
281, 281, owner, 0, instance, unsafe.Pointer(dlg))
|
281, 281, owner, 0, instance, unsafe.Pointer(dlg))
|
||||||
|
|
||||||
dlg.textCtl, _ = win.CreateWindowEx(0,
|
dlg.textCtl, _ = win.CreateWindowEx(0,
|
||||||
strptr("STATIC"), strptr(text),
|
strptr("STATIC"), strptr(text), _WS_ZEN_LABEL,
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_SS_WORDELLIPSIS|_SS_EDITCONTROL|_SS_NOPREFIX,
|
|
||||||
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
var flags uint32 = _WS_CHILD | _WS_VISIBLE | _WS_GROUP | _WS_TABSTOP | _MCS_NOTODAY
|
|
||||||
dlg.dateCtl, _ = win.CreateWindowEx(0,
|
dlg.dateCtl, _ = win.CreateWindowEx(0,
|
||||||
strptr(_MONTHCAL_CLASS),
|
strptr(win.MONTHCAL_CLASS),
|
||||||
nil, flags,
|
nil, _WS_ZEN_CONTROL|win.MCS_NOTODAY,
|
||||||
12, 30, 241, 164, dlg.wnd, 0, instance, nil)
|
12, 30, 241, 164, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
dlg.okBtn, _ = win.CreateWindowEx(0,
|
dlg.okBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.okLabel),
|
strptr("BUTTON"), strptr(*opts.okLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP|_BS_DEFPUSHBUTTON,
|
_WS_ZEN_BUTTON|win.BS_DEFPUSHBUTTON,
|
||||||
12, 206, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
12, 206, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
||||||
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 206, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
12, 206, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
||||||
if opts.extraButton != nil {
|
if opts.extraButton != nil {
|
||||||
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.extraButton),
|
strptr("BUTTON"), strptr(*opts.extraButton),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 206, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
12, 206, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,7 +100,7 @@ func (dlg *calendarDialog) setup(text string, opts options) (time.Time, error) {
|
||||||
dlg.layout(getDPI(dlg.wnd))
|
dlg.layout(getDPI(dlg.wnd))
|
||||||
centerWindow(dlg.wnd)
|
centerWindow(dlg.wnd)
|
||||||
win.SetFocus(dlg.dateCtl)
|
win.SetFocus(dlg.dateCtl)
|
||||||
win.ShowWindow(dlg.wnd, _SW_NORMAL)
|
win.ShowWindow(dlg.wnd, win.SW_NORMAL)
|
||||||
|
|
||||||
if opts.ctx != nil {
|
if opts.ctx != nil {
|
||||||
wait := make(chan struct{})
|
wait := make(chan struct{})
|
||||||
|
@ -111,7 +108,7 @@ func (dlg *calendarDialog) setup(text string, opts options) (time.Time, error) {
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-opts.ctx.Done():
|
case <-opts.ctx.Done():
|
||||||
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, _SC_CLOSE, 0)
|
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, win.SC_CLOSE, 0)
|
||||||
case <-wait:
|
case <-wait:
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -133,16 +130,16 @@ func (dlg *calendarDialog) layout(dpi dpi) {
|
||||||
win.SendMessage(dlg.okBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.okBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(dlg.cancelBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.cancelBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(dlg.extraBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.extraBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SetWindowPos(dlg.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(281), _SWP_NOZORDER|_SWP_NOMOVE)
|
win.SetWindowPos(dlg.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(281), win.SWP_NOMOVE|win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.textCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.textCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.dateCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(164), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.dateCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(164), win.SWP_NOZORDER)
|
||||||
if dlg.extraBtn == 0 {
|
if dlg.extraBtn == 0 {
|
||||||
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(95), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(95), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
} else {
|
} else {
|
||||||
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(12), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(12), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.extraBtn, 0, dpi.scale(95), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.extraBtn, 0, dpi.scale(95), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,45 +58,43 @@ func (dlg *entryDialog) setup(text string, opts options) (string, error) {
|
||||||
defer win.UnregisterClass(cls, instance)
|
defer win.UnregisterClass(cls, instance)
|
||||||
|
|
||||||
owner, _ := opts.attach.(win.HWND)
|
owner, _ := opts.attach.(win.HWND)
|
||||||
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_CONTROLPARENT|_WS_EX_WINDOWEDGE|_WS_EX_DLGMODALFRAME,
|
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_ZEN_DIALOG,
|
||||||
cls, strptr(*opts.title),
|
cls, strptr(*opts.title), _WS_ZEN_DIALOG,
|
||||||
_WS_POPUPWINDOW|_WS_CLIPSIBLINGS|_WS_DLGFRAME,
|
win.CW_USEDEFAULT, win.CW_USEDEFAULT,
|
||||||
_CW_USEDEFAULT, _CW_USEDEFAULT,
|
|
||||||
281, 141, owner, 0, instance, unsafe.Pointer(dlg))
|
281, 141, owner, 0, instance, unsafe.Pointer(dlg))
|
||||||
|
|
||||||
dlg.textCtl, _ = win.CreateWindowEx(0,
|
dlg.textCtl, _ = win.CreateWindowEx(0,
|
||||||
strptr("STATIC"), strptr(text),
|
strptr("STATIC"), strptr(text), _WS_ZEN_LABEL,
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_SS_WORDELLIPSIS|_SS_EDITCONTROL|_SS_NOPREFIX,
|
|
||||||
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
var flags uint32 = _WS_CHILD | _WS_VISIBLE | _WS_GROUP | _WS_TABSTOP | _ES_AUTOHSCROLL
|
var flags uint32 = _WS_ZEN_CONTROL | win.ES_AUTOHSCROLL
|
||||||
if opts.hideText {
|
if opts.hideText {
|
||||||
flags |= _ES_PASSWORD
|
flags |= win.ES_PASSWORD
|
||||||
}
|
}
|
||||||
dlg.editCtl, _ = win.CreateWindowEx(_WS_EX_CLIENTEDGE,
|
dlg.editCtl, _ = win.CreateWindowEx(win.WS_EX_CLIENTEDGE,
|
||||||
strptr("EDIT"), strptr(opts.entryText),
|
strptr("EDIT"), strptr(opts.entryText),
|
||||||
flags,
|
flags,
|
||||||
12, 30, 241, 24, dlg.wnd, 0, instance, nil)
|
12, 30, 241, 24, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
dlg.okBtn, _ = win.CreateWindowEx(0,
|
dlg.okBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.okLabel),
|
strptr("BUTTON"), strptr(*opts.okLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP|_BS_DEFPUSHBUTTON,
|
_WS_ZEN_BUTTON|win.BS_DEFPUSHBUTTON,
|
||||||
12, 66, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
12, 66, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
||||||
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 66, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
12, 66, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
||||||
if opts.extraButton != nil {
|
if opts.extraButton != nil {
|
||||||
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.extraButton),
|
strptr("BUTTON"), strptr(*opts.extraButton),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 66, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
12, 66, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
dlg.layout(getDPI(dlg.wnd))
|
dlg.layout(getDPI(dlg.wnd))
|
||||||
centerWindow(dlg.wnd)
|
centerWindow(dlg.wnd)
|
||||||
win.SetFocus(dlg.editCtl)
|
win.SetFocus(dlg.editCtl)
|
||||||
win.ShowWindow(dlg.wnd, _SW_NORMAL)
|
win.ShowWindow(dlg.wnd, win.SW_NORMAL)
|
||||||
win.SendMessage(dlg.editCtl, win.EM_SETSEL, 0, intptr(-1))
|
win.SendMessage(dlg.editCtl, win.EM_SETSEL, 0, intptr(-1))
|
||||||
|
|
||||||
if opts.ctx != nil {
|
if opts.ctx != nil {
|
||||||
|
@ -105,7 +103,7 @@ func (dlg *entryDialog) setup(text string, opts options) (string, error) {
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-opts.ctx.Done():
|
case <-opts.ctx.Done():
|
||||||
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, _SC_CLOSE, 0)
|
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, win.SC_CLOSE, 0)
|
||||||
case <-wait:
|
case <-wait:
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -127,16 +125,16 @@ func (dlg *entryDialog) layout(dpi dpi) {
|
||||||
win.SendMessage(dlg.okBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.okBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(dlg.cancelBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.cancelBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(dlg.extraBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.extraBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SetWindowPos(dlg.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(141), _SWP_NOZORDER|_SWP_NOMOVE)
|
win.SetWindowPos(dlg.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(141), win.SWP_NOMOVE|win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.textCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.textCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.editCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.editCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
if dlg.extraBtn == 0 {
|
if dlg.extraBtn == 0 {
|
||||||
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(95), dpi.scale(66), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(95), dpi.scale(66), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(66), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(66), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
} else {
|
} else {
|
||||||
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(12), dpi.scale(66), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(12), dpi.scale(66), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.extraBtn, 0, dpi.scale(95), dpi.scale(66), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.extraBtn, 0, dpi.scale(95), dpi.scale(66), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(66), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(66), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
// Button IDs
|
||||||
IDOK = 1
|
IDOK = 1
|
||||||
IDCANCEL = 2
|
IDCANCEL = 2
|
||||||
IDABORT = 3
|
IDABORT = 3
|
||||||
|
@ -18,6 +19,7 @@ const (
|
||||||
IDYES = 6
|
IDYES = 6
|
||||||
IDNO = 7
|
IDNO = 7
|
||||||
|
|
||||||
|
// MessageBox types
|
||||||
MB_OK = windows.MB_OK
|
MB_OK = windows.MB_OK
|
||||||
MB_OKCANCEL = windows.MB_OKCANCEL
|
MB_OKCANCEL = windows.MB_OKCANCEL
|
||||||
MB_ABORTRETRYIGNORE = windows.MB_ABORTRETRYIGNORE
|
MB_ABORTRETRYIGNORE = windows.MB_ABORTRETRYIGNORE
|
||||||
|
@ -33,12 +35,14 @@ const (
|
||||||
MB_DEFBUTTON2 = windows.MB_DEFBUTTON2
|
MB_DEFBUTTON2 = windows.MB_DEFBUTTON2
|
||||||
MB_DEFBUTTON3 = windows.MB_DEFBUTTON3
|
MB_DEFBUTTON3 = windows.MB_DEFBUTTON3
|
||||||
|
|
||||||
|
// Window messages
|
||||||
WM_DESTROY = 0x0002
|
WM_DESTROY = 0x0002
|
||||||
WM_CLOSE = 0x0010
|
WM_CLOSE = 0x0010
|
||||||
WM_SETFONT = 0x0030
|
WM_SETFONT = 0x0030
|
||||||
WM_SETICON = 0x0080
|
WM_SETICON = 0x0080
|
||||||
WM_NCCREATE = 0x0081
|
WM_NCCREATE = 0x0081
|
||||||
WM_NCDESTROY = 0x0082
|
WM_NCDESTROY = 0x0082
|
||||||
|
WM_INITDIALOG = 0x0110
|
||||||
WM_COMMAND = 0x0111
|
WM_COMMAND = 0x0111
|
||||||
WM_SYSCOMMAND = 0x0112
|
WM_SYSCOMMAND = 0x0112
|
||||||
WM_DPICHANGED = 0x02e0
|
WM_DPICHANGED = 0x02e0
|
||||||
|
@ -55,6 +59,161 @@ const (
|
||||||
PBM_SETMARQUEE = WM_USER + 10
|
PBM_SETMARQUEE = WM_USER + 10
|
||||||
STM_SETICON = 0x0170
|
STM_SETICON = 0x0170
|
||||||
|
|
||||||
|
// CreateWindow
|
||||||
|
CW_USEDEFAULT = 0x80000000
|
||||||
|
|
||||||
|
// Window classes
|
||||||
|
PROGRESS_CLASS = "msctls_progress32"
|
||||||
|
MONTHCAL_CLASS = "SysMonthCal32"
|
||||||
|
|
||||||
|
// Window styles
|
||||||
|
WS_OVERLAPPED = 0x00000000
|
||||||
|
WS_TILED = 0x00000000
|
||||||
|
WS_MAXIMIZEBOX = 0x00010000
|
||||||
|
WS_TABSTOP = 0x00010000
|
||||||
|
WS_GROUP = 0x00020000
|
||||||
|
WS_MINIMIZEBOX = 0x00020000
|
||||||
|
WS_SIZEBOX = 0x00040000
|
||||||
|
WS_THICKFRAME = 0x00040000
|
||||||
|
WS_SYSMENU = 0x00080000
|
||||||
|
WS_HSCROLL = 0x00100000
|
||||||
|
WS_VSCROLL = 0x00200000
|
||||||
|
WS_DLGFRAME = 0x00400000
|
||||||
|
WS_BORDER = 0x00800000
|
||||||
|
WS_CAPTION = 0x00c00000
|
||||||
|
WS_MAXIMIZE = 0x01000000
|
||||||
|
WS_CLIPCHILDREN = 0x02000000
|
||||||
|
WS_CLIPSIBLINGS = 0x04000000
|
||||||
|
WS_DISABLED = 0x08000000
|
||||||
|
WS_VISIBLE = 0x10000000
|
||||||
|
WS_ICONIC = 0x20000000
|
||||||
|
WS_MINIMIZE = 0x20000000
|
||||||
|
WS_CHILD = 0x40000000
|
||||||
|
WS_CHILDWINDOW = 0x40000000
|
||||||
|
WS_POPUP = 0x80000000
|
||||||
|
WS_POPUPWINDOW = WS_POPUP | WS_BORDER | WS_SYSMENU
|
||||||
|
WS_OVERLAPPEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
|
||||||
|
WS_TILEDWINDOW = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
|
||||||
|
|
||||||
|
// Extended window styles
|
||||||
|
WS_EX_LEFT = 0x00000000
|
||||||
|
WS_EX_LTRREADING = 0x00000000
|
||||||
|
WS_EX_RIGHTSCROLLBAR = 0x00000000
|
||||||
|
WS_EX_DLGMODALFRAME = 0x00000001
|
||||||
|
WS_EX_NOPARENTNOTIFY = 0x00000004
|
||||||
|
WS_EX_TOPMOST = 0x00000008
|
||||||
|
WS_EX_ACCEPTFILES = 0x00000010
|
||||||
|
WS_EX_TRANSPARENT = 0x00000020
|
||||||
|
WS_EX_MDICHILD = 0x00000040
|
||||||
|
WS_EX_TOOLWINDOW = 0x00000080
|
||||||
|
WS_EX_WINDOWEDGE = 0x00000100
|
||||||
|
WS_EX_CLIENTEDGE = 0x00000200
|
||||||
|
WS_EX_CONTEXTHELP = 0x00000400
|
||||||
|
WS_EX_RIGHT = 0x00001000
|
||||||
|
WS_EX_RTLREADING = 0x00002000
|
||||||
|
WS_EX_LEFTSCROLLBAR = 0x00004000
|
||||||
|
WS_EX_CONTROLPARENT = 0x00010000
|
||||||
|
WS_EX_STATICEDGE = 0x00020000
|
||||||
|
WS_EX_APPWINDOW = 0x00040000
|
||||||
|
WS_EX_LAYERED = 0x00080000
|
||||||
|
WS_EX_NOINHERITLAYOUT = 0x00100000
|
||||||
|
WS_EX_NOREDIRECTIONBITMAP = 0x00200000
|
||||||
|
WS_EX_LAYOUTRTL = 0x00400000
|
||||||
|
WS_EX_COMPOSITED = 0x02000000
|
||||||
|
WS_EX_NOACTIVATE = 0x08000000
|
||||||
|
WS_EX_OVERLAPPEDWINDOW = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE
|
||||||
|
WS_EX_PALETTEWINDOW = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST
|
||||||
|
|
||||||
|
// Button styles
|
||||||
|
BS_DEFPUSHBUTTON = 0x0001
|
||||||
|
|
||||||
|
// Static control styles
|
||||||
|
SS_NOPREFIX = 0x0080
|
||||||
|
SS_EDITCONTROL = 0x2000
|
||||||
|
SS_WORDELLIPSIS = 0xc000
|
||||||
|
|
||||||
|
// Edic control styles
|
||||||
|
ES_PASSWORD = 0x0020
|
||||||
|
ES_AUTOHSCROLL = 0x0080
|
||||||
|
|
||||||
|
// List box control styles
|
||||||
|
LBS_EXTENDEDSEL = 0x0800
|
||||||
|
|
||||||
|
// Month calendar control styles
|
||||||
|
MCS_NOTODAY = 0x0010
|
||||||
|
|
||||||
|
// Progress bar control styles
|
||||||
|
PBS_SMOOTH = 0x0001
|
||||||
|
PBS_MARQUEE = 0x0008
|
||||||
|
|
||||||
|
// ShowWindow command
|
||||||
|
SW_HIDE = 0
|
||||||
|
SW_NORMAL = 1
|
||||||
|
SW_SHOWNORMAL = 1
|
||||||
|
SW_SHOWMINIMIZED = 2
|
||||||
|
SW_SHOWMAXIMIZED = 3
|
||||||
|
SW_MAXIMIZE = 3
|
||||||
|
SW_SHOWNOACTIVATE = 4
|
||||||
|
SW_SHOW = 5
|
||||||
|
SW_MINIMIZE = 6
|
||||||
|
SW_SHOWMINNOACTIVE = 7
|
||||||
|
SW_SHOWNA = 8
|
||||||
|
SW_RESTORE = 9
|
||||||
|
SW_SHOWDEFAULT = 10
|
||||||
|
SW_FORCEMINIMIZE = 11
|
||||||
|
|
||||||
|
// SetWindowPos flags
|
||||||
|
SWP_NOSIZE = 0x0001
|
||||||
|
SWP_NOMOVE = 0x0002
|
||||||
|
SWP_NOZORDER = 0x0004
|
||||||
|
SWP_NOREDRAW = 0x0008
|
||||||
|
SWP_NOACTIVATE = 0x0010
|
||||||
|
SWP_DRAWFRAME = 0x0020
|
||||||
|
SWP_FRAMECHANGED = 0x0020
|
||||||
|
SWP_SHOWWINDOW = 0x0040
|
||||||
|
SWP_HIDEWINDOW = 0x0080
|
||||||
|
SWP_NOCOPYBITS = 0x0100
|
||||||
|
SWP_NOREPOSITION = 0x0200
|
||||||
|
SWP_NOOWNERZORDER = 0x0200
|
||||||
|
SWP_NOSENDCHANGING = 0x0400
|
||||||
|
SWP_DEFERERASE = 0x2000
|
||||||
|
SWP_ASYNCWINDOWPOS = 0x4000
|
||||||
|
|
||||||
|
// Get/SetWindowLong ids
|
||||||
|
GWL_WNDPROC = -4
|
||||||
|
GWL_HINSTANCE = -6
|
||||||
|
GWL_ID = -12
|
||||||
|
GWL_STYLE = -16
|
||||||
|
GWL_EXSTYLE = -20
|
||||||
|
GWL_USERDATA = -21
|
||||||
|
|
||||||
|
// Get/SetSystemMetrics ids
|
||||||
|
SM_CXSCREEN = 0
|
||||||
|
SM_CYSCREEN = 1
|
||||||
|
|
||||||
|
// SystemParametersInfo ids
|
||||||
|
SPI_GETNONCLIENTMETRICS = 0x29
|
||||||
|
|
||||||
|
// WM_SYSCOMMAND wParam
|
||||||
|
SC_SIZE = 0xf000
|
||||||
|
SC_MOVE = 0xf010
|
||||||
|
SC_MINIMIZE = 0xf020
|
||||||
|
SC_MAXIMIZE = 0xf030
|
||||||
|
SC_NEXTWINDOW = 0xf040
|
||||||
|
SC_PREVWINDOW = 0xf050
|
||||||
|
SC_CLOSE = 0xf060
|
||||||
|
SC_VSCROLL = 0xf070
|
||||||
|
SC_HSCROLL = 0xf080
|
||||||
|
SC_MOUSEMENU = 0xf090
|
||||||
|
SC_KEYMENU = 0xf100
|
||||||
|
SC_RESTORE = 0xf120
|
||||||
|
SC_TASKLIST = 0xf130
|
||||||
|
SC_SCREENSAVE = 0xf140
|
||||||
|
SC_HOTKEY = 0xf150
|
||||||
|
SC_DEFAULT = 0xf160
|
||||||
|
SC_MONITORPOWER = 0xf170
|
||||||
|
SC_CONTEXTHELP = 0xf180
|
||||||
|
|
||||||
USER_DEFAULT_SCREEN_DPI = 96
|
USER_DEFAULT_SCREEN_DPI = 96
|
||||||
|
|
||||||
DPI_AWARENESS_CONTEXT_UNAWARE = ^uintptr(1) + 1
|
DPI_AWARENESS_CONTEXT_UNAWARE = ^uintptr(1) + 1
|
||||||
|
@ -67,6 +226,7 @@ const (
|
||||||
IMAGE_ICON = 1
|
IMAGE_ICON = 1
|
||||||
IMAGE_CURSOR = 2
|
IMAGE_CURSOR = 2
|
||||||
|
|
||||||
|
// LoadResource (image/icon) flags
|
||||||
LR_DEFAULTCOLOR = 0x00000000
|
LR_DEFAULTCOLOR = 0x00000000
|
||||||
LR_MONOCHROME = 0x00000001
|
LR_MONOCHROME = 0x00000001
|
||||||
LR_LOADFROMFILE = 0x00000010
|
LR_LOADFROMFILE = 0x00000010
|
||||||
|
@ -171,6 +331,25 @@ type WNDCLASSEX struct {
|
||||||
IconSm Handle
|
IconSm Handle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-nonclientmetricsw
|
||||||
|
type NONCLIENTMETRICS struct {
|
||||||
|
Size uint32
|
||||||
|
BorderWidth int32
|
||||||
|
ScrollWidth int32
|
||||||
|
ScrollHeight int32
|
||||||
|
CaptionWidth int32
|
||||||
|
CaptionHeight int32
|
||||||
|
CaptionFont LOGFONT
|
||||||
|
SmCaptionWidth int32
|
||||||
|
SmCaptionHeight int32
|
||||||
|
SmCaptionFont LOGFONT
|
||||||
|
MenuWidth int32
|
||||||
|
MenuHeight int32
|
||||||
|
MenuFont LOGFONT
|
||||||
|
StatusFont LOGFONT
|
||||||
|
MessageFont LOGFONT
|
||||||
|
}
|
||||||
|
|
||||||
//sys CreateIconFromResource(resBits []byte, icon bool, ver uint32) (ret Handle, err error) = user32.CreateIconFromResource
|
//sys CreateIconFromResource(resBits []byte, icon bool, ver uint32) (ret Handle, err error) = user32.CreateIconFromResource
|
||||||
//sys CreateWindowEx(exStyle uint32, className *uint16, windowName *uint16, style uint32, x int, y int, width int, height int, parent HWND, menu Handle, instance Handle, param unsafe.Pointer) (ret HWND, err error) = user32.CreateWindowExW
|
//sys CreateWindowEx(exStyle uint32, className *uint16, windowName *uint16, style uint32, x int, y int, width int, height int, parent HWND, menu Handle, instance Handle, param unsafe.Pointer) (ret HWND, err error) = user32.CreateWindowExW
|
||||||
//sys DestroyIcon(icon Handle) (err error) = user32.DestroyIcon
|
//sys DestroyIcon(icon Handle) (err error) = user32.DestroyIcon
|
||||||
|
@ -202,5 +381,6 @@ type WNDCLASSEX struct {
|
||||||
//sys SetWindowPos(wnd HWND, wndInsertAfter HWND, x int, y int, cx int, cy int, flags int) (err error) = user32.SetWindowPos
|
//sys SetWindowPos(wnd HWND, wndInsertAfter HWND, x int, y int, cx int, cy int, flags int) (err error) = user32.SetWindowPos
|
||||||
//sys SetWindowText(wnd HWND, text *uint16) (err error) = user32.SetWindowTextW
|
//sys SetWindowText(wnd HWND, text *uint16) (err error) = user32.SetWindowTextW
|
||||||
//sys ShowWindow(wnd HWND, cmdShow int) (ok bool) = user32.ShowWindow
|
//sys ShowWindow(wnd HWND, cmdShow int) (ok bool) = user32.ShowWindow
|
||||||
|
//sys SystemParametersInfo(action int, uiParam uintptr, pvParam unsafe.Pointer, winIni int) (err error) = user32.SystemParametersInfoW
|
||||||
//sys TranslateMessage(msg *MSG) (ok bool) = user32.TranslateMessage
|
//sys TranslateMessage(msg *MSG) (ok bool) = user32.TranslateMessage
|
||||||
//sys UnregisterClass(className *uint16, instance Handle) (err error) = user32.UnregisterClassW
|
//sys UnregisterClass(className *uint16, instance Handle) (err error) = user32.UnregisterClassW
|
||||||
|
|
|
@ -96,6 +96,7 @@ var (
|
||||||
procSetWindowPos = moduser32.NewProc("SetWindowPos")
|
procSetWindowPos = moduser32.NewProc("SetWindowPos")
|
||||||
procSetWindowTextW = moduser32.NewProc("SetWindowTextW")
|
procSetWindowTextW = moduser32.NewProc("SetWindowTextW")
|
||||||
procShowWindow = moduser32.NewProc("ShowWindow")
|
procShowWindow = moduser32.NewProc("ShowWindow")
|
||||||
|
procSystemParametersInfoW = moduser32.NewProc("SystemParametersInfoW")
|
||||||
procTranslateMessage = moduser32.NewProc("TranslateMessage")
|
procTranslateMessage = moduser32.NewProc("TranslateMessage")
|
||||||
procUnregisterClassW = moduser32.NewProc("UnregisterClassW")
|
procUnregisterClassW = moduser32.NewProc("UnregisterClassW")
|
||||||
procWTSSendMessageW = modwtsapi32.NewProc("WTSSendMessageW")
|
procWTSSendMessageW = modwtsapi32.NewProc("WTSSendMessageW")
|
||||||
|
@ -295,6 +296,11 @@ func EnableWindow(wnd HWND, enable bool) (ok bool) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func EnumChildWindows(parent HWND, enumFunc uintptr, lparam unsafe.Pointer) {
|
||||||
|
syscall.Syscall(procEnumChildWindows.Addr(), 3, uintptr(parent), uintptr(enumFunc), uintptr(lparam))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func EnumWindows(enumFunc uintptr, lparam unsafe.Pointer) (err error) {
|
func EnumWindows(enumFunc uintptr, lparam unsafe.Pointer) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procEnumChildWindows.Addr(), 2, uintptr(enumFunc), uintptr(lparam), 0)
|
r1, _, e1 := syscall.Syscall(procEnumChildWindows.Addr(), 2, uintptr(enumFunc), uintptr(lparam), 0)
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
@ -303,11 +309,6 @@ func EnumWindows(enumFunc uintptr, lparam unsafe.Pointer) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func EnumChildWindows(parent HWND, enumFunc uintptr, lparam unsafe.Pointer) {
|
|
||||||
syscall.Syscall(procEnumChildWindows.Addr(), 3, uintptr(parent), uintptr(enumFunc), uintptr(lparam))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetDlgCtrlID(wnd HWND) (ret int) {
|
func GetDlgCtrlID(wnd HWND) (ret int) {
|
||||||
r0, _, _ := syscall.Syscall(procGetDlgCtrlID.Addr(), 1, uintptr(wnd), 0, 0)
|
r0, _, _ := syscall.Syscall(procGetDlgCtrlID.Addr(), 1, uintptr(wnd), 0, 0)
|
||||||
ret = int(r0)
|
ret = int(r0)
|
||||||
|
@ -465,6 +466,14 @@ func ShowWindow(wnd HWND, cmdShow int) (ok bool) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SystemParametersInfo(action int, uiParam uintptr, pvParam unsafe.Pointer, winIni int) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall6(procSystemParametersInfoW.Addr(), 4, uintptr(action), uintptr(uiParam), uintptr(pvParam), uintptr(winIni), 0, 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func TranslateMessage(msg *MSG) (ok bool) {
|
func TranslateMessage(msg *MSG) (ok bool) {
|
||||||
r0, _, _ := syscall.Syscall(procTranslateMessage.Addr(), 1, uintptr(unsafe.Pointer(msg)), 0, 0)
|
r0, _, _ := syscall.Syscall(procTranslateMessage.Addr(), 1, uintptr(unsafe.Pointer(msg)), 0, 0)
|
||||||
ok = r0 != 0
|
ok = r0 != 0
|
||||||
|
|
|
@ -75,38 +75,35 @@ func (dlg *listDialog) setup(text string, opts options) ([]string, error) {
|
||||||
defer win.UnregisterClass(cls, instance)
|
defer win.UnregisterClass(cls, instance)
|
||||||
|
|
||||||
owner, _ := opts.attach.(win.HWND)
|
owner, _ := opts.attach.(win.HWND)
|
||||||
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_CONTROLPARENT|_WS_EX_WINDOWEDGE|_WS_EX_DLGMODALFRAME,
|
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_ZEN_DIALOG,
|
||||||
cls, strptr(*opts.title),
|
cls, strptr(*opts.title), _WS_ZEN_DIALOG,
|
||||||
_WS_POPUPWINDOW|_WS_CLIPSIBLINGS|_WS_DLGFRAME,
|
win.CW_USEDEFAULT, win.CW_USEDEFAULT,
|
||||||
_CW_USEDEFAULT, _CW_USEDEFAULT,
|
|
||||||
281, 281, owner, 0, instance, unsafe.Pointer(dlg))
|
281, 281, owner, 0, instance, unsafe.Pointer(dlg))
|
||||||
|
|
||||||
dlg.textCtl, _ = win.CreateWindowEx(0,
|
dlg.textCtl, _ = win.CreateWindowEx(0,
|
||||||
strptr("STATIC"), strptr(text),
|
strptr("STATIC"), strptr(text), _WS_ZEN_LABEL,
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_SS_WORDELLIPSIS|_SS_EDITCONTROL|_SS_NOPREFIX,
|
|
||||||
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
var flags uint32 = _WS_CHILD | _WS_VISIBLE | _WS_GROUP | _WS_TABSTOP | _WS_VSCROLL
|
var flags uint32 = _WS_ZEN_CONTROL | win.WS_VSCROLL
|
||||||
if dlg.multiple {
|
if dlg.multiple {
|
||||||
flags |= _LBS_EXTENDEDSEL
|
flags |= win.LBS_EXTENDEDSEL
|
||||||
}
|
}
|
||||||
dlg.listCtl, _ = win.CreateWindowEx(_WS_EX_CLIENTEDGE,
|
dlg.listCtl, _ = win.CreateWindowEx(win.WS_EX_CLIENTEDGE,
|
||||||
strptr("LISTBOX"), strptr(opts.entryText),
|
strptr("LISTBOX"), strptr(opts.entryText), flags,
|
||||||
flags,
|
|
||||||
12, 30, 241, 164, dlg.wnd, 0, instance, nil)
|
12, 30, 241, 164, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
dlg.okBtn, _ = win.CreateWindowEx(0,
|
dlg.okBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.okLabel),
|
strptr("BUTTON"), strptr(*opts.okLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP|_BS_DEFPUSHBUTTON,
|
_WS_ZEN_BUTTON|win.BS_DEFPUSHBUTTON,
|
||||||
12, 206, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
12, 206, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
||||||
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 206, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
12, 206, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
||||||
if opts.extraButton != nil {
|
if opts.extraButton != nil {
|
||||||
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.extraButton),
|
strptr("BUTTON"), strptr(*opts.extraButton),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 206, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
12, 206, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +114,7 @@ func (dlg *listDialog) setup(text string, opts options) ([]string, error) {
|
||||||
dlg.layout(getDPI(dlg.wnd))
|
dlg.layout(getDPI(dlg.wnd))
|
||||||
centerWindow(dlg.wnd)
|
centerWindow(dlg.wnd)
|
||||||
win.SetFocus(dlg.listCtl)
|
win.SetFocus(dlg.listCtl)
|
||||||
win.ShowWindow(dlg.wnd, _SW_NORMAL)
|
win.ShowWindow(dlg.wnd, win.SW_NORMAL)
|
||||||
|
|
||||||
if opts.ctx != nil {
|
if opts.ctx != nil {
|
||||||
wait := make(chan struct{})
|
wait := make(chan struct{})
|
||||||
|
@ -125,7 +122,7 @@ func (dlg *listDialog) setup(text string, opts options) ([]string, error) {
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-opts.ctx.Done():
|
case <-opts.ctx.Done():
|
||||||
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, _SC_CLOSE, 0)
|
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, win.SC_CLOSE, 0)
|
||||||
case <-wait:
|
case <-wait:
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -147,16 +144,16 @@ func (dlg *listDialog) layout(dpi dpi) {
|
||||||
win.SendMessage(dlg.okBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.okBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(dlg.cancelBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.cancelBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(dlg.extraBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.extraBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SetWindowPos(dlg.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(281), _SWP_NOZORDER|_SWP_NOMOVE)
|
win.SetWindowPos(dlg.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(281), win.SWP_NOMOVE|win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.textCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.textCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.listCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(164), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.listCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(164), win.SWP_NOZORDER)
|
||||||
if dlg.extraBtn == 0 {
|
if dlg.extraBtn == 0 {
|
||||||
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(95), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(95), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
} else {
|
} else {
|
||||||
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(12), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(12), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.extraBtn, 0, dpi.scale(95), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.extraBtn, 0, dpi.scale(95), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(206), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(206), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,7 @@ func (d *progressDialog) Done() <-chan struct{} {
|
||||||
func (d *progressDialog) Complete() error {
|
func (d *progressDialog) Complete() error {
|
||||||
select {
|
select {
|
||||||
default:
|
default:
|
||||||
win.SetWindowLong(d.progCtl, _GWL_STYLE, _WS_CHILD|_WS_VISIBLE|_PBS_SMOOTH)
|
win.SetWindowLong(d.progCtl, win.GWL_STYLE, win.WS_CHILD|win.WS_VISIBLE|win.PBS_SMOOTH)
|
||||||
win.SendMessage(d.progCtl, win.PBM_SETRANGE32, 0, 1)
|
win.SendMessage(d.progCtl, win.PBM_SETRANGE32, 0, 1)
|
||||||
win.SendMessage(d.progCtl, win.PBM_SETPOS, 1, 0)
|
win.SendMessage(d.progCtl, win.PBM_SETPOS, 1, 0)
|
||||||
win.EnableWindow(d.okBtn, true)
|
win.EnableWindow(d.okBtn, true)
|
||||||
|
@ -104,7 +104,7 @@ func (d *progressDialog) Complete() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *progressDialog) Close() error {
|
func (d *progressDialog) Close() error {
|
||||||
win.SendMessage(d.wnd, win.WM_SYSCOMMAND, _SC_CLOSE, 0)
|
win.SendMessage(d.wnd, win.WM_SYSCOMMAND, win.SC_CLOSE, 0)
|
||||||
<-d.done
|
<-d.done
|
||||||
if d.err == ErrCanceled {
|
if d.err == ErrCanceled {
|
||||||
return nil
|
return nil
|
||||||
|
@ -138,46 +138,44 @@ func (dlg *progressDialog) setup(opts options) error {
|
||||||
defer win.UnregisterClass(cls, instance)
|
defer win.UnregisterClass(cls, instance)
|
||||||
|
|
||||||
owner, _ := opts.attach.(win.HWND)
|
owner, _ := opts.attach.(win.HWND)
|
||||||
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_CONTROLPARENT|_WS_EX_WINDOWEDGE|_WS_EX_DLGMODALFRAME,
|
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_ZEN_DIALOG,
|
||||||
cls, strptr(*opts.title),
|
cls, strptr(*opts.title), _WS_ZEN_DIALOG,
|
||||||
_WS_POPUPWINDOW|_WS_CLIPSIBLINGS|_WS_DLGFRAME,
|
win.CW_USEDEFAULT, win.CW_USEDEFAULT,
|
||||||
_CW_USEDEFAULT, _CW_USEDEFAULT,
|
|
||||||
281, 133, owner, 0, instance, unsafe.Pointer(dlg))
|
281, 133, owner, 0, instance, unsafe.Pointer(dlg))
|
||||||
|
|
||||||
dlg.textCtl, _ = win.CreateWindowEx(0,
|
dlg.textCtl, _ = win.CreateWindowEx(0,
|
||||||
strptr("STATIC"), nil,
|
strptr("STATIC"), nil, _WS_ZEN_LABEL,
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_SS_WORDELLIPSIS|_SS_EDITCONTROL|_SS_NOPREFIX,
|
|
||||||
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
var flags uint32 = _WS_CHILD | _WS_VISIBLE | _PBS_SMOOTH
|
var flags uint32 = win.WS_CHILD | win.WS_VISIBLE | win.PBS_SMOOTH
|
||||||
if opts.maxValue < 0 {
|
if opts.maxValue < 0 {
|
||||||
flags |= _PBS_MARQUEE
|
flags |= win.PBS_MARQUEE
|
||||||
}
|
}
|
||||||
dlg.progCtl, _ = win.CreateWindowEx(0,
|
dlg.progCtl, _ = win.CreateWindowEx(0,
|
||||||
strptr(_PROGRESS_CLASS),
|
strptr(win.PROGRESS_CLASS),
|
||||||
nil, flags,
|
nil, flags,
|
||||||
12, 30, 241, 16, dlg.wnd, 0, instance, nil)
|
12, 30, 241, 16, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
dlg.okBtn, _ = win.CreateWindowEx(0,
|
dlg.okBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.okLabel),
|
strptr("BUTTON"), strptr(*opts.okLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP|_BS_DEFPUSHBUTTON|_WS_DISABLED,
|
_WS_ZEN_BUTTON|win.BS_DEFPUSHBUTTON|win.WS_DISABLED,
|
||||||
12, 58, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
12, 58, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
||||||
if !opts.noCancel {
|
if !opts.noCancel {
|
||||||
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 58, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
12, 58, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
||||||
}
|
}
|
||||||
if opts.extraButton != nil {
|
if opts.extraButton != nil {
|
||||||
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.extraButton),
|
strptr("BUTTON"), strptr(*opts.extraButton),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 58, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
12, 58, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
dlg.layout(getDPI(dlg.wnd))
|
dlg.layout(getDPI(dlg.wnd))
|
||||||
centerWindow(dlg.wnd)
|
centerWindow(dlg.wnd)
|
||||||
win.ShowWindow(dlg.wnd, _SW_NORMAL)
|
win.ShowWindow(dlg.wnd, win.SW_NORMAL)
|
||||||
if opts.maxValue < 0 {
|
if opts.maxValue < 0 {
|
||||||
win.SendMessage(dlg.progCtl, win.PBM_SETMARQUEE, 1, 0)
|
win.SendMessage(dlg.progCtl, win.PBM_SETMARQUEE, 1, 0)
|
||||||
} else {
|
} else {
|
||||||
|
@ -191,7 +189,7 @@ func (dlg *progressDialog) setup(opts options) error {
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-opts.ctx.Done():
|
case <-opts.ctx.Done():
|
||||||
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, _SC_CLOSE, 0)
|
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, win.SC_CLOSE, 0)
|
||||||
case <-wait:
|
case <-wait:
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -212,24 +210,24 @@ func (d *progressDialog) layout(dpi dpi) {
|
||||||
win.SendMessage(d.okBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(d.okBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(d.cancelBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(d.cancelBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(d.extraBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(d.extraBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SetWindowPos(d.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(133), _SWP_NOZORDER|_SWP_NOMOVE)
|
win.SetWindowPos(d.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(133), win.SWP_NOMOVE|win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(d.textCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), _SWP_NOZORDER)
|
win.SetWindowPos(d.textCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(d.progCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(16), _SWP_NOZORDER)
|
win.SetWindowPos(d.progCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(16), win.SWP_NOZORDER)
|
||||||
if d.extraBtn == 0 {
|
if d.extraBtn == 0 {
|
||||||
if d.cancelBtn == 0 {
|
if d.cancelBtn == 0 {
|
||||||
win.SetWindowPos(d.okBtn, 0, dpi.scale(178), dpi.scale(58), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(d.okBtn, 0, dpi.scale(178), dpi.scale(58), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
} else {
|
} else {
|
||||||
win.SetWindowPos(d.okBtn, 0, dpi.scale(95), dpi.scale(58), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(d.okBtn, 0, dpi.scale(95), dpi.scale(58), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(d.cancelBtn, 0, dpi.scale(178), dpi.scale(58), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(d.cancelBtn, 0, dpi.scale(178), dpi.scale(58), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if d.cancelBtn == 0 {
|
if d.cancelBtn == 0 {
|
||||||
win.SetWindowPos(d.okBtn, 0, dpi.scale(95), dpi.scale(58), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(d.okBtn, 0, dpi.scale(95), dpi.scale(58), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(d.extraBtn, 0, dpi.scale(178), dpi.scale(58), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(d.extraBtn, 0, dpi.scale(178), dpi.scale(58), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
} else {
|
} else {
|
||||||
win.SetWindowPos(d.okBtn, 0, dpi.scale(12), dpi.scale(58), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(d.okBtn, 0, dpi.scale(12), dpi.scale(58), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(d.extraBtn, 0, dpi.scale(95), dpi.scale(58), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(d.extraBtn, 0, dpi.scale(95), dpi.scale(58), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(d.cancelBtn, 0, dpi.scale(178), dpi.scale(58), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(d.cancelBtn, 0, dpi.scale(178), dpi.scale(58), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,52 +68,49 @@ func (dlg *passwordDialog) setup(opts options) (string, string, error) {
|
||||||
defer win.UnregisterClass(cls, instance)
|
defer win.UnregisterClass(cls, instance)
|
||||||
|
|
||||||
owner, _ := opts.attach.(win.HWND)
|
owner, _ := opts.attach.(win.HWND)
|
||||||
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_CONTROLPARENT|_WS_EX_WINDOWEDGE|_WS_EX_DLGMODALFRAME,
|
dlg.wnd, _ = win.CreateWindowEx(_WS_EX_ZEN_DIALOG,
|
||||||
cls, strptr(*opts.title),
|
cls, strptr(*opts.title), _WS_ZEN_DIALOG,
|
||||||
_WS_POPUPWINDOW|_WS_CLIPSIBLINGS|_WS_DLGFRAME,
|
win.CW_USEDEFAULT, win.CW_USEDEFAULT,
|
||||||
_CW_USEDEFAULT, _CW_USEDEFAULT,
|
|
||||||
281, 191, owner, 0, instance, unsafe.Pointer(dlg))
|
281, 191, owner, 0, instance, unsafe.Pointer(dlg))
|
||||||
|
|
||||||
dlg.uTextCtl, _ = win.CreateWindowEx(0,
|
dlg.uTextCtl, _ = win.CreateWindowEx(0,
|
||||||
strptr("STATIC"), strptr("Username:"),
|
strptr("STATIC"), strptr("Username:"),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_SS_WORDELLIPSIS|_SS_EDITCONTROL|_SS_NOPREFIX,
|
_WS_ZEN_LABEL,
|
||||||
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
12, 10, 241, 16, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
var flags uint32 = _WS_CHILD | _WS_VISIBLE | _WS_GROUP | _WS_TABSTOP | _ES_AUTOHSCROLL
|
dlg.uEditCtl, _ = win.CreateWindowEx(win.WS_EX_CLIENTEDGE,
|
||||||
dlg.uEditCtl, _ = win.CreateWindowEx(_WS_EX_CLIENTEDGE,
|
|
||||||
strptr("EDIT"), nil,
|
strptr("EDIT"), nil,
|
||||||
flags,
|
_WS_ZEN_CONTROL|win.ES_AUTOHSCROLL,
|
||||||
12, 30, 241, 24, dlg.wnd, 0, instance, nil)
|
12, 30, 241, 24, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
dlg.pTextCtl, _ = win.CreateWindowEx(0,
|
dlg.pTextCtl, _ = win.CreateWindowEx(0,
|
||||||
strptr("STATIC"), strptr("Password:"),
|
strptr("STATIC"), strptr("Password:"), _WS_ZEN_LABEL,
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_SS_WORDELLIPSIS|_SS_EDITCONTROL|_SS_NOPREFIX,
|
|
||||||
12, 60, 241, 16, dlg.wnd, 0, instance, nil)
|
12, 60, 241, 16, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
dlg.pEditCtl, _ = win.CreateWindowEx(_WS_EX_CLIENTEDGE,
|
dlg.pEditCtl, _ = win.CreateWindowEx(win.WS_EX_CLIENTEDGE,
|
||||||
strptr("EDIT"), nil,
|
strptr("EDIT"), nil,
|
||||||
flags|_ES_PASSWORD,
|
_WS_ZEN_CONTROL|win.ES_AUTOHSCROLL|win.ES_PASSWORD,
|
||||||
12, 80, 241, 24, dlg.wnd, 0, instance, nil)
|
12, 80, 241, 24, dlg.wnd, 0, instance, nil)
|
||||||
|
|
||||||
dlg.okBtn, _ = win.CreateWindowEx(0,
|
dlg.okBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.okLabel),
|
strptr("BUTTON"), strptr(*opts.okLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP|_BS_DEFPUSHBUTTON,
|
_WS_ZEN_BUTTON|win.BS_DEFPUSHBUTTON,
|
||||||
12, 116, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
12, 116, 75, 24, dlg.wnd, win.IDOK, instance, nil)
|
||||||
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
dlg.cancelBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
strptr("BUTTON"), strptr(*opts.cancelLabel),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 116, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
12, 116, 75, 24, dlg.wnd, win.IDCANCEL, instance, nil)
|
||||||
if opts.extraButton != nil {
|
if opts.extraButton != nil {
|
||||||
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
dlg.extraBtn, _ = win.CreateWindowEx(0,
|
||||||
strptr("BUTTON"), strptr(*opts.extraButton),
|
strptr("BUTTON"), strptr(*opts.extraButton),
|
||||||
_WS_CHILD|_WS_VISIBLE|_WS_GROUP|_WS_TABSTOP,
|
_WS_ZEN_BUTTON,
|
||||||
12, 116, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
12, 116, 75, 24, dlg.wnd, win.IDNO, instance, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
dlg.layout(getDPI(dlg.wnd))
|
dlg.layout(getDPI(dlg.wnd))
|
||||||
centerWindow(dlg.wnd)
|
centerWindow(dlg.wnd)
|
||||||
win.SetFocus(dlg.uEditCtl)
|
win.SetFocus(dlg.uEditCtl)
|
||||||
win.ShowWindow(dlg.wnd, _SW_NORMAL)
|
win.ShowWindow(dlg.wnd, win.SW_NORMAL)
|
||||||
win.SendMessage(dlg.uEditCtl, win.EM_SETSEL, 0, intptr(-1))
|
win.SendMessage(dlg.uEditCtl, win.EM_SETSEL, 0, intptr(-1))
|
||||||
|
|
||||||
if opts.ctx != nil {
|
if opts.ctx != nil {
|
||||||
|
@ -122,7 +119,7 @@ func (dlg *passwordDialog) setup(opts options) (string, string, error) {
|
||||||
go func() {
|
go func() {
|
||||||
select {
|
select {
|
||||||
case <-opts.ctx.Done():
|
case <-opts.ctx.Done():
|
||||||
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, _SC_CLOSE, 0)
|
win.SendMessage(dlg.wnd, win.WM_SYSCOMMAND, win.SC_CLOSE, 0)
|
||||||
case <-wait:
|
case <-wait:
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -146,18 +143,18 @@ func (dlg *passwordDialog) layout(dpi dpi) {
|
||||||
win.SendMessage(dlg.okBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.okBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(dlg.cancelBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.cancelBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SendMessage(dlg.extraBtn, win.WM_SETFONT, font, 1)
|
win.SendMessage(dlg.extraBtn, win.WM_SETFONT, font, 1)
|
||||||
win.SetWindowPos(dlg.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(191), _SWP_NOZORDER|_SWP_NOMOVE)
|
win.SetWindowPos(dlg.wnd, 0, 0, 0, dpi.scale(281), dpi.scale(191), win.SWP_NOMOVE|win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.uTextCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.uTextCtl, 0, dpi.scale(12), dpi.scale(10), dpi.scale(241), dpi.scale(16), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.uEditCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.uEditCtl, 0, dpi.scale(12), dpi.scale(30), dpi.scale(241), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.pTextCtl, 0, dpi.scale(12), dpi.scale(60), dpi.scale(241), dpi.scale(16), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.pTextCtl, 0, dpi.scale(12), dpi.scale(60), dpi.scale(241), dpi.scale(16), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.pEditCtl, 0, dpi.scale(12), dpi.scale(80), dpi.scale(241), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.pEditCtl, 0, dpi.scale(12), dpi.scale(80), dpi.scale(241), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
if dlg.extraBtn == 0 {
|
if dlg.extraBtn == 0 {
|
||||||
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(95), dpi.scale(116), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(95), dpi.scale(116), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(116), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(116), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
} else {
|
} else {
|
||||||
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(12), dpi.scale(116), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.okBtn, 0, dpi.scale(12), dpi.scale(116), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.extraBtn, 0, dpi.scale(95), dpi.scale(116), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.extraBtn, 0, dpi.scale(95), dpi.scale(116), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(116), dpi.scale(75), dpi.scale(24), _SWP_NOZORDER)
|
win.SetWindowPos(dlg.cancelBtn, 0, dpi.scale(178), dpi.scale(116), dpi.scale(75), dpi.scale(24), win.SWP_NOZORDER)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,10 +21,17 @@ var (
|
||||||
|
|
||||||
callNextHookEx = user32.NewProc("CallNextHookEx")
|
callNextHookEx = user32.NewProc("CallNextHookEx")
|
||||||
setWindowsHookEx = user32.NewProc("SetWindowsHookExW")
|
setWindowsHookEx = user32.NewProc("SetWindowsHookExW")
|
||||||
systemParametersInfo = user32.NewProc("SystemParametersInfoW")
|
|
||||||
unhookWindowsHookEx = user32.NewProc("UnhookWindowsHookEx")
|
unhookWindowsHookEx = user32.NewProc("UnhookWindowsHookEx")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
_WS_ZEN_DIALOG = win.WS_POPUPWINDOW | win.WS_CLIPSIBLINGS | win.WS_DLGFRAME
|
||||||
|
_WS_EX_ZEN_DIALOG = win.WS_EX_CONTROLPARENT | win.WS_EX_WINDOWEDGE | win.WS_EX_DLGMODALFRAME
|
||||||
|
_WS_ZEN_LABEL = win.WS_CHILD | win.WS_VISIBLE | win.WS_GROUP | win.SS_WORDELLIPSIS | win.SS_EDITCONTROL | win.SS_NOPREFIX
|
||||||
|
_WS_ZEN_CONTROL = win.WS_CHILD | win.WS_VISIBLE | win.WS_GROUP | win.WS_TABSTOP
|
||||||
|
_WS_ZEN_BUTTON = _WS_ZEN_CONTROL
|
||||||
|
)
|
||||||
|
|
||||||
func intptr(i int64) uintptr { return uintptr(i) }
|
func intptr(i int64) uintptr { return uintptr(i) }
|
||||||
func strptr(s string) *uint16 { return syscall.StringToUTF16Ptr(s) }
|
func strptr(s string) *uint16 { return syscall.StringToUTF16Ptr(s) }
|
||||||
func hwnd(i uint64) win.HWND { return win.HWND(uintptr(i)) }
|
func hwnd(i uint64) win.HWND { return win.HWND(uintptr(i)) }
|
||||||
|
@ -125,12 +132,12 @@ func newDialogHook(ctx context.Context, icon any, title *string, init func(wnd w
|
||||||
}
|
}
|
||||||
|
|
||||||
func dialogHookProc(code int32, wparam uintptr, lparam *_CWPRETSTRUCT) uintptr {
|
func dialogHookProc(code int32, wparam uintptr, lparam *_CWPRETSTRUCT) uintptr {
|
||||||
if lparam.Message == 0x0110 { // WM_INITDIALOG
|
if lparam.Message == win.WM_INITDIALOG {
|
||||||
tid := win.GetCurrentThreadId()
|
tid := win.GetCurrentThreadId()
|
||||||
hook := (*dialogHook)(loadBackRef(uintptr(tid)))
|
hook := (*dialogHook)(loadBackRef(uintptr(tid)))
|
||||||
atomic.StoreUintptr(&hook.wnd, uintptr(lparam.Wnd))
|
atomic.StoreUintptr(&hook.wnd, uintptr(lparam.Wnd))
|
||||||
if hook.ctx != nil && hook.ctx.Err() != nil {
|
if hook.ctx != nil && hook.ctx.Err() != nil {
|
||||||
win.SendMessage(lparam.Wnd, win.WM_SYSCOMMAND, _SC_CLOSE, 0)
|
win.SendMessage(lparam.Wnd, win.WM_SYSCOMMAND, win.SC_CLOSE, 0)
|
||||||
} else {
|
} else {
|
||||||
if hook.icon != nil {
|
if hook.icon != nil {
|
||||||
icon := getIcon(hook.icon)
|
icon := getIcon(hook.icon)
|
||||||
|
@ -164,7 +171,7 @@ func (h *dialogHook) wait() {
|
||||||
select {
|
select {
|
||||||
case <-h.ctx.Done():
|
case <-h.ctx.Done():
|
||||||
if wnd := atomic.LoadUintptr(&h.wnd); wnd != 0 {
|
if wnd := atomic.LoadUintptr(&h.wnd); wnd != 0 {
|
||||||
win.SendMessage(win.HWND(wnd), win.WM_SYSCOMMAND, _SC_CLOSE, 0)
|
win.SendMessage(win.HWND(wnd), win.WM_SYSCOMMAND, win.SC_CLOSE, 0)
|
||||||
}
|
}
|
||||||
case <-h.done:
|
case <-h.done:
|
||||||
}
|
}
|
||||||
|
@ -230,10 +237,10 @@ type font struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFont() font {
|
func getFont() font {
|
||||||
var metrics _NONCLIENTMETRICS
|
var metrics win.NONCLIENTMETRICS
|
||||||
metrics.Size = uint32(unsafe.Sizeof(metrics))
|
metrics.Size = uint32(unsafe.Sizeof(metrics))
|
||||||
systemParametersInfo.Call(0x29, // SPI_GETNONCLIENTMETRICS
|
win.SystemParametersInfo(win.SPI_GETNONCLIENTMETRICS,
|
||||||
unsafe.Sizeof(metrics), uintptr(unsafe.Pointer(&metrics)), 0)
|
unsafe.Sizeof(metrics), unsafe.Pointer(&metrics), 0)
|
||||||
return font{logical: metrics.MessageFont}
|
return font{logical: metrics.MessageFont}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -310,9 +317,9 @@ func (i *icon) delete() {
|
||||||
func centerWindow(wnd win.HWND) {
|
func centerWindow(wnd win.HWND) {
|
||||||
var rect win.RECT
|
var rect win.RECT
|
||||||
win.GetWindowRect(wnd, &rect)
|
win.GetWindowRect(wnd, &rect)
|
||||||
x := (win.GetSystemMetrics(0 /* SM_CXSCREEN */) - int(rect.Right-rect.Left)) / 2
|
x := win.GetSystemMetrics(win.SM_CXSCREEN) - int(rect.Right-rect.Left)
|
||||||
y := (win.GetSystemMetrics(1 /* SM_CYSCREEN */) - int(rect.Bottom-rect.Top)) / 2
|
y := win.GetSystemMetrics(win.SM_CYSCREEN) - int(rect.Bottom-rect.Top)
|
||||||
win.SetWindowPos(wnd, 0, x, y, 0, 0, 0x5) // SWP_NOZORDER|SWP_NOSIZE
|
win.SetWindowPos(wnd, 0, x/2, y/2, 0, 0, win.SWP_NOZORDER|win.SWP_NOSIZE)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getWindowString(wnd win.HWND) string {
|
func getWindowString(wnd win.HWND) string {
|
||||||
|
@ -369,25 +376,6 @@ type _CWPRETSTRUCT struct {
|
||||||
Wnd win.HWND
|
Wnd win.HWND
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-nonclientmetricsw
|
|
||||||
type _NONCLIENTMETRICS struct {
|
|
||||||
Size uint32
|
|
||||||
BorderWidth int32
|
|
||||||
ScrollWidth int32
|
|
||||||
ScrollHeight int32
|
|
||||||
CaptionWidth int32
|
|
||||||
CaptionHeight int32
|
|
||||||
CaptionFont win.LOGFONT
|
|
||||||
SmCaptionWidth int32
|
|
||||||
SmCaptionHeight int32
|
|
||||||
SmCaptionFont win.LOGFONT
|
|
||||||
MenuWidth int32
|
|
||||||
MenuHeight int32
|
|
||||||
MenuFont win.LOGFONT
|
|
||||||
StatusFont win.LOGFONT
|
|
||||||
MessageFont win.LOGFONT
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-systemtime
|
// https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-systemtime
|
||||||
type _SYSTEMTIME struct {
|
type _SYSTEMTIME struct {
|
||||||
year uint16
|
year uint16
|
||||||
|
|
Loading…
Reference in a new issue