Что нового

Скрыть и востановить элемент окна

musicstashall

Знающий
Сообщения
322
Репутация
7
Гуру, наставники, помощи прошу). Рисую на внешних окнах различные контролы (а-ля свои). Хочу скрыть оригинальное содержимое окна и на сем месте отобразить своё, кастомное. Вроде бы все работет, но не без пинка, после скрытия элемента приходится свернуть окно и востановить, тогда оно очистится. А вот при восстановлении содержимого всё ок, рисуется сразу же.
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


В качестве примера используется окно персонализации «Цвет и внешний вид».
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
Вопрос частично решился. После каждого изменения в окнах нужно обращаться к библиотеке, с указанием нового окна. Тогда окна будут «послушны». В данном случае Form1:
Код:
DllCall("user32.dll", "hwnd", "SetParent", "hwnd", $Form1, "hwnd", $hGUI)


Но возник сразу же и другой вопрос: как подключить форму к скрипту?? Или как для GUI в скрипте разработать форму?? В скрипте есть $gui1, я хочу для него разработать форму...

Сори за тупость))
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
musicstashall
Что за форма и чем она отличается от gui?
 

joiner

Модератор
Локальный модератор
Сообщения
3,557
Репутация
628
musicstashall
для понятности - зачем обезображивать окна чужих программ своими? чего-то хочешь сделать удобным? это костыли на костылях.
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
inververs сказал(а):
musicstashall
Что за форма и чем она отличается от gui?

В коде создан GUI, для него нужно визуально разработать форму, очень много элементов. Вот, например:
Код:
$gui1 = GUICreate("", $aPos1[2], $aPos1[3], $aPos1[0], $aPos1[1], $WS_POPUP) ;окно контента, позиция прикрепляется к существующим элементам
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
запустите C:\Program Files (x86)\AutoIt3\SciTE\Tools\Koda
 
Автор
M

musicstashall

Знающий
Сообщения
322
Репутация
7
inververs сказал(а):
запустите C:\Program Files (x86)\AutoIt3\SciTE\Tools\Koda
Я делаю в ISN AutoIt Studio+, есть ли разница? Конструктор окон имею, накидаю элементы, а как мне это окно привязать к GUI, созданному в скрипте?
 
Верх