Implemented the previous commit's changes on Windows.
This commit is contained in:
parent
6428b17b7f
commit
3c73f10cc1
|
@ -17,18 +17,44 @@ type spinbox struct {
|
||||||
hwndUpDown C.HWND
|
hwndUpDown C.HWND
|
||||||
// updown state
|
// updown state
|
||||||
updownVisible bool
|
updownVisible bool
|
||||||
|
// keep these here to avoid having to get them out
|
||||||
|
value int
|
||||||
|
min int
|
||||||
|
max int
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSpinbox() Spinbox {
|
func newSpinbox(min int, max int) Spinbox {
|
||||||
s := new(spinbox)
|
s := new(spinbox)
|
||||||
s.hwndEdit = C.newControl(editclass,
|
s.hwndEdit = C.newControl(editclass,
|
||||||
C.textfieldStyle | C.ES_NUMBER,
|
C.textfieldStyle | C.ES_NUMBER,
|
||||||
C.textfieldExtStyle)
|
C.textfieldExtStyle)
|
||||||
s.updownVisible = true // initially shown
|
s.updownVisible = true // initially shown
|
||||||
|
s.min = min
|
||||||
|
s.max = max
|
||||||
|
s.value = s.min
|
||||||
s.remakeUpDown()
|
s.remakeUpDown()
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *spinbox) Value() int {
|
||||||
|
// TODO TODO TODO TODO TODO
|
||||||
|
// this CAN error out!!!
|
||||||
|
// we need to update s.value but we need to implement events first
|
||||||
|
return int(C.SendMessageW(s.hwndUpDown, C.UDM_GETPOS32, 0, 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *spinbox) SetValue(value int) {
|
||||||
|
// UDM_SETPOS32 is documented to do what we want, but since we're keeping a copy of value we need to do it anyway
|
||||||
|
if value < s.min {
|
||||||
|
value = s.min
|
||||||
|
}
|
||||||
|
if value > s.max {
|
||||||
|
value = s.max
|
||||||
|
}
|
||||||
|
s.value = value
|
||||||
|
C.SendMessageW(s.hwndUpDown, C.UDM_SETPOS32, 0, C.LPARAM(value))
|
||||||
|
}
|
||||||
|
|
||||||
func (s *spinbox) setParent(p *controlParent) {
|
func (s *spinbox) setParent(p *controlParent) {
|
||||||
C.controlSetParent(s.hwndEdit, p.hwnd)
|
C.controlSetParent(s.hwndEdit, p.hwnd)
|
||||||
C.controlSetParent(s.hwndUpDown, p.hwnd)
|
C.controlSetParent(s.hwndUpDown, p.hwnd)
|
||||||
|
@ -44,8 +70,8 @@ func (s *spinbox) remakeUpDown() {
|
||||||
// for this to work, hwndUpDown needs to have rect [0 0 0 0]
|
// for this to work, hwndUpDown needs to have rect [0 0 0 0]
|
||||||
C.moveWindow(s.hwndUpDown, 0, 0, 0, 0)
|
C.moveWindow(s.hwndUpDown, 0, 0, 0, 0)
|
||||||
C.SendMessageW(s.hwndUpDown, C.UDM_SETBUDDY, C.WPARAM(uintptr(unsafe.Pointer(s.hwndEdit))), 0)
|
C.SendMessageW(s.hwndUpDown, C.UDM_SETBUDDY, C.WPARAM(uintptr(unsafe.Pointer(s.hwndEdit))), 0)
|
||||||
C.SendMessageW(s.hwndUpDown, C.UDM_SETRANGE32, 0, 100)
|
C.SendMessageW(s.hwndUpDown, C.UDM_SETRANGE32, C.WPARAM(s.min), C.LPARAM(s.max))
|
||||||
C.SendMessageW(s.hwndUpDown, C.UDM_SETPOS32, 0, 0)
|
C.SendMessageW(s.hwndUpDown, C.UDM_SETPOS32, 0, C.LPARAM(s.value))
|
||||||
if s.updownVisible {
|
if s.updownVisible {
|
||||||
C.ShowWindow(s.hwndUpDown, C.SW_SHOW)
|
C.ShowWindow(s.hwndUpDown, C.SW_SHOW)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue