Функция WM_SIZING

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


WM_SIZING

Сообщение выполняется при изменении размеров окна.

Параметры

Указанные параметры передаются системой.
$wParam Код события, указывает за какую из 4-х сторон или 4-х углов происходит изменение размеров
$lParam Указатель на структуру, содержащую координаты сторон окна

Примечания

В отличии от WM_SIZE функция WM_SIZING выполняется при нажатии и отпуске мыши на границах окна.
Смотрите функцию GUIRegisterMsg.

См. также

WM_SIZE

Пример

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

Global $k = 0, $TrMg = 0
$Gui = GUICreate("Измени размер окна", 370, 270, -1, -1, $WS_OVERLAPPEDWINDOW)
$Label = GUICtrlCreateLabel('Функция WM_SIZING выполняется при изменении размеров окна. Отличается от WM_SIZE тем, что выполняется при нажатии и отпуске границ окна. Предполагается использовать для установки положения и размеров некоторых элементов интерфейса в момент изменения размеров окна, в случае особых правил отсутствующих в GUICtrlSetResizing', 5, 5, 360, 230)
$Checkbox = GUICtrlCreateCheckbox('Пропорциональное изменение', 10, 240, 190, 17)

GUISetState()

Global $HtoW
; $gp = WinGetPos($Gui)
; Global $HtoW = $gp[3] / $gp[2]
GUIRegisterMsg($WM_SIZING, "WM_SIZING")

While 1
    $msg = GUIGetMsg()

    Switch $msg
        Case $Checkbox
            If GUICtrlRead($Checkbox) = 1 Then
                $TrMg = 1
                $gp = WinGetPos($Gui)
                $HtoW = $gp[3] / $gp[2]
            Else
                $TrMg = 0
            EndIf
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func WM_SIZING($hWnd, $iMsg, $wparam, $lparam)
    ; получает координаты сторон окна
    Local $sRect = DllStructCreate("Int[4]", $lparam), _
            $left = DllStructGetData($sRect, 1, 1), _
            $top = DllStructGetData($sRect, 1, 2), _
            $Right = DllStructGetData($sRect, 1, 3), _
            $bottom = DllStructGetData($sRect, 1, 4)
    $w = $Right - $left
    $h = $bottom - $top

    $k += 1
    WinSetTitle($Gui, '', 'Вызов ' & $k & ' раз, w=' & $w & ', h=' & $h)
   
    GUICtrlSetData($Label, 'Вызов ' & $k & ' раз' & @CRLF & @CRLF & _
        '--- Границы окна ---' & @CRLF & _
        'Левая граница = ' & @TAB & $left & @CRLF & _
        'Верхняя граница = ' & @TAB & $top & @CRLF & _
        'Правая граница = ' & @TAB & $Right & @CRLF & _
        'Нижняя граница = ' & @TAB & $bottom & @CRLF & @CRLF & _
        '--- Размеры окна ---' & @CRLF & _
        'Ширина = ' & @TAB & $w & @CRLF & _
        'Высота = ' & @TAB & $h & @CRLF & @CRLF & _
        '--- Граница или угол захвата мышкой ---' & @CRLF & _
        '$wparam = ' & @TAB & $wparam)
    If $TrMg = 1 Then
        Switch $wparam
            Case 1, 2
                $newHt = ($Right - $left) * $HtoW
                DllStructSetData($sRect, 1, DllStructGetData($sRect, 1, 2) + $newHt, 4)
            Case Else
                $newWid = ($bottom - $top) / $HtoW
                DllStructSetData($sRect, 1, DllStructGetData($sRect, 1, 1) + $newWid, 3)
        EndSwitch
    EndIf

    Return $GUI_RUNDEFMSG
EndFunc