# Button

The Button structure contains the styles, notifications and state values concerned with button controls. Buttons are windows like any other and can be constructed using CreateWindow although more usually they form part of a dialogue box. The values from the Notification substructure are sent as the code parameter in a WM_NOTIFY message. Specialised button messages begin with BM_. The values in the State substructure may be sent or returned in messages such as BM_GETCHECK and BM_SETSTATE.

    structure Button:
    sig
        structure Style:
        sig
    	include BIT_FLAGS where type flags = Window.Style.flags
    	val WS_OVERLAPPED: flags and WS_POPUP: flags and WS_CHILD: flags and WS_MINIMIZE: flags
    	and WS_VISIBLE: flags and WS_DISABLED:flags and WS_CLIPSIBLINGS:flags
    	and WS_CLIPCHILDREN:flags and WS_MAXIMIZE:flags and WS_CAPTION:flags
    	and WS_BORDER:flags and WS_DLGFRAME:flags and WS_VSCROLL:flags and WS_HSCROLL:flags
    	and WS_SYSMENU:flags and WS_THICKFRAME:flags and WS_GROUP:flags and WS_TABSTOP:flags
    	and WS_MINIMIZEBOX:flags and WS_MAXIMIZEBOX:flags and WS_TILED:flags and WS_ICONIC:flags
    	and WS_SIZEBOX:flags and WS_OVERLAPPEDWINDOW:flags and WS_TILEDWINDOW:flags
    	and WS_POPUPWINDOW:flags and WS_CHILDWINDOW:flags
            and BS_3STATE: flags and BS_AUTO3STATE: flags and BS_AUTOCHECKBOX: flags
    	and BS_AUTORADIOBUTTON: flags and BS_BITMAP: flags and BS_BOTTOM: flags
            and BS_CENTER: flags and BS_CHECKBOX: flags and BS_DEFPUSHBUTTON: flags
            and BS_FLAT: flags and BS_GROUPBOX: flags and BS_ICON: flags and BS_LEFT: flags
            and BS_LEFTTEXT: flags and BS_MULTILINE: flags and BS_NOTIFY: flags
            and BS_OWNERDRAW: flags and BS_PUSHBUTTON: flags and BS_PUSHLIKE: flags
            and BS_RADIOBUTTON: flags and BS_RIGHT: flags and BS_RIGHTBUTTON: flags
            and BS_TEXT: flags and BS_TOP: flags and BS_USERBUTTON: flags and BS_VCENTER: flags
        end

        structure Notifications:
        sig
    	val BN_CLICKED: int
    	val BN_PAINT: int
    	val BN_HILITE: int
    	val BN_UNHILITE: int
    	val BN_DISABLE: int
    	val BN_DOUBLECLICKED: int
    	val BN_PUSHED: int
    	val BN_UNPUSHED: int
    	val BN_DBLCLK: int
    	val BN_SETFOCUS: int
    	val BN_KILLFOCUS: int
        end

        structure State:
        sig
    	val BST_UNCHECKED: int
    	val BST_CHECKED: int
    	val BST_INDETERMINATE: int
    	val BST_PUSHED: int
    	val BST_FOCUS: int
        end
    end