Функция GUIGetMsg

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


GUIGetMsg

Опрос GUI-окна на возникновение какого либо события.

GUIGetMsg ( [ advanced = 0 ] )

Параметры

advanced [необязательный] Возвращает расширенную информацию в массив.
0 = (по умолчанию) Возвращает событие.
1 = возвращает массив, содержащий события и расширенную информацию.

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

Возвращает событие, или массив в зависимости от дополнительного параметра.

Событие возвращает идентификатор элемента управления (и отправляет сообщение), или системное событие (например закрытие или сворачивание окна). Или 0 при отсутствии события.

Событие IDОтправка сообщения элементу управления для выполнения
0Нет событий
$GUI_EVENT_CLOSEЗакрыть окно (либо по определённым кнопкам или системному меню).
$GUI_EVENT_MINIMIZEСвернуть окно.
$GUI_EVENT_RESTOREВосстановить окно.
$GUI_EVENT_MAXIMIZEРазвернуть на весь экран.
$GUI_EVENT_MOUSEMOVEКурсор мыши переместился.
$GUI_EVENT_PRIMARYDOWNЛевая кнопка мыши была нажата.
$GUI_EVENT_PRIMARYUPЛевая кнопка мыши была отпущена.
$GUI_EVENT_SECONDARYDOWNПравая кнопка мыши была нажата.
$GUI_EVENT_SECONDARYUPПравая кнопка мыши была отпущена.
$GUI_EVENT_RESIZEDИзменён размер окна.
$GUI_EVENT_DROPPEDВыполнена операция "перетащить и бросить" (Drag&Drop). Макросы @GUI_DragId, @GUI_DragFile и @GUI_DropId используются для возврата идентификаторов / файлов соответствующим элементам.

При использовании дополнительного параметра возвращается массив с расширенной информацией:

$array[0] = 0 или ID-события или идентификатор элемента управления
$array[1] = Дескриптор окна события
$array[2] = Указатель элемента события (если имеется)
$array[3] = Текущая X-координата курсора мыши (относительно GUI-окна)
$array[4] = Текущая Y-координата курсора мыши (относительно GUI-окна)

Если опция GUIOnEventMode установлена в 1, то GUIGetMsg() всегда возвращает 0 и @error установленный в 1.

Если опция GUIEventOptions установлена в 1, то кнопки Свернуть, Развернуть, Восстановить не будут выполнять никаких действий, кроме простого уведомления.

Примечания

Эта функция вставляет задержку эквивалентную Sleep(10), достаточную для быстрого отклика интерфейса и в тоже время снижает нагрузку на процессор, уменьшая количество вызовов в секунду при работе в цикле. Подробнее о режиме MessageLoop.

Информация о позиции мыши и элементе управления под курсором можно получить функцией GUIGetCursorInfo(). Так как наведение курсора на элемент не вызывает события, то для получения идентификатора элемента необходимо вызвать функцию GUIGetCursorInfo().

См. также

TrayGetMsg, GUICreate, GUICtrlCreate..., GUICtrlRead, GUIOnEventMode (Опция), GUIEventOptions (Опция), GUIGetCursorInfo, GUICtrlSendMsg, GUICtrlSetOnEvent, GUISetOnEvent

Пример

#include <GUIConstantsEx.au3>

Example()

;-------------------------------------------------------------------------------------
; Пример - Нажмите кнопку , чтобы увидеть значение радиокнопки
; Скрипт также проверяет изменение состояния (Закрытое/Свёрнутое/timeouts, и т.д.).
Func Example()
    Local $button_1, $group_1, $iRadio_1, $iRadio_2, $iRadio_3
    Local $iRadioVal1, $msg, $hGui

    Opt("GUICoordMode", 1)
    $hGui = GUICreate("Демонстрация Радио-кнопок", 400, 280)

    ; Создание элементов
    $button_1 = GUICtrlCreateButton("Кнопка", 30, 20, 120, 40)
    $group_1 = GUICtrlCreateGroup("Group 1", 30, 90, 165, 160)
    GUIStartGroup()
    $iRadio_1 = GUICtrlCreateRadio("Радио &0", 50, 120, 70, 20)
    $iRadio_2 = GUICtrlCreateRadio("Радио &1", 50, 150, 60, 20)
    $iRadio_3 = GUICtrlCreateRadio("Радио &2", 50, 180, 60, 20)

    ; Инициализация переменной, которая будет использована для отслеживания событий GUI
    $iRadioVal1 = 0 ; Принимаем за 0 = первая радиокнопка выбрана, 2 = последняя радиокнопка

    ; Показывает GUI
    GUISetState()

    ; В этом цикле используются переменные для отслеживания изменений состояния радиокнопок,
    ; другой способ заключается в использовании GUICtrlRead(), чтобы читать состояние каждого элемента
    While 1
        $msg = GUIGetMsg()
        Select
            Case $msg = $GUI_EVENT_CLOSE
                MsgBox(0, "", "Диалог был закрыт", 0, $hGui)
                Exit
            Case $msg = $GUI_EVENT_MINIMIZE
                MsgBox(0, "", "Диалог свёрнут", 2, $hGui)
            Case $msg = $GUI_EVENT_MAXIMIZE
                MsgBox(0, "", "Диалог восстановлен", 2, $hGui)

            Case $msg = $button_1
                MsgBox(0, "Текущий выбор", "Радио " & $iRadioVal1, 0, $hGui)

            Case $msg >= $iRadio_1 And $msg <= $iRadio_3
                $iRadioVal1 = $msg - $iRadio_1

        EndSelect
    WEnd
EndFunc