Что нового

[Элементы GUI] Работа с двумя и более окнами в одном приложении.

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
К сожалению не получается разобраться как работать с такой темой.
Например есть окно:
Код:
$Form2 = GUICreate("Окно 1", 322, 94, 243, 563)
$Button1 = GUICtrlCreateButton("Кнопка 1", 8, 8, 89, 25)
$Button2 = GUICtrlCreateButton("Кнопка 2", 104, 8, 89, 25)
$Button3 = GUICtrlCreateButton("Опции", 200, 8, 113, 25)
$Input1 = GUICtrlCreateInput("", 8, 40, 305, 21)
GUISetState(@SW_SHOW)

И окно 2 - Опции:
Код:
$Form3 = GUICreate("Опции", 251, 75, 627, 657)
$Label1 = GUICtrlCreateLabel("Опция 1:", 8, 8, 48, 17)
$Label2 = GUICtrlCreateLabel("Опция 2:", 8, 40, 48, 17)
$Input1 = GUICtrlCreateInput("", 56, 8, 105, 21)
$Input2 = GUICtrlCreateInput("", 56, 40, 105, 21)
$Button1 = GUICtrlCreateButton("ОК", 168, 8, 65, 57)
GUISetState(@SW_SHOW)

Как их увязать в одном приложении, что бы по нажатии $Button3 появлялось окно Опций? И что бы при запуске программы сразу не появлилсь опции? Но это, как я понимаю просто GUISetState(@SW_HIDE)?
 

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
98
Репутация
38
Да, делаешь при старте GUISetState(@SW_HIDE,$Form3), а при нажатии на кнопку $Button3 GUISetState(@SW_SHOW,$Form3)
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Вот нашёл у себя чейто пример:
Код:
#include <GUIConstants.au3> 
#include <ButtonConstants.au3>
#include <WindowsConstants.au3> 
;Global Const $WM_MOVE = 0x0003 
$Form1 = GUICreate("Main", 193, 106) 
$Button1 = GUICtrlCreateButton("About", 8, 64, 94, 21, $BS_BITMAP) 
 $Form1pos = WinGetPos($Form1)
$Form2 = GUICreate("About", 193, 106, $Form1pos[0],$Form1pos[1]+140, BitOR($WS_SYSMENU,$WS_CAPTION, $WS_POPUP), $WS_EX_TOOLWINDOW, $Form1)
 GUICtrlCreateLabel ("Диалог о программе"&@CRLF&"Версия 1.0",5, 5, 185, 25)
GUISetState(@SW_SHOW, $Form1) 
 
GUIRegisterMsg($WM_MOVE, "WM_MOVE") 
 
While 1
$msg = GUIGetMsg(1); получаем массив информации
	Select
		Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $Form1 ; если закрытие и от основного окна
            Exit
		Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $Form2
             	GUISetState(@SW_HIDE, $Form2)		
        Case $msg[0] = $Button1 
            If Not BitAND(WinGetState($Form2), 2) Then  
                GUISetState(@SW_SHOW, $Form2) 
            Else 
                GUISetState(@SW_HIDE, $Form2)
            EndIf 
    EndSelect 
WEnd 
 
Func WM_MOVE($hWndGUI, $MsgID, $WParam, $LParam) 
    If $hWndGUI = $Form1 Then 
        $aParent_Pos = WinGetPos($Form1) 
        WinMove($Form2, "", $aParent_Pos[0], $aParent_Pos[1]+140) 
    Else 
    EndIf 
EndFunc
 

HukpoFuJl

AццkuЙ HukpoFuJl
Сообщения
98
Репутация
38
Да, и желательно при работе с несколькими окнами, при указании GUISetState указывать хэндл окна к которому это применяется... тогда не будет неожиданных казусов ;)


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

Вот тебе твои два окна:

Код:
$Form2 = GUICreate("Окно 1", 322, 94, 243, 563)
$Button1 = GUICtrlCreateButton("Кнопка 1", 8, 8, 89, 25)
$Button2 = GUICtrlCreateButton("Кнопка 2", 104, 8, 89, 25)
$Button3 = GUICtrlCreateButton("Опции", 200, 8, 113, 25)
$Input1 = GUICtrlCreateInput("", 8, 40, 305, 21)
GUISetState(@SW_SHOW,$Form2)

$Form3 = GUICreate("Опции", 251, 75, 627, 657, -1, -1, $Form2)
$Label1 = GUICtrlCreateLabel("Опция 1:", 8, 8, 48, 17)
$Label2 = GUICtrlCreateLabel("Опция 2:", 8, 40, 48, 17)
$Input1 = GUICtrlCreateInput("", 56, 8, 105, 21)
$Input2 = GUICtrlCreateInput("", 56, 40, 105, 21)
$Button1 = GUICtrlCreateButton("ОК", 168, 8, 65, 57)
GUISetState(@SW_HIDE,$Form3)

While 1
   $msg = GUIGetMsg(1)
   Select
        Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $Form2
            Exit
        Case $msg[0] = $GUI_EVENT_CLOSE And $msg[1] = $Form3
                GUISetState(@SW_HIDE, $Form3)       
        Case $msg[0] = $Button3 
                GUISetState(@SW_SHOW, $Form3) 
    EndSelect 
WEnd

Поправил код, спасибо kosjachok.
 
Верх