Функция _GUICtrlButton_GetSplitInfo

         Описание функции


_GUICtrlButton_GetSplitInfo

Gets information for a split button control

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

Параметры

$hWnd Дескриптор или идентификатор элемента

Возвращаемое значение

Успех: Returns 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

Примечания

This function works only with the $BS_SPLITBUTTON and $BS_DEFSPLITBUTTON button styles


Минимальная ОС: Windows Vista

См. также

_GUICtrlButton_SetSplitInfo

См. также

Искать BCM_GETSPLITINFO в библиотеке MSDN

Пример

If @OSVersion = "WIN_XP" And MsgBox(4160 + 4 + 256, "Информация", "Эта функция не работает в WinXP" & @LF & "Продолжить?") = 7 Then Exit
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <WindowsConstants.au3>
#include <GuiMenu.au3>

Global $btn, $iMemo, $btn2

; Примечание: возвращаемый дескриптор этой кнопки не может быть прочитан с помощью функции GuiCtrlRead

_Main()

Func _Main()
    Local $hGUI, $aInfo

    $hGUI = GUICreate("Buttons", 400, 400)
    $iMemo = GUICtrlCreateEdit("", 10, 100, 390, 284, $WS_VSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

    GUISetState()

    $aInfo = _GUICtrlButton_GetSplitInfo($btn)
    MemoWrite("Split Info" & @LF & "----------------")
    For $x = 0 To 3
        MemoWrite("$ainfo[" & $x & "] = " & $aInfo[$x])
    Next
    MemoWrite("Split Info" & @LF & "----------------")

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

    Exit

EndFunc   ;==>_Main

; Записывает строку в элемент для заметок
Func MemoWrite($sMessage)
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc   ;==>MemoWrite

Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    #forceref $hWnd, $Msg, $wParam
    Local Const $BCN_HOTITEMCHANGE = -1249
    Local $tNMBHOTITEM = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;dword dwFlags", $lParam)
    Local $nNotifyCode = DllStructGetData($tNMBHOTITEM, "Code")
    Local $nID = DllStructGetData($tNMBHOTITEM, "IDFrom")
    Local $hCtrl = DllStructGetData($tNMBHOTITEM, "hWndFrom")
    Local $dwFlags = DllStructGetData($tNMBHOTITEM, "dwFlags")
    Local $sText = ""

    Switch $nNotifyCode
        Case $BCN_HOTITEMCHANGE ; Win XP и выше
            If BitAND($dwFlags, 0x10) = 0x10 Then
                $sText = "$BCN_HOTITEMCHANGE - Наведено: " & @CRLF

            ElseIf BitAND($dwFlags, 0x20) = 0x20 Then
                $sText = "$BCN_HOTITEMCHANGE - Оставлено: " & @CRLF
            EndIf
            MemoWrite($sText & _
                    "-----------------------------" & @CRLF & _
                    "WM_NOTIFY - информация:" & @CRLF & _
                    "-----------------------------" & @CRLF & _
                    "Код уведомления" & @TAB & $nNotifyCode & @CRLF & _
                    "Идентификатор.." & @TAB & $nID & @CRLF & _
                    "Дескриптор ...." & @TAB & $hCtrl & @CRLF & _
                    "Текст кнопки .." & @TAB & _GUICtrlButton_GetText($hCtrl) & @CRLF)
        Case $BCN_DROPDOWN
            MemoWrite("$BCN_DROPDOWN")
            _Popup_Menu($hCtrl)
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

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

; React on a button click
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    #forceref $hWnd, $Msg
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0x0000FFFF)
    Local $hCtrl = $lParam
    Local $sText = ""

    Switch $hCtrl
        Case $btn, $btn2
            Switch $nNotifyCode
                Case $BN_CLICKED
                    $sText = "$BN_CLICKED"
                Case $BN_PAINT
                    $sText = "$BN_PAINT"
                Case $BN_PUSHED, $BN_HILITE
                    $sText = "$BN_PUSHED, $BN_HILITE"
                Case $BN_UNPUSHED, $BN_UNHILITE
                    $sText = "$BN_UNPUSHED"
                Case $BN_DISABLE
                    $sText = "$BN_DISABLE"
                Case $BN_DBLCLK, $BN_DOUBLECLICKED
                    $sText = "$BN_DBLCLK, $BN_DOUBLECLICKED"
                Case $BN_SETFOCUS
                    $sText = "$BN_SETFOCUS"
                Case $BN_KILLFOCUS
                    $sText = "$BN_KILLFOCUS"
            EndSwitch
            MemoWrite( _
                    "-----------------------------" & @CRLF & _
                    "WM_COMMAND - информация:" & @CRLF & _
                    "-----------------------------" & @CRLF & _
                    "Код уведомления" & @TAB & $nNotifyCode & ', ' & $sText & @CRLF & _
                    "Идентификатор.." & @TAB & $nID & @CRLF & _
                    "Дескриптор ...." & @TAB & $hCtrl & @CRLF & _
                    "Текст кнопки .." & @TAB & _GUICtrlButton_GetText($hCtrl) & @CRLF)
            Return 0 ; Только для теста нажатия кнопки
    EndSwitch
    ; Продолжение обработчика внутренних команд AutoIt3.
    ; Вы также можете завершить, используя строку с выходом из функции.
    ; !!! Но только 'Return' (без значения) без продолжения
    ; обработчика внутренних команд AutoIt3 в дальнейшем !!!
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND