Implemented the previous commit's changes on Windows.

This commit is contained in:
Pietro Gagliardi 2014-10-30 12:43:06 -04:00
parent 6428b17b7f
commit 3c73f10cc1
1 changed files with 29 additions and 3 deletions

View File

@ -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)
} }