musicstashall
Знающий
- Сообщения
- 322
- Репутация
- 7
Гуру, наставники, помощи прошу). Рисую на внешних окнах различные контролы (а-ля свои). Хочу скрыть оригинальное содержимое окна и на сем месте отобразить своё, кастомное. Вроде бы все работет, но не без пинка, после скрытия элемента приходится свернуть окно и востановить, тогда оно очистится. А вот при восстановлении содержимого всё ок, рисуется сразу же.
1. Как скрыть элемент, обновить, перерисовать окно??
2. Как озбежать выхода за пределы окна «наложенных» элементов, если изменяется размер окна?
В качестве примера используется окно персонализации «Цвет и внешний вид».
1. Как скрыть элемент, обновить, перерисовать окно??
2. Как озбежать выхода за пределы окна «наложенных» элементов, если изменяется размер окна?
Код:
#include <GUIConstants.au3>
While 1
;получаем дескриптор окна
$hGUI = WinWaitActive("Цвет и внешний вид")
;поверх рисуем свою
$aPos = ControlGetPos($hGUI, "", "[CLASS:msctls_trackbar32; INSTANCE:1]"); привязка к данному элементу
$gui = GUICreate("", $aPos[2], $aPos[3] * 5, $aPos[0] + $aPos[2] + 20, $aPos[1] + $aPos[3] * 2, $WS_POPUP); создаем свое окно
DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $gui, "hwnd", $hGUI)
;$btn = GUICtrlCreateButton("Кнопка1", 0, 0, $aPos[2], $aPos[3])
;$sld = GUICtrlCreateSlider(0, 0, $aPos[2], $aPos[3])
$lab1 = GUICtrlCreateLabel("Дополнительные настройки цвета", 0, 0, $aPos[2], $aPos[3]); создаем свои элементы
$lab2 = GUICtrlCreateLabel("Настройки прозрачности и блюр", 0, 30, $aPos[2], $aPos[3])
$lab3 = GUICtrlCreateLabel("Настройки окна проводника", 0, 60, $aPos[2], $aPos[3])
GUISetState()
GUICtrlSetState($lab1, $GUI_FOCUS)
GUICtrlSetState($lab2, $GUI_FOCUS)
While 1
Switch GUIGetMsg()
Case $lab1
$t = ControlHide("[CLASS:CabinetWClass]", "", "[CLASS:DirectUIHWND; INSTANCE:4]") ; скрыли элемент
WinSetState("Цвет и внешний вид", "", @SW_SHOWNA) ; пытаюсь как-то обновить окно
GUISetState($hGUI, @SW_RESTORE) ; тоже пытаюсь обновить содержимое окна
Case $lab2
$t = ControlHide("[CLASS:CabinetWClass]", "", "[CLASS:DirectUIHWND; INSTANCE:4]")
Case $lab3
ControlShow ("[CLASS:CabinetWClass]", "", "[CLASS:DirectUIHWND; INSTANCE:4]"); восстанавливаем содержимое
ExitLoop
EndSwitch
Sleep(50)
WEnd
Sleep(50)
WEnd
В качестве примера используется окно персонализации «Цвет и внешний вид».