Gui, 4:+hwndhGui4
Gui, 4:Add, Tab2, x5 y5 h500 w397 cBlue, 1 вкладка|2 вкладка
Gui, 4:Tab, 1
Gui, 4:Add, Button, x125 y40 w70 gButton vButton, % Chr(0x2192) ; значок стрелки вправо
Gui, 4:Tab, 2
Gui, 4:Add, Button, x125 y40 w70 gButton1 vButton1, % Chr(0x2192) ; значок стрелки вправо
Gui, 4:Show, w200 h70
Gui, 5:+hwndhGui2 +Owner4 -Caption +Border
Gui, 5:Add, Text,, Здесь какая-то информация
VarSetCapacity(WI, 60)
OnMessage(0x3, "Follow") ; WM_MOVE = 0x3, отслеживаем передвижение главного окна
OnMessage(0x112, "Follow") ; WM_SYSCOMMAND = 0x112, отслеживаем минимизацию/восстановление главного окна
return
Button: ; определяем положение главного окна и его клиентской области
DllCall("GetWindowInfo", Ptr, hGui4, Ptr, &WI)
if i := !i
Gui, 5:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
. " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " hide"
DllCall("AnimateWindow", Ptr, hGui2, UInt, 400, UInt, 0x40000|(i ? 1 : 0x10002)) ; выдвигаем/задвигаем окно-слайдер
GuiControl,, Button, % Chr(0x2190|(i ? 0 : 2)) ; меняем стрелку на кнопке
return
Follow(wp, lp, msg, hwnd)
{
global hGui1, WI, i
static k
if (msg = 0x112)
{
if (wp = 0xF020 && k := 1) ; SC_MINIMIZE = 0xF020
Gui, 5:Show, Hide ; скрываем окно-слайдер, если оно выдвинуто, при минимизации основного окна
if (wp = 0xF120 && !(k := 0) && i) ; SC_RESTORE = 0xF120
Gui, 5:Show ; показываем окно-слайдер, если оно было выдвинуто, при восстановлении основного окна
}
if (!i || hwnd != hGui4 || k = 1)
return
; привязываем окно-слайдер к правой границе основного окна
DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)
Gui, 5:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
. " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " NA"
}
Gui, 6:+hwndhGui2 +Owner4 -Caption +Border
Gui, 6:Add, Text,, Здесь какая-то информация 1
VarSetCapacity(WI, 60)
OnMessage(0x3, "Follow1") ; WM_MOVE = 0x3, отслеживаем передвижение главного окна
OnMessage(0x112, "Follow1") ; WM_SYSCOMMAND = 0x112, отслеживаем минимизацию/восстановление главного окна
return
Button1: ; определяем положение главного окна и его клиентской области
DllCall("GetWindowInfo", Ptr, hGui4, Ptr, &WI)
if i := !i
Gui, 6:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
. " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " hide"
DllCall("AnimateWindow", Ptr, hGui2, UInt, 400, UInt, 0x40000|(i ? 1 : 0x10002)) ; выдвигаем/задвигаем окно-слайдер
GuiControl,, Button1, % Chr(0x2190|(i ? 0 : 2)) ; меняем стрелку на кнопке
return
Follow1(wp, lp, msg, hwnd)
{
global hGui1, WI, i
static k
if (msg = 0x112)
{
if (wp = 0xF020 && k := 1) ; SC_MINIMIZE = 0xF020
Gui, 6:Show, Hide ; скрываем окно-слайдер, если оно выдвинуто, при минимизации основного окна
if (wp = 0xF120 && !(k := 0) && i) ; SC_RESTORE = 0xF120
Gui, 6:Show ; показываем окно-слайдер, если оно было выдвинуто, при восстановлении основного окна
}
if (!i || hwnd != hGui4 || k = 1)
return
; привязываем окно-слайдер к правой границе основного окна
DllCall("GetWindowInfo", Ptr, hGui1, Ptr, &WI)
Gui, 6:Show, % "x" NumGet(WI, 12, "UInt") " y" NumGet(WI, 24, "UInt")
. " h" NumGet(WI, 32, "UInt") - NumGet(WI, 24, "UInt") " NA"
}