Что нового

Элементы GUI MsgBox WM_ACTIVATE блокирует сворачивание окна

aptyp

Новичок
Сообщения
36
Репутация
0
НЕ могу въехать.
Почему в этом примере при нажатии на кнопку свернуть окно
MsgBox возникает несколько раз и блокирует сворачивание окна?

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

Opt("GUIOnEventMode", 1)

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Форма 1", 320, 240, -1, -1)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

GUIRegisterMsg($WM_NCLBUTTONDOWN, '_WM_NCLBUTTONDOWN')
GUIRegisterMsg($WM_SYSCOMMAND, '_WM_SYSCOMMAND')

GUIRegisterMsg($WM_ACTIVATE, '_WM_ACTIVATE')

While 1
    Sleep(500)
WEnd

Func _WM_NCLBUTTONDOWN($hWnd, $Msg, $wParam, $lParam)
    Switch $wParam
        Case 0x14 ; 0x14 = WM_ERASEBKGND
            GUIDelete()
            MsgBox($MB_TOPMOST, '', 'Нажата кнопка закрыть окно.')
            Exit
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NCLBUTTONDOWN

Func _WM_SYSCOMMAND($hWnd, $Msg, $wParam, $lParam)
    Switch $wParam
        Case 0xF020 ; 0xF020 = SC_MINIMIZE
            MsgBox($MB_TOPMOST, '', 'Окно свёрнуто.')
        Case 0xF120 ; 0xF120 = SC_RESTORE
            MsgBox($MB_TOPMOST, '', 'Окно развёрнуто.')
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SYSCOMMAND

Func _WM_ACTIVATE($hWnd, $Msg, $wParam, $lParam)
    If $wParam = 0 Then MsgBox($MB_TOPMOST, '', 'Окно не активно.')
EndFunc   ;==>WM_ACTIVATE
 

Norm

Продвинутый
Сообщения
278
Репутация
74
Как раз на эту тему вчера рассуждал
Ввставсять в обработчик событий MsgBox() вообще противопоказано.
Используйте для этого ConsoleWrite()

Надеюсь этот то, что Вы искали ▼▼▼.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>

Opt("GUIOnEventMode", 1)

$Form1 = GUICreate("Форма 1", 320, 240, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "_Minimize")
GUISetOnEvent($GUI_EVENT_RESTORE, "_Restore")

GUISetState(@SW_SHOW)


While 1
    Sleep(500)
WEnd

Func _Close()
    MsgBox($MB_TOPMOST, '', 'Нажата кнопка закрыть окно.')
    Exit
EndFunc

Func _Minimize()
    MsgBox($MB_TOPMOST, '', 'Окно свёрнуто.')
EndFunc

Func _Restore()
    MsgBox($MB_TOPMOST, '', 'Окно восстановленно.')
EndFunc
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
MsgBox возникает несколько раз и блокирует сворачивание окна?
в этих функциях нельзя использовать создание окон(бесконечный цикл). MsgBox это окно.
можно сделать иначе. функция высылает флаг нажатия на кнопку, а основной цикл реагирует на флаг и выдает сообщение, либо выполняет функцию
 
Верх