Refactor (windows).
This commit is contained in:
parent
6df549b1f0
commit
2428e68504
8 changed files with 76 additions and 57 deletions
|
@ -146,25 +146,25 @@ func (dlg *calendarDialog) layout(dpi dpi) {
|
|||
}
|
||||
}
|
||||
|
||||
func calendarProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
func calendarProc(wnd win.HWND, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
var dlg *calendarDialog
|
||||
switch msg {
|
||||
case win.WM_NCCREATE:
|
||||
saveBackRef(wnd, *lparam)
|
||||
saveBackRef(uintptr(wnd), *lparam)
|
||||
dlg = (*calendarDialog)(*lparam)
|
||||
case win.WM_NCDESTROY:
|
||||
deleteBackRef(wnd)
|
||||
deleteBackRef(uintptr(wnd))
|
||||
default:
|
||||
dlg = (*calendarDialog)(loadBackRef(wnd))
|
||||
dlg = (*calendarDialog)(loadBackRef(uintptr(wnd)))
|
||||
}
|
||||
|
||||
switch msg {
|
||||
case win.WM_DESTROY:
|
||||
postQuitMessage.Call(0)
|
||||
win.PostQuitMessage(0)
|
||||
|
||||
case win.WM_CLOSE:
|
||||
dlg.err = ErrCanceled
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_COMMAND:
|
||||
switch wparam {
|
||||
|
@ -179,14 +179,13 @@ func calendarProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointe
|
|||
case win.IDNO:
|
||||
dlg.err = ErrExtraButton
|
||||
}
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_DPICHANGED:
|
||||
dlg.layout(dpi(uint32(wparam) >> 16))
|
||||
|
||||
default:
|
||||
res, _, _ := defWindowProc.Call(wnd, uintptr(msg), wparam, uintptr(unsafe.Pointer(lparam)))
|
||||
return res
|
||||
return win.DefWindowProc(wnd, msg, wparam, unsafe.Pointer(lparam))
|
||||
}
|
||||
|
||||
return 0
|
||||
|
|
|
@ -140,25 +140,25 @@ func (dlg *entryDialog) layout(dpi dpi) {
|
|||
}
|
||||
}
|
||||
|
||||
func entryProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
func entryProc(wnd win.HWND, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
var dlg *entryDialog
|
||||
switch msg {
|
||||
case win.WM_NCCREATE:
|
||||
saveBackRef(wnd, *lparam)
|
||||
saveBackRef(uintptr(wnd), *lparam)
|
||||
dlg = (*entryDialog)(*lparam)
|
||||
case win.WM_NCDESTROY:
|
||||
deleteBackRef(wnd)
|
||||
deleteBackRef(uintptr(wnd))
|
||||
default:
|
||||
dlg = (*entryDialog)(loadBackRef(wnd))
|
||||
dlg = (*entryDialog)(loadBackRef(uintptr(wnd)))
|
||||
}
|
||||
|
||||
switch msg {
|
||||
case win.WM_DESTROY:
|
||||
postQuitMessage.Call(0)
|
||||
win.PostQuitMessage(0)
|
||||
|
||||
case win.WM_CLOSE:
|
||||
dlg.err = ErrCanceled
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_COMMAND:
|
||||
switch wparam {
|
||||
|
@ -171,14 +171,13 @@ func entryProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointer)
|
|||
case win.IDNO:
|
||||
dlg.err = ErrExtraButton
|
||||
}
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_DPICHANGED:
|
||||
dlg.layout(dpi(uint32(wparam) >> 16))
|
||||
|
||||
default:
|
||||
res, _, _ := defWindowProc.Call(wnd, uintptr(msg), wparam, uintptr(unsafe.Pointer(lparam)))
|
||||
return res
|
||||
return win.DefWindowProc(wnd, msg, wparam, unsafe.Pointer(lparam))
|
||||
}
|
||||
|
||||
return 0
|
||||
|
|
|
@ -174,13 +174,16 @@ type WNDCLASSEX struct {
|
|||
//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 DestroyIcon(icon Handle) (err error) = user32.DestroyIcon
|
||||
//sys DestroyWindow(wnd HWND) (err error) = user32.DestroyWindow
|
||||
//sys DispatchMessage(msg *MSG) (ret uintptr) = user32.DispatchMessageW
|
||||
//sys DefWindowProc(wnd HWND, msg uint32, wparam uintptr, lparam unsafe.Pointer) (ret uintptr) = user32.DefWindowProcW
|
||||
//sys EnableWindow(wnd HWND, enable bool) (ok bool) = user32.EnableWindow
|
||||
//sys EnumChildWindows(parent HWND, enumFunc uintptr, lparam unsafe.Pointer) = user32.EnumChildWindows
|
||||
//sys EnumWindows(enumFunc uintptr, lparam unsafe.Pointer) (err error) = user32.EnumChildWindows
|
||||
//sys GetDlgCtrlID(wnd HWND) (ret int) = user32.GetDlgCtrlID
|
||||
//sys getDpiForWindow(wnd HWND) (ret int) = user32.GetDpiForWindow
|
||||
//sys GetMessage(msg *MSG, wnd HWND, msgFilterMin uint32, msgFilterMax uint32) (ret uintptr) = user32.GetMessageW
|
||||
//sys GetSystemMetrics(index int) (ret int) = user32.GetSystemMetrics
|
||||
//sys GetWindowDC(wnd HWND) (ret Handle) = user32.GetWindowDC
|
||||
//sys GetWindowRect(wnd HWND, cmdShow *RECT) (err error) = user32.GetWindowRect
|
||||
//sys GetWindowText(wnd HWND, str *uint16, maxCount int) (ret int, err error) = user32.GetWindowTextW
|
||||
|
@ -188,6 +191,7 @@ type WNDCLASSEX struct {
|
|||
//sys IsDialogMessage(wnd HWND, msg *MSG) (ok bool) = user32.IsDialogMessageW
|
||||
//sys LoadIcon(instance Handle, resource uintptr) (ret Handle, err error) = user32.LoadIconW
|
||||
//sys LoadImage(instance Handle, name *uint16, typ int, cx int, cy int, load int) (ret Handle, err error) = user32.LoadImageW
|
||||
//sys PostQuitMessage(exitCode int) = user32.PostQuitMessage
|
||||
//sys RegisterClassEx(cls *WNDCLASSEX) (err error) = user32.RegisterClassExW
|
||||
//sys ReleaseDC(wnd HWND, dc Handle) (ok bool) = user32.ReleaseDC
|
||||
//sys SendMessage(wnd HWND, msg uint32, wparam uintptr, lparam uintptr) (ret uintptr) = user32.SendMessageW
|
||||
|
|
|
@ -68,13 +68,16 @@ var (
|
|||
procShell_NotifyIconW = modshell32.NewProc("Shell_NotifyIconW")
|
||||
procCreateIconFromResource = moduser32.NewProc("CreateIconFromResource")
|
||||
procCreateWindowExW = moduser32.NewProc("CreateWindowExW")
|
||||
procDefWindowProcW = moduser32.NewProc("DefWindowProcW")
|
||||
procDestroyIcon = moduser32.NewProc("DestroyIcon")
|
||||
procDestroyWindow = moduser32.NewProc("DestroyWindow")
|
||||
procDispatchMessageW = moduser32.NewProc("DispatchMessageW")
|
||||
procEnableWindow = moduser32.NewProc("EnableWindow")
|
||||
procEnumChildWindows = moduser32.NewProc("EnumChildWindows")
|
||||
procGetDlgCtrlID = moduser32.NewProc("GetDlgCtrlID")
|
||||
procGetDpiForWindow = moduser32.NewProc("GetDpiForWindow")
|
||||
procGetMessageW = moduser32.NewProc("GetMessageW")
|
||||
procGetSystemMetrics = moduser32.NewProc("GetSystemMetrics")
|
||||
procGetWindowDC = moduser32.NewProc("GetWindowDC")
|
||||
procGetWindowRect = moduser32.NewProc("GetWindowRect")
|
||||
procGetWindowTextLengthW = moduser32.NewProc("GetWindowTextLengthW")
|
||||
|
@ -82,6 +85,7 @@ var (
|
|||
procIsDialogMessageW = moduser32.NewProc("IsDialogMessageW")
|
||||
procLoadIconW = moduser32.NewProc("LoadIconW")
|
||||
procLoadImageW = moduser32.NewProc("LoadImageW")
|
||||
procPostQuitMessage = moduser32.NewProc("PostQuitMessage")
|
||||
procRegisterClassExW = moduser32.NewProc("RegisterClassExW")
|
||||
procReleaseDC = moduser32.NewProc("ReleaseDC")
|
||||
procSendMessageW = moduser32.NewProc("SendMessageW")
|
||||
|
@ -253,6 +257,12 @@ func CreateWindowEx(exStyle uint32, className *uint16, windowName *uint16, style
|
|||
return
|
||||
}
|
||||
|
||||
func DefWindowProc(wnd HWND, msg uint32, wparam uintptr, lparam unsafe.Pointer) (ret uintptr) {
|
||||
r0, _, _ := syscall.Syscall6(procDefWindowProcW.Addr(), 4, uintptr(wnd), uintptr(msg), uintptr(wparam), uintptr(lparam), 0, 0)
|
||||
ret = uintptr(r0)
|
||||
return
|
||||
}
|
||||
|
||||
func DestroyIcon(icon Handle) (err error) {
|
||||
r1, _, e1 := syscall.Syscall(procDestroyIcon.Addr(), 1, uintptr(icon), 0, 0)
|
||||
if r1 == 0 {
|
||||
|
@ -261,6 +271,14 @@ func DestroyIcon(icon Handle) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func DestroyWindow(wnd HWND) (err error) {
|
||||
r1, _, e1 := syscall.Syscall(procDestroyWindow.Addr(), 1, uintptr(wnd), 0, 0)
|
||||
if r1 == 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func DispatchMessage(msg *MSG) (ret uintptr) {
|
||||
r0, _, _ := syscall.Syscall(procDispatchMessageW.Addr(), 1, uintptr(unsafe.Pointer(msg)), 0, 0)
|
||||
ret = uintptr(r0)
|
||||
|
@ -308,6 +326,12 @@ func GetMessage(msg *MSG, wnd HWND, msgFilterMin uint32, msgFilterMax uint32) (r
|
|||
return
|
||||
}
|
||||
|
||||
func GetSystemMetrics(index int) (ret int) {
|
||||
r0, _, _ := syscall.Syscall(procGetSystemMetrics.Addr(), 1, uintptr(index), 0, 0)
|
||||
ret = int(r0)
|
||||
return
|
||||
}
|
||||
|
||||
func GetWindowDC(wnd HWND) (ret Handle) {
|
||||
r0, _, _ := syscall.Syscall(procGetWindowDC.Addr(), 1, uintptr(wnd), 0, 0)
|
||||
ret = Handle(r0)
|
||||
|
@ -364,6 +388,11 @@ func LoadImage(instance Handle, name *uint16, typ int, cx int, cy int, load int)
|
|||
return
|
||||
}
|
||||
|
||||
func PostQuitMessage(exitCode int) {
|
||||
syscall.Syscall(procPostQuitMessage.Addr(), 1, uintptr(exitCode), 0, 0)
|
||||
return
|
||||
}
|
||||
|
||||
func RegisterClassEx(cls *WNDCLASSEX) (err error) {
|
||||
r1, _, e1 := syscall.Syscall(procRegisterClassExW.Addr(), 1, uintptr(unsafe.Pointer(cls)), 0, 0)
|
||||
if r1 == 0 {
|
||||
|
|
|
@ -160,25 +160,25 @@ func (dlg *listDialog) layout(dpi dpi) {
|
|||
}
|
||||
}
|
||||
|
||||
func listProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
func listProc(wnd win.HWND, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
var dlg *listDialog
|
||||
switch msg {
|
||||
case win.WM_NCCREATE:
|
||||
saveBackRef(wnd, *lparam)
|
||||
saveBackRef(uintptr(wnd), *lparam)
|
||||
dlg = (*listDialog)(*lparam)
|
||||
case win.WM_NCDESTROY:
|
||||
deleteBackRef(wnd)
|
||||
deleteBackRef(uintptr(wnd))
|
||||
default:
|
||||
dlg = (*listDialog)(loadBackRef(wnd))
|
||||
dlg = (*listDialog)(loadBackRef(uintptr(wnd)))
|
||||
}
|
||||
|
||||
switch msg {
|
||||
case win.WM_DESTROY:
|
||||
postQuitMessage.Call(0)
|
||||
win.PostQuitMessage(0)
|
||||
|
||||
case win.WM_CLOSE:
|
||||
dlg.err = ErrCanceled
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_COMMAND:
|
||||
switch wparam {
|
||||
|
@ -208,14 +208,13 @@ func listProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointer) u
|
|||
case win.IDNO:
|
||||
dlg.err = ErrExtraButton
|
||||
}
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_DPICHANGED:
|
||||
dlg.layout(dpi(uint32(wparam) >> 16))
|
||||
|
||||
default:
|
||||
res, _, _ := defWindowProc.Call(wnd, uintptr(msg), wparam, uintptr(unsafe.Pointer(lparam)))
|
||||
return res
|
||||
return win.DefWindowProc(wnd, msg, wparam, unsafe.Pointer(lparam))
|
||||
}
|
||||
|
||||
return 0
|
||||
|
|
|
@ -234,25 +234,25 @@ func (d *progressDialog) layout(dpi dpi) {
|
|||
}
|
||||
}
|
||||
|
||||
func progressProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
func progressProc(wnd win.HWND, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
var dlg *progressDialog
|
||||
switch msg {
|
||||
case win.WM_NCCREATE:
|
||||
saveBackRef(wnd, *lparam)
|
||||
saveBackRef(uintptr(wnd), *lparam)
|
||||
dlg = (*progressDialog)(*lparam)
|
||||
case win.WM_NCDESTROY:
|
||||
deleteBackRef(wnd)
|
||||
deleteBackRef(uintptr(wnd))
|
||||
default:
|
||||
dlg = (*progressDialog)(loadBackRef(wnd))
|
||||
dlg = (*progressDialog)(loadBackRef(uintptr(wnd)))
|
||||
}
|
||||
|
||||
switch msg {
|
||||
case win.WM_DESTROY:
|
||||
postQuitMessage.Call(0)
|
||||
win.PostQuitMessage(0)
|
||||
|
||||
case win.WM_CLOSE:
|
||||
dlg.err = ErrCanceled
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_COMMAND:
|
||||
switch wparam {
|
||||
|
@ -265,14 +265,13 @@ func progressProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointe
|
|||
case win.IDNO:
|
||||
dlg.err = ErrExtraButton
|
||||
}
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_DPICHANGED:
|
||||
dlg.layout(dpi(uint32(wparam) >> 16))
|
||||
|
||||
default:
|
||||
res, _, _ := defWindowProc.Call(wnd, uintptr(msg), wparam, uintptr(unsafe.Pointer(lparam)))
|
||||
return res
|
||||
return win.DefWindowProc(wnd, msg, wparam, unsafe.Pointer(lparam))
|
||||
}
|
||||
|
||||
return 0
|
||||
|
|
|
@ -161,25 +161,25 @@ func (dlg *passwordDialog) layout(dpi dpi) {
|
|||
}
|
||||
}
|
||||
|
||||
func passwordProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
func passwordProc(wnd win.HWND, msg uint32, wparam uintptr, lparam *unsafe.Pointer) uintptr {
|
||||
var dlg *passwordDialog
|
||||
switch msg {
|
||||
case win.WM_NCCREATE:
|
||||
saveBackRef(wnd, *lparam)
|
||||
saveBackRef(uintptr(wnd), *lparam)
|
||||
dlg = (*passwordDialog)(*lparam)
|
||||
case win.WM_NCDESTROY:
|
||||
deleteBackRef(wnd)
|
||||
deleteBackRef(uintptr(wnd))
|
||||
default:
|
||||
dlg = (*passwordDialog)(loadBackRef(wnd))
|
||||
dlg = (*passwordDialog)(loadBackRef(uintptr(wnd)))
|
||||
}
|
||||
|
||||
switch msg {
|
||||
case win.WM_DESTROY:
|
||||
postQuitMessage.Call(0)
|
||||
win.PostQuitMessage(0)
|
||||
|
||||
case win.WM_CLOSE:
|
||||
dlg.err = ErrCanceled
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_COMMAND:
|
||||
switch wparam {
|
||||
|
@ -193,14 +193,13 @@ func passwordProc(wnd uintptr, msg uint32, wparam uintptr, lparam *unsafe.Pointe
|
|||
case win.IDNO:
|
||||
dlg.err = ErrExtraButton
|
||||
}
|
||||
destroyWindow.Call(wnd)
|
||||
win.DestroyWindow(wnd)
|
||||
|
||||
case win.WM_DPICHANGED:
|
||||
dlg.layout(dpi(uint32(wparam) >> 16))
|
||||
|
||||
default:
|
||||
res, _, _ := defWindowProc.Call(wnd, uintptr(msg), wparam, uintptr(unsafe.Pointer(lparam)))
|
||||
return res
|
||||
return win.DefWindowProc(wnd, msg, wparam, unsafe.Pointer(lparam))
|
||||
}
|
||||
|
||||
return 0
|
||||
|
|
|
@ -20,10 +20,6 @@ var (
|
|||
user32 = windows.NewLazySystemDLL("user32.dll")
|
||||
|
||||
callNextHookEx = user32.NewProc("CallNextHookEx")
|
||||
defWindowProc = user32.NewProc("DefWindowProcW")
|
||||
destroyWindow = user32.NewProc("DestroyWindow")
|
||||
getSystemMetrics = user32.NewProc("GetSystemMetrics")
|
||||
postQuitMessage = user32.NewProc("PostQuitMessage")
|
||||
setWindowsHookEx = user32.NewProc("SetWindowsHookExW")
|
||||
systemParametersInfo = user32.NewProc("SystemParametersInfoW")
|
||||
unhookWindowsHookEx = user32.NewProc("UnhookWindowsHookEx")
|
||||
|
@ -312,16 +308,11 @@ func (i *icon) delete() {
|
|||
}
|
||||
|
||||
func centerWindow(wnd win.HWND) {
|
||||
getMetric := func(i uintptr) int32 {
|
||||
n, _, _ := getSystemMetrics.Call(i)
|
||||
return int32(n)
|
||||
}
|
||||
|
||||
var rect win.RECT
|
||||
win.GetWindowRect(wnd, &rect)
|
||||
x := (getMetric(0 /* SM_CXSCREEN */) - (rect.Right - rect.Left)) / 2
|
||||
y := (getMetric(1 /* SM_CYSCREEN */) - (rect.Bottom - rect.Top)) / 2
|
||||
win.SetWindowPos(wnd, 0, int(x), int(y), 0, 0, 0x5) // SWP_NOZORDER|SWP_NOSIZE
|
||||
x := (win.GetSystemMetrics(0 /* SM_CXSCREEN */) - int(rect.Right-rect.Left)) / 2
|
||||
y := (win.GetSystemMetrics(1 /* SM_CYSCREEN */) - int(rect.Bottom-rect.Top)) / 2
|
||||
win.SetWindowPos(wnd, 0, x, y, 0, 0, 0x5) // SWP_NOZORDER|SWP_NOSIZE
|
||||
}
|
||||
|
||||
func getWindowString(wnd win.HWND) string {
|
||||
|
|
Loading…
Reference in a new issue