Функция _GUICtrlButton_Create

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


_GUICtrlButton_Create

Создает кнопку

#include <GuiButton.au3>
_GUICtrlButton_Create($hWnd, $sText, $iX, $iY, $iWidth, $iHeight [, $iStyle = -1 [, $iExStyle = -1]])

Параметры

$hWnd Дескриптор родительского окна или окна владельца
$sText Текст кнопки
$iX Координата левого края
$iY Координата верхнего края
$iWidth Ширина кнопки
$iHeight Высота кнопки
$iStyle [необязательный] Стиль элемента:
    $BS_AUTO3STATE - Создаёт Checkbox с тремя состояниями, в котором состояние поочерёдно переключается на "с галочкой", "квадратик" и "неотмеченный", при каждом клике.
    $BS_AUTOCHECKBOX - Создаёт Checkbox с двумя состояниями, в котором состояние поочерёдно переключается между "с галочкой" и "неотмеченный", при каждом клике.
    $BS_AUTORADIOBUTTON - Аналог радио-кнопки, кроме того, когда пользователь выбирает его, кнопка автоматически подсвечивает себя и удаляет выделение из любой другой радио-кнопки с тем же стилем в одной группе.
    $BS_FLAT - Плоская кнопка (двумерный вид); не использует стандартные тени по контуру, создающие объёмный 3D вид.
    $BS_GROUPBOX - Создает прямоугольный контур, в котором другие кнопки группируются. Любой текст, связанный с этим стилем отображается в верхнем левом углу прямоугольника.
    $BS_PUSHLIKE - Делает вид как у кнопки для таких как checkbox, трёх-статусный checkbox, или радио-кнопки. Кнопка выглядит приподнятой, когда не отмечена, и утопленной, когда отмечена.
    $BS_DEFPUSHBUTTON - Создаёт кнопку с жирным чёрным контуром. Если кнопка находится в диалоговом окне, пользователь может выбрать кнопку, нажав клавишу ENTER, даже если кнопка не имеет фокуса ввода. Этот стиль полезен возможностью пользователю быстро выбрать наиболее вероятный вариант, или по умолчанию.
    $BS_BOTTOM - Помещает текст в нижней части прямоугольника кнопки.
    $BS_CENTER - Помещает текст в центре по горизонтали в прямоугольнике кнопки.
    $BS_LEFT - Выравнивание текста по левому краю на кнопке (Button) или Checkbox.
    $BS_MULTILINE - Текст на кнопке в несколько строк, если текст слишком длинный, чтоб уместится на кнопке в одну строку.
    $BS_RIGHT - Выравнивание текста по правому краю на кнопке (Button) или Checkbox.
    $BS_RIGHTBUTTON - Позиция отмечаемого квадратика Checkbox справа.
    $BS_TOP - Помещает текст в верхней части прямоугольника кнопки.
    $BS_VCENTER - Помещает текст в центре по вертикали в прямоугольнике кнопки.
    $BS_ICON - Указывает, что кнопка отображает иконку.
    $BS_BITMAP - Указывает, что кнопка отображает bitmap.
    $BS_NOTIFY - Разрешает кнопке высылать уведомления $BN_KILLFOCUS и $BN_SETFOCUS в родительское окно. Обратите внимание, что кнопки высылают уведомления $BN_CLICKED независимо от этого стиля. Чтобы получить уведомление двойного клика - $BN_DBLCLK, кнопки должны иметь стили $BS_RADIOBUTTON или $BS_OWNERDRAW.
    Стили Vista:
    $BS_SPLITBUTTON - Создает разделённую кнопку. Разделённая кнопка имеет стрелку выпадающего списка.
    $BS_DEFSPLITBUTTON - Создает разделённую кнопку, которая ведёт себя как кнопка со стилем $BS_PUSHBUTTON, but also has a distinctive appearance.
    $BS_COMMANDLINK - Creates a command link button
    $BS_DEFCOMMANDLINK - Creates a command link button that behaves like a $BS_PUSHBUTTON style button.
    По умолчанию: ( -1) : отсутствует
    Принудительно : $WS_CHILD, $WS_TABSTOP, $WS_VISIBLE, $BS_NOTIFY
$iExStyle [необязательный] Расширенный стиль элемента. Соответствует стандартным константам $WS_EX_.

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

Успех:Возвращает дескриптор кнопки
Ошибка:Возвращает 0

Примечания

Для выше указанных констант необходим ButtonConstants.au3

Эта функция предназначена для опытных пользователей и для изучения того, как элемент работает.

См. также

_GUICtrlButton_Destroy

Пример

#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <WindowsConstants.au3>

Global $btn, $rdo, $chk, $iMemo

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

_Main()

Func _Main()
    Local $hGUI

    $hGUI = GUICreate("Создание кнопки", 400, 400)
    $iMemo = GUICtrlCreateEdit("", 119, 10, 276, 374, $WS_VSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")

    $btn = _GUICtrlButton_Create($hGUI, "Кнопка1", 10, 10, 90, 50)

    $rdo = _GUICtrlButton_Create($hGUI, "Радио1", 10, 80, 90, 50, $BS_AUTORADIOBUTTON)

    $chk = _GUICtrlButton_Create($hGUI, "Check1", 10, 130, 90, 50, $BS_AUTO3STATE)

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

    GUISetState()

    MemoWrite("Дескриптор Кнопка1: " & $btn)
    MemoWrite("Дескриптор Радио1 : " & $rdo)
    MemoWrite("Дескриптор Check1 : " & $chk & @CRLF)

    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)
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY

; Реакция на нажатие кнопки
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, $rdo, $chk
            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