Added button code.

This commit is contained in:
Pietro Gagliardi 2014-02-09 23:22:12 -05:00
parent df8f7a2190
commit ef5739229e
1 changed files with 106 additions and 0 deletions

106
buttons.go Normal file
View File

@ -0,0 +1,106 @@
// 9 february 2014
package main
import (
// "syscall"
// "unsafe"
)
// Button styles.
const (
// from winuser.h
BS_PUSHBUTTON = 0x00000000
BS_DEFPUSHBUTTON = 0x00000001
BS_CHECKBOX = 0x00000002
BS_AUTOCHECKBOX = 0x00000003
BS_RADIOBUTTON = 0x00000004
BS_3STATE = 0x00000005
BS_AUTO3STATE = 0x00000006
BS_GROUPBOX = 0x00000007
BS_USERBUTTON = 0x00000008
BS_AUTORADIOBUTTON = 0x00000009
BS_PUSHBOX = 0x0000000A
BS_OWNERDRAW = 0x0000000B
BS_TYPEMASK = 0x0000000F
BS_LEFTTEXT = 0x00000020
BS_TEXT = 0x00000000
BS_ICON = 0x00000040
BS_BITMAP = 0x00000080
BS_LEFT = 0x00000100
BS_RIGHT = 0x00000200
BS_CENTER = 0x00000300
BS_TOP = 0x00000400
BS_BOTTOM = 0x00000800
BS_VCENTER = 0x00000C00
BS_PUSHLIKE = 0x00001000
BS_MULTILINE = 0x00002000
BS_NOTIFY = 0x00004000
BS_FLAT = 0x00008000
BS_RIGHTBUTTON = BS_LEFTTEXT
// from commctrl.h
// BS_SPLITBUTTON = 0x0000000C // Windows Vista and newer and(/or?) comctl6 only
// BS_DEFSPLITBUTTON = 0x0000000D // Windows Vista and newer and(/or?) comctl6 only
// BS_COMMANDLINK = 0x0000000E // Windows Vista and newer and(/or?) comctl6 only
// BS_DEFCOMMANDLINK = 0x0000000F // Windows Vista and newer and(/or?) comctl6 only
)
// Button WM_COMMAND notifications.
const (
// from winuser.h
BN_CLICKED = 0
BN_PAINT = 1
BN_HILITE = 2
BN_UNHILITE = 3
BN_DISABLE = 4
BN_DOUBLECLICKED = 5
BN_PUSHED = BN_HILITE
BN_UNPUSHED = BN_UNHILITE
BN_DBLCLK = BN_DOUBLECLICKED
BN_SETFOCUS = 6
BN_KILLFOCUS = 7
)
// Button check states.
const (
// from winuser.h
BST_UNCHECKED = 0x0000
BST_CHECKED = 0x0001
BST_INDETERMINATE = 0x0002
)
var (
checkDlgButton = user32.NewProc("CheckDlgButton")
checkRadioButton = user32.NewProc("CheckRadioButton")
isDlgButtonChecked = user32.NewProc("IsDlgButtonChecked")
)
func CheckDlgButton(hDlg HWND, nIDButton int, uCheck uint32) (err error) {
r1, _, err := checkDlgButton.Call(
uintptr(hDlg),
uintptr(nIDButton),
uintptr(uCheck))
if r1 == 0 { // failure
return err
}
return nil
}
func CheckRadioButton(hDlg HWND, nIDFirstButton int, nIDLastButton int, nIDCheckButton int) (err error) {
r1, _, err := checkRadioButton.Call(
uintptr(hDlg),
uintptr(nIDFirstButton),
uintptr(nIDLastButton),
uintptr(nIDCheckButton))
if r1 == 0 { // failure
return err
}
return nil
}
// TODO handle errors
func IsDlgButtonChecked(hDlg HWND, nIDButton int) (state uint32, err error) {
r1, _, _ := isDlgButtonChecked.Call(
uintptr(hDlg),
uintptr(nIDButton))
return uint32(r1), nil
}