WM_SIZING
Сообщение выполняется при изменении размеров окна.
Параметры
Указанные параметры передаются системой.$wParam | Код события, указывает за какую из 4-х сторон или 4-х углов происходит изменение размеров |
$lParam |
Указатель на структуру, содержащую координаты сторон окна |
Примечания
В отличии от WM_SIZE функция WM_SIZING выполняется при нажатии и отпуске мыши на границах окна.См. также
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