Color dialog title (windows).
This commit is contained in:
parent
5633d0d7e6
commit
d95237cefb
2 changed files with 26 additions and 0 deletions
|
@ -46,6 +46,14 @@ func selectColor(options ...Option) (color.Color, error) {
|
||||||
runtime.LockOSThread()
|
runtime.LockOSThread()
|
||||||
defer runtime.UnlockOSThread()
|
defer runtime.UnlockOSThread()
|
||||||
|
|
||||||
|
if opts.title != "" {
|
||||||
|
hook, err := hookDialogTitle(opts.title)
|
||||||
|
if hook == 0 {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer unhookWindowsHookEx.Call(hook)
|
||||||
|
}
|
||||||
|
|
||||||
n, _, _ := chooseColor.Call(uintptr(unsafe.Pointer(&args)))
|
n, _, _ := chooseColor.Call(uintptr(unsafe.Pointer(&args)))
|
||||||
|
|
||||||
// save custom colors back
|
// save custom colors back
|
||||||
|
|
|
@ -49,6 +49,24 @@ type _CWPRETSTRUCT struct {
|
||||||
Wnd uintptr
|
Wnd uintptr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hookDialogTitle(title string) (hook uintptr, err error) {
|
||||||
|
tid, _, _ := getCurrentThreadId.Call()
|
||||||
|
hook, _, err = setWindowsHookEx.Call(12, // WH_CALLWNDPROCRET
|
||||||
|
syscall.NewCallback(func(code int, wparam uintptr, lparam *_CWPRETSTRUCT) uintptr {
|
||||||
|
if lparam.Message == 0x0110 { // WM_INITDIALOG
|
||||||
|
name := [7]uint16{}
|
||||||
|
getClassName.Call(lparam.Wnd, uintptr(unsafe.Pointer(&name)), uintptr(len(name)))
|
||||||
|
if syscall.UTF16ToString(name[:]) == "#32770" { // The class for a dialog box
|
||||||
|
ptr := syscall.StringToUTF16Ptr(title)
|
||||||
|
setWindowText.Call(lparam.Wnd, uintptr(unsafe.Pointer(ptr)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
next, _, _ := callNextHookEx.Call(hook, uintptr(code), wparam, uintptr(unsafe.Pointer(lparam)))
|
||||||
|
return next
|
||||||
|
}), 0, tid)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
type _COMObject struct{}
|
type _COMObject struct{}
|
||||||
|
|
||||||
func (o *_COMObject) Call(trap uintptr, a ...uintptr) (r1, r2 uintptr, lastErr error) {
|
func (o *_COMObject) Call(trap uintptr, a ...uintptr) (r1, r2 uintptr, lastErr error) {
|
||||||
|
|
Loading…
Reference in a new issue