Started the Windows ProgressBar implemetnation. There's still an important detail left over...
This commit is contained in:
parent
c5aa4bc964
commit
44cd9db87c
|
@ -236,3 +236,6 @@ void setSpinboxEditSubclass(HWND hwnd, void *data)
|
|||
if ((*fv_SetWindowSubclass)(hwnd, spinboxEditSubProc, 0, (DWORD_PTR) data) == FALSE)
|
||||
xpanic("error subclassing Spinbox edit control to give it its own event handler", GetLastError());
|
||||
}
|
||||
|
||||
// provided for cgo's benefit
|
||||
LPWSTR xPROGRESS_CLASS = PROGRESS_CLASS;
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
// 4 november 2014
|
||||
|
||||
package ui
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// #include "winapi_windows.h"
|
||||
import "C"
|
||||
|
||||
type progressbar struct {
|
||||
*controlSingleHWND
|
||||
}
|
||||
|
||||
func newProgressBar() ProgressBar {
|
||||
hwnd := C.newControl(C.xPROGRESS_CLASS,
|
||||
C.PBS_SMOOTH,
|
||||
0)
|
||||
p := &progressbar{
|
||||
controlSingleHWND: newControlSingleHWND(hwnd),
|
||||
}
|
||||
p.fpreferredSize = p.xpreferredSize
|
||||
p.fnTabStops = func() int {
|
||||
// progress bars are not tab stops
|
||||
return 0
|
||||
}
|
||||
return p
|
||||
}
|
||||
|
||||
func (p *progressbar) Percent() int {
|
||||
return int(C.SendMessageW(p.hwnd, C.PBM_GETPOS, 0, 0))
|
||||
}
|
||||
|
||||
func (p *progressbar) SetPercent(percent int) {
|
||||
if percent < 0 || percent > 100 {
|
||||
panic(fmt.Errorf("given ProgressBar percentage %d out of range", percent))
|
||||
}
|
||||
// TODO circumvent aero
|
||||
C.SendMessageW(p.hwnd, C.PBM_SETPOS, C.WPARAM(percent), 0)
|
||||
}
|
||||
|
||||
const (
|
||||
// via http://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx
|
||||
// this is the double-width option
|
||||
progressbarWidth = 237
|
||||
progressbarHeight = 8
|
||||
)
|
||||
|
||||
func (p *progressbar) xpreferredSize(d *sizing) (width, height int) {
|
||||
return fromdlgunitsX(progressbarWidth, d), fromdlgunitsY(progressbarHeight, d)
|
||||
}
|
|
@ -77,6 +77,7 @@ extern void textfieldHideInvalidBalloonTip(HWND);
|
|||
extern void setGroupSubclass(HWND, void *);
|
||||
extern HWND newUpDown(HWND, void *);
|
||||
extern void setSpinboxEditSubclass(HWND, void *);
|
||||
extern LPWSTR xPROGRESS_CLASS;
|
||||
|
||||
// init_windows.c
|
||||
extern HINSTANCE hInstance;
|
||||
|
|
Loading…
Reference in New Issue