Что нового

Привязка дочернего GUI к главному.

running-frag

why me?
Сообщения
441
Репутация
60
Что хочется увидеть - есть главное окно и кнопка, по клику которой появляется дочернее привязанное к главному на 10 пикселей (к примеру). При перемещении двигаются оба.

Пример без привязки

Код:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>

Opt ('MustDeclareVars',		1)

Local $main, $child, $button, $action

$main = 			GUICreate ('Main GUI', 600, 500)
$button = 			GUICtrlCreateButton ('button', 20, 470, 70, 20)
					GUISetState (@SW_SHOW, $main)
					
$child = 			GUICreate ("Child GUI", 300, 250,-1,-1,-1,-1,$main)
					GUISetState (@SW_HIDE, $child)
	
While True
    $action = GUIGetMsg()
   
    Select
		Case $action = $GUI_EVENT_CLOSE
            Exit
        Case $action = $button
			GUISetState (@SW_SHOW, $child)
	EndSelect
		
WEnd


ps: где то видел апупенный пример этого всего дела на форуме, но поиск не помог, а буку затёр :(


Добавлено:
Сообщение автоматически объединено:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

Opt('GUIOnEventMode',       1)
Opt('MustDeclareVars',      1)

Global  $hParentWin, $hChildWin

_Example1()

While 1
    Sleep(10)
WEnd

Func _ProExit()
    Exit
EndFunc

Func _CloseWin()
    GUIDelete(@GUI_WinHandle)
EndFunc

Func _Example1()
    MsgBox(64, 'Пример 1', 'Обычное дочерное окно')

    $hParentWin = GUICreate('Родителськое окно')
        GUISetOnEvent($GUI_EVENT_CLOSE, '_Example2')

    $hChildWin = GUICreate('Дочерное окно', 300, 200, -1, -1, $WS_SYSMENU, -1, $hParentWin)
        GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseWin')

    GUISetState(@SW_SHOW, $hParentWin)
    GUISetState(@SW_SHOW, $hChildWin)
EndFunc

Func _Example2()
    GUIDelete($hParentWin)
    GUIDelete($hChildWin)
    MsgBox(64, 'Пример 2', 'Дочерное окно перемещается вместе с родительским окном')

    $hParentWin = GUICreate('Родителськое окно')
        GUISetOnEvent($GUI_EVENT_CLOSE, '_Example3')

    $hChildWin = GUICreate('Дочерное окно', 300, 200, -1, -1, $WS_SYSMENU, $WS_EX_MDICHILD, $hParentWin)
        GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseWin')

    GUISetState(@SW_SHOW, $hParentWin)
    GUISetState(@SW_SHOW, $hChildWin)
EndFunc

Func _Example3()
    GUIDelete($hParentWin)
    GUIDelete($hChildWin)
    MsgBox(64, 'Пример 3', 'Дочерное окно внутри родительского окна')

    $hParentWin = GUICreate('Родителськое окно')
        GUICtrlCreateLabel('', -100, -100, 0, 0)
        GUISetOnEvent($GUI_EVENT_CLOSE, '_ProExit')

    $hChildWin = GUICreate('Дочерное окно', 300, 200, 10, 10, $WS_SYSMENU)
        GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseWin')

    GUISetState(@SW_SHOW, $hParentWin)
    _WinAPI_SetParent($hChildWin, $hParentWin)
    GUISetState(@SW_SHOW, $hChildWin)
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
running-frag,
Попробуйте так.
Код:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>

$hMain = GUICreate('Main GUI', 600, 500)
$nButton = GUICtrlCreateButton('button', 20, 470, 70, 20)
GUISetState(@SW_SHOW, $hMain)
$hChild = GUICreate("Child GUI", 300, 250, (600 - 300) / 2, (500 - 250) / 2)
_WinAPI_SetParent($hChild, $hMain)
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			GUISetState(@SW_SHOW, $hChild)
	EndSwitch
WEnd
И еще: _MoveWindow() - Установка положения дочернего окна относительно родительского.
 
Верх