Что нового

Объясните, пожалуйста, что такое GUIRegisterMsg и с чем его едят?

SurikenTSD

Новичок
Сообщения
67
Репутация
1
То, что написано в справке, ну хоть убей, хоть глаза выколи, не могу понять абсолютно... Искал через поиск, нашел кучу тем, связанных с этой функцией, но ни одна из них не связана с описанием и "употреблением" данной функции...
А меня она волнует ввиду поиска решения проблемы одновременного запуска нескольких функции через разные кнопки gui.

К примеру вот код от madmasles для решения проблемы остановки скрипта кнопкой в этой теме.

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <MenuConstants.au3>
#include <WindowsConstants.au3>

$fPause = False
$fReturn = False
$hGui = GUICreate('Test', 300, 170)
$nLabel_1 = GUICtrlCreateLabel(StringFormat('%010d', 0), 40, 10, 90, 20)
$nLabel_2 = GUICtrlCreateLabel('Нет паузы', 170, 10, 90, 20)
$nButton_Go = GUICtrlCreateButton('Go', 40, 60, 90, 35)
$nButtonPause = GUICtrlCreateButton('Pause', 170, 60, 90, 35)
$nButtonReturn = GUICtrlCreateButton('Return', 100, 110, 100, 35)
GUISetState()
GUIRegisterMsg($WM_SYSCOMMAND, 'WM_SYSCOMMAND')
GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')
While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButton_Go
            GUICtrlSetState($nButton_Go, $GUI_DISABLE)
            _Go()
            GUICtrlSetState($nButton_Go, $GUI_ENABLE)
    EndSwitch
WEnd
Func _Go()
    For $i = 0 To 10000000
        If $fReturn Then
            GUICtrlSetData($nLabel_1, StringFormat('%010d', 0))
            $fReturn = False
            Return
        EndIf
        GUICtrlSetData($nLabel_1, StringFormat('%010d', $i))
        Sleep(10)
        While $fPause
            If $fReturn Then
                GUICtrlSetData($nLabel_1, StringFormat('%010d', 0))
                $fReturn = False
                Return
            EndIf
            Sleep(10)
        WEnd
    Next
EndFunc   ;==>_Go

Func WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nID = BitAND($wParam, 0xFFFF)
    If $nID == $SC_CLOSE Then Exit
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SYSCOMMAND

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    Local $nNotifyCode = BitShift($wParam, 16)
    Local $nID = BitAND($wParam, 0xFFFF)
    Switch $nNotifyCode
        Case $BN_CLICKED
            Switch $nID
                Case $nButtonPause
                    $fPause = Not $fPause
                    If $fPause Then
                        GUICtrlSetData($nLabel_2, 'Пауза')
                    Else
                        GUICtrlSetData($nLabel_2, 'Нет паузы')
                    EndIf
                Case $nButtonReturn
                    $fReturn = True
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND


Но я в нем решительно ничего не понимаю касательно вышеобозначенной функции.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
SurikenTSD [?]
меня она волнует ввиду поиска решения проблемы одновременного запуска нескольких функции через разные кнопки gui
Не должно на самом деле.

По поводу того что такое «GUIRegisterMsg», это функция регистрации Callbak-функции вызываемой при указанном событии. Всё это описано подробно в справке.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Почитайте здесь (вторая половина).
 
Верх