Added Windows implementation of ProgressBar and the requisite comctl32.dll code.
This commit is contained in:
parent
668de3bccb
commit
a8bd21fe95
|
@ -0,0 +1,86 @@
|
|||
// 25 february 2014
|
||||
package ui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
// "syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// pretty much every constant here except _WM_USER is from commctrl.h
|
||||
// TODO for all: filter out constants not available in Windows 2000
|
||||
|
||||
// InitCommonControlsEx constants.
|
||||
const (
|
||||
_ICC_LISTVIEW_CLASSES = 0x00000001
|
||||
_ICC_TREEVIEW_CLASSES = 0x00000002
|
||||
_ICC_BAR_CLASSES = 0x00000004
|
||||
_ICC_TAB_CLASSES = 0x00000008
|
||||
_ICC_UPDOWN_CLASS = 0x00000010
|
||||
_ICC_PROGRESS_CLASS = 0x00000020
|
||||
_ICC_HOTKEY_CLASS = 0x00000040
|
||||
_ICC_ANIMATE_CLASS = 0x00000080
|
||||
_ICC_WIN95_CLASSES = 0x000000FF
|
||||
_ICC_DATE_CLASSES = 0x00000100
|
||||
_ICC_USEREX_CLASSES = 0x00000200
|
||||
_ICC_COOL_CLASSES = 0x00000400
|
||||
_ICC_INTERNET_CLASSES = 0x00000800
|
||||
_ICC_PAGESCROLLER_CLASS = 0x00001000
|
||||
_ICC_NATIVEFNTCTL_CLASS = 0x00002000
|
||||
_ICC_STANDARD_CLASSES = 0x00004000
|
||||
_ICC_LINK_CLASS = 0x00008000
|
||||
)
|
||||
|
||||
var (
|
||||
_initCommonControlsEx = comctl32.NewProc("InitCommonControlsEx")
|
||||
)
|
||||
|
||||
func initCommonControls() (err error) {
|
||||
var icc struct {
|
||||
dwSize uint32
|
||||
dwICC uint32
|
||||
}
|
||||
|
||||
icc.dwSize = uint32(unsafe.Sizeof(icc))
|
||||
icc.dwICC = _ICC_PROGRESS_CLASS
|
||||
r1, _, err := _initCommonControlsEx.Call(uintptr(unsafe.Pointer(&icc)))
|
||||
if r1 == _FALSE { // failure
|
||||
// TODO does it set GetLastError()?
|
||||
return fmt.Errorf("error initializing Common Controls (comctl32.dll): %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Common Controls class names.
|
||||
const (
|
||||
_PROGRESS_CLASS = "msctls_progress32"
|
||||
)
|
||||
|
||||
// Shared Common Controls styles.
|
||||
const (
|
||||
_WM_USER = 0x0400
|
||||
_CCM_FIRST = 0x2000
|
||||
_CCM_SETBKCOLOR = (_CCM_FIRST + 1)
|
||||
)
|
||||
|
||||
// TODO move _WM_USER here?
|
||||
|
||||
// Progress Bar styles.
|
||||
const (
|
||||
_PBS_SMOOTH = 0x01
|
||||
_PBS_VERTICAL = 0x04
|
||||
)
|
||||
|
||||
// Progress Bar messages.
|
||||
const (
|
||||
_PBM_SETRANGE = (_WM_USER + 1)
|
||||
_PBM_SETPOS = (_WM_USER + 2)
|
||||
_PBM_DELTAPOS = (_WM_USER + 3)
|
||||
_PBM_SETSTEP = (_WM_USER + 4)
|
||||
_PBM_STEPIT = (_WM_USER + 5)
|
||||
_PBM_SETRANGE32 = (_WM_USER + 6)
|
||||
_PBM_GETRANGE = (_WM_USER + 7)
|
||||
_PBM_GETPOS = (_WM_USER + 8)
|
||||
_PBM_SETBARCOLOR = (_WM_USER + 9)
|
||||
_PBM_SETBKCOLOR = _CCM_SETBKCOLOR
|
||||
)
|
|
@ -10,6 +10,7 @@ var (
|
|||
user32 = syscall.NewLazyDLL("user32.dll")
|
||||
kernel32 = syscall.NewLazyDLL("kernel32.dll")
|
||||
gdi32 = syscall.NewLazyDLL("gdi32.dll")
|
||||
comctl32 = syscall.NewLazyDLL("comctl32.dll")
|
||||
)
|
||||
|
||||
type _HANDLE uintptr
|
||||
|
|
|
@ -70,6 +70,10 @@ func doWindowsInit() (err error) {
|
|||
if err != nil {
|
||||
return fmt.Errorf("error getting standard window fonts: %v", err)
|
||||
}
|
||||
err = initCommonControls()
|
||||
if err != nil {
|
||||
return fmt.Errorf("error initializing Common Controls (comctl32.dll): %v", err)
|
||||
}
|
||||
// TODO others
|
||||
return nil // all ready to go
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ var classTypes = [nctypes]*classData{
|
|||
addSpaceErr: _LB_ERRSPACE,
|
||||
},
|
||||
c_progressbar: &classData{
|
||||
name: XXXXX,
|
||||
name: _PROGRESS_CLASS,
|
||||
style: _PBS_SMOOTH | controlstyle,
|
||||
xstyle: 0 | controlxstyle,
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue