Описание функции
WM_SIZE
Сообщение выполняется при изменении размеров окна.
Параметры
Указанные параметры передаются системой.wParam | Способ, которым окно было изменено от 0 до 4 (мышкой или максимизация) 0 - Изменено мышкой 1 - Свёрнуто 2 - Развёрнуто на весь экран |
lParam |
Двойное слово содержит размеры клиентской области окна: младшее слово = ширина клиентской области окна старшее слово = высота клиентской области окна |
Примечания
Смотрите функцию SetWindowCallback.См. также
Пример
EnableExplicit
Global k = 0
#Window_0 = 0
;-Gadgets
Enumeration
#txtValue
#txtName
#ed2
#ed1
#chk1
#btn1
EndEnumeration
; реакция на изменение размера окна
Procedure WindowCallback(hWnd, Msg, wParam, lParam)
Protected GUI_H, GUI_W, x
GUI_W = lParam & $FFF ; LoWord
GUI_H = lParam >> 16 ; HiWord
Select Msg
Case #WM_SIZE ; Изменение размера окна.
x = (GUI_H - 100)/2 ; кэшируем, чтобы не вычислять одно и тоже многократно
ResizeGadget(#ed1, 10, 20, GUI_W - 20, x)
ResizeGadget(#ed2, 10, 44 + x, GUI_W - 20, x)
ResizeGadget(#txtValue, 10, 28 + x, 54, 16)
x * 2
ResizeGadget(#btn1, 20, x+60, 70, 24)
ResizeGadget(#chk1, GUI_W - 80, x+60, 70, 20)
k + 1
SetWindowTitle(#Window_0, "Вызов " + k + " раз, w=" + GUI_W + ", h=" + GUI_H)
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(#Window_0, 0, 0, 400, 200, "WM_SIZE", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget)
TextGadget(#txtName,10,4,46,16,"Текст1")
EditorGadget(#ed1, 10, 20, 380, 50, #PB_Editor_WordWrap)
TextGadget(#txtValue,10,78,54,16,"Текст2")
EditorGadget(#ed2, 10, 94, 380, 50)
ButtonGadget(#btn1, 20,160, 70, 24, "Кнопка")
CheckBoxGadget(#chk1, 320, 160, 70, 20, "Чекбокс")
SetGadgetText(#ed1, "Событие WM_SIZE выполняется при изменении размеров окна. Можно изменить координаты и размер элементов окна при изменении размеров окна")
SetWindowCallback(@WindowCallback())
;-Основной цикл
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #btn1
CloseWindow(0)
End
EndSelect
Case #PB_Event_CloseWindow
CloseWindow(0)
End
EndSelect
ForEver
EndIf