# Function Reference

# _GUICtrlButton_GetSplitInfo

Gets information for a split button control

#include <GuiButton.au3>
_GUICtrlButton_GetSplitInfo ( $hWnd )

## Parameters

$hWnd | Control ID/Handle to the control

## Return Value

Success: | an array of the following [0] - A handle to the image list [1] - The split button style, can be one or more of the following: $BCSS_ALIGNLEFT - Align the image or glyph horizontally with the left margin $BCSS_IMAGE - Draw an icon image as the glyph $BCSS_NOSPLIT - No split $BCSS_STRETCH - Stretch glyph, but try to retain aspect ratio [2] - Width of the glyph [3] - Height of the glyph
Failure: | sets the @error flag to non-zero.

## Remarks

This function works only with the $BS_SPLITBUTTON and $BS_DEFSPLITBUTTON button styles.
Windows Vista or later.

## Related

_GUICtrlButton_SetSplitInfo

## See Also

Search BCM_GETSPLITINFO in MSDN Library.

## Example

    #include "Extras\HelpFileInternals.au3"
    #include "Extras\WM_NOTIFY.au3"

    #include <GuiButton.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiMenu.au3>
    #include <StructureConstants.au3>
    #include <WindowsNotifsConstants.au3>
    #include <WindowsStylesConstants.au3>

    Global $g_hBtn, $g_hBtn2

    ; Note: The handle from these buttons can NOT be read with GUICtrlRead

    Example()

    Func Example()
        Local $hGUI = GUICreate("Button Set SplitInfo (v" & @AutoItVersion & ")", 600, 400)
        _MemoCreate(10, 100, 590, 284, $WS_VSCROLL)

        $g_hBtn = _GUICtrlButton_Create($hGUI, "Split Button", 10, 10, 120, 30, $BS_SPLITBUTTON)
        _GUICtrlButton_SetSplitInfo($g_hBtn)
        $g_hBtn2 = _GUICtrlButton_Create($hGUI, "Split Button 2", 10, 50, 120, 30, $BS_SPLITBUTTON)

        GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
        _WM_NOTIFY_Register($_g_idLst_Memo)

        GUISetState(@SW_SHOW)

        Local $aInfo = _GUICtrlButton_GetSplitInfo($g_hBtn)
        _MemoWrite("Split Info" & @CRLF & "----------------")
        For $x = 0 To 3
            _MemoWrite("$ainfo[" & $x & "] = " & $aInfo[$x])
        Next
        _MemoWrite("Split Info" & @CRLF & "----------------")

        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
            EndSwitch
        WEnd

        Exit
    EndFunc   ;==>Example

    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local Const $BCN_HOTITEMCHANGE = -1249
        Local $tagNMBHOTITEM = $tagNMHDR & ";dword dwFlags"
        Local $tNMBHOTITEM = DllStructCreate($tagNMBHOTITEM, $lParam)
        Local $iCode = DllStructGetData($tNMBHOTITEM, "Code")
        Local $hWndFrom = DllStructGetData($tNMBHOTITEM, "hWndFrom")
        Local $iFlags = DllStructGetData($tNMBHOTITEM, "dwFlags")
        Local $sText = ""

        Switch $iCode
            Case $BCN_HOTITEMCHANGE ; Win XP and Above
                $sText = "Text=" & _GUICtrlButton_GetText($hWndFrom)
                If BitAND($iFlags, 0x10) = 0x10 Then
                    _WM_NOTIFY_DebugEvent("$BCN_HOTITEMCHANGE - Entering", $tagNMBHOTITEM, $lParam, "IDFrom", $sText)
                ElseIf BitAND($iFlags, 0x20) = 0x20 Then
                    _WM_NOTIFY_DebugEvent("$BCN_HOTITEMCHANGE - Leaving", $tagNMBHOTITEM, $lParam, "IDFrom", $sText)
                EndIf
            Case $BCN_DROPDOWN
                _WM_NOTIFY_DebugEvent("$BCN_DROPDOWN", $tagNMBHOTITEM, $lParam, "IDFrom", "")
                _Popup_Menu($hWndFrom)
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY

    Func _Popup_Menu($hCtrl)
        Local $hMenu
        Local Enum $e_idOpen = 1000, $e_idSave, $e_idInfo
        $hMenu = _GUICtrlMenu_CreatePopup()
        _GUICtrlMenu_InsertMenuItem($hMenu, 0, "Open", $e_idOpen)
        _GUICtrlMenu_InsertMenuItem($hMenu, 1, "Save", $e_idSave)
        _GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
        _GUICtrlMenu_InsertMenuItem($hMenu, 3, "Info", $e_idInfo)
        Switch _GUICtrlMenu_TrackPopupMenu($hMenu, $hCtrl, -1, -1, 1, 1, 2)
            Case $e_idOpen
                _MemoWrite("Open - Selected")
            Case $e_idSave
                _MemoWrite("Save - Selected")
            Case $e_idInfo
                _MemoWrite("Info - Selected")
        EndSwitch
        _GUICtrlMenu_DestroyMenu($hMenu)
    EndFunc   ;==>_Popup_Menu

    ; React on a button click
    Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $iCode = BitShift($wParam, 16)
        Local $hCtrl = $lParam
        Local $sCode, $sText

        Switch $hCtrl
            Case $g_hBtn, $g_hBtn2
                Switch $iCode
                    Case $BN_CLICKED
                        $sCode = "$BN_CLICKED"
                    Case $BN_PAINT
                        $sCode = "$BN_PAINT"
                    Case $BN_PUSHED
                        $sCode = "$BN_PUSHED"
                    Case $BN_HILITE
                        $sCode = "$BN_HILITE"
                    Case $BN_UNPUSHED
                        $sCode = "$BN_UNPUSHED"
                    Case $BN_UNHILITE
                        $sCode = "$BN_UNHILITE"
                    Case $BN_DISABLE
                        $sCode = "$BN_DISABLE"
                    Case $BN_DBLCLK
                        $sCode = "$BN_DBLCLK"
                    Case $BN_DOUBLECLICKED
                        $sCode = "$BN_DOUBLECLICKED"
                    Case $BN_SETFOCUS
                        $sCode = "$BN_SETFOCUS"
                    Case $BN_KILLFOCUS
                        $sCode = "$BN_KILLFOCUS"
                EndSwitch
                $sText = "Text=" & _GUICtrlButton_GetText($hCtrl)
                _WM_NOTIFY_DebugEvent($sCode, $tagNMHDR, $lParam, "Handle", $sText)
                Return 0 ; Only workout clicking on the button
        EndSwitch
        ; Proceed the default AutoIt3 internal message commands.
        ; You also can complete let the line out.
        ; !!! But only 'Return' (without any value) will not proceed
        ; the default AutoIt3-message in the future !!!
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_COMMAND