Что нового

[Элементы GUI] Как сделать родительское окно недоступным под дочерним

Myxa

Новичок
Сообщения
6
Репутация
0
Когда создаётся дочернее окно, даже с расширенным стилем $WS_EX_TOPMOST, контролы в родительском окне остаются кликабельны.

Вот простой пример. Основная (родительская) форма с кнопкой. По нажатию кнопки - создаётся дочерняя форма. Она располагается всегда поверх родительской, однако кнопку в родительской форме можно нажать. Я обхожу эту проблему, отключая ($GUI_DISABLE) кнопку при вызове дочерней формы (отмечено комментариями). Но это некрасиво. Как сделать так чтобы кнопка оставалась включенной, но при этом недоступной для нажатия ?

Код:
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
$main = GuiCreate ("MAIN", 300, 300, 100, 100)
$run = GUICtrlCreateButton ("RUN", 50, 50, 200, 200)
GuiSetState (@SW_SHOW)
Do
	$msg = GuiGetMsg (1)
	Select
		Case ($msg[0] = $run)
			GUICtrlSetState ($run, $GUI_DISABLE)	; Отключаю кнопку
			$child = GUICreate ("CHILD", 200, 200, 400, 400, -1, $WS_EX_TOPMOST, $main)
			GuiSetState (@SW_SHOW)
			Do
				$msg = GuiGetMsg (1)
			Until ($msg[0] = $GUI_EVENT_CLOSE) AND ($msg[1] = $child)
			GUISwitch ($child)
			GUIDelete ()
			GUICtrlSetState ($run, $GUI_ENABLE)		; Включаю кнопку
	EndSelect
Until ($msg[0] = $GUI_EVENT_CLOSE) AND ($msg[1] = $main)
GUISwitch ($main)
GUIDelete ()
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
$hMain = GUICreate('Main GUI', 400, 400)
$Button = GUICtrlCreateButton('Child', 150, 364, 100, 25)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $Button
			_ChildDlg('Child GUI', $hMain)
	EndSwitch
WEnd

Func _ChildDlg($sTitle = '', $hParent = 0)

	Local $hForm

	GUISetState(@SW_DISABLE, $hParent)

	$hForm = GUICreate($sTitle, 400, 200, -1, -1, -1, -1, $hParent)
	GUISetState()

	While 1
		Switch GUIGetMsg()
			Case -3
				ExitLoop
		EndSwitch
	WEnd

	GUISetState(@SW_ENABLE, $hParent)
	GUIDelete($hForm)

EndFunc   ;==>_ChildDlg
 
Автор
M

Myxa

Новичок
Сообщения
6
Репутация
0
Оперативно и прямо в точку! Спасибо! :ok:

Код:
GUISetState(@SW_DISABLE, $hParent)


OffTopic:
Надо же, я ведь видел такую конструкцию, но думал она полностью форму погасит. И даже не попробовал...
:-[
 
Верх