Must AutoIt
Сообщения: 3054
Благодарности: 1009
|
Профиль
|
Сайт
|
Отправить PM
| Цитировать
Diamond,
Цитата:
хотелось бы увидеть как работает MDI
|
Вот так (изменённый пример с оф. форума):
Код: 
#include <GuiConstants.au3>
Global $gui[100000]
$x = 1
$Mother_GUI = GUICreate("Thinking box",-1,-1,-1,-1,BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
$Button_1 = GUICtrlCreateButton("New Box", 5, 5, 70, 20)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
$Button_2 = GUICtrlCreateButton("Delete Box",5,30,70,20)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
$Input_1 = GUICtrlCreateInput("1",5,60,70,20)
GUICtrlSetResizing(-1,$GUI_DOCKALL)
GUISetState(@SW_SHOW, $Mother_GUI)
$Main_GUI = GUICreate("",220,300,80,5,$WS_POPUPWINDOW)
GUISetBkColor(0xCCCCCC)
DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle($Main_GUI), "hwnd", WinGetHandle($Mother_GUI))
$LeftCounter = 0
$TopPlus = 20
Makebox()
GUISetState(@SW_SHOW,$Main_GUI)
While 1
setsize()
$msg = GUIGetMsg()
if $msg = $GUI_EVENT_CLOSE then Exit
if $msg = $Button_1 then Makebox()
if $msg = $Button_2 then GUIDelete($Gui[GUICtrlRead($Input_1)])
sleep(10)
WEnd
Func Makebox()
if $x < 100000 then
$Mother_GUI_Pos_Arr = WinGetPos($Mother_GUI)
$LeftCounter += 1
If 250+$LeftCounter*5 > $Mother_GUI_Pos_Arr[2] Then
$LeftCounter = 1
$TopPlus -= 20
If $TopPlus < 0 Then $TopPlus = 60
EndIf
$Left = 40+$LeftCounter*5
$Top = $TopPlus+$LeftCounter*5
$gui[$x] = GUICreate("", 200, 90, $Left, $Top, $WS_POPUPWINDOW, $WS_EX_TOOLWINDOW)
$label = GUICtrlCreateLabel(" Box number: " & $x,0,0,200,20,-1,$GUI_WS_EX_PARENTDRAG)
GUICtrlSetFont(-1,12,14,0,"Comic Sans MS")
settopbarcolor()
GUICtrlCreateEdit("",0,20,200,70,$WS_VSCROLL)
DllCall("user32.dll", "int", "SetParent", "hwnd", WinGetHandle($Gui[$x]), "hwnd", WinGetHandle($Main_GUI))
GUISetState(@SW_SHOW,$gui[$x])
$x += 1
EndIf
EndFunc
Func settopbarcolor($s_control=-1)
$Random = Random(1,6,1)
if $Random = 1 Then
GUICtrlSetBkColor($s_control,0x0000FF)
elseif $Random = 2 Then
GUICtrlSetBkColor($s_control,0x00FF00)
elseif $Random = 3 then
GUICtrlSetBkColor($s_control,0xFF0000)
elseif $Random = 4 then
GUICtrlSetBkColor($s_control,0x00FFFF)
elseif $Random = 5 then
GUICtrlSetBkColor($s_control,0xFF00FF)
elseif $Random = 6 Then
GUICtrlSetBkColor($s_control,0xFFFF00)
EndIf
EndFunc
Func setsize()
$Motherpos = WinGetPos($Mother_GUI)
$Mainpos = WinGetPos($Main_GUI)
if $Mainpos[2] <> $Motherpos[2]-98 or $Mainpos[3] <> $Motherpos[3]-40 then WinMove($Main_GUI,"",85,5,$Motherpos[2]-98,$Motherpos[3]-45)
EndFunc
Func SpecialEvents()
Select
Case @GUI_CTRLID = $GUI_EVENT_CLOSE
Exit
EndSelect
EndFunc
То что ты задумал, имхо, не имеет отношения к MDI - Multiple document interface.
И стиль $WS_EX_MDICHILD не совсем делает нужный “эффект”:
Цитата Справка по AutoIT:
Create a child window included in its parent window (simulation not real MDI).
|
Вот ещё примерчик MDI:
Код: 
#include <GuiConstants.au3>
$MainGui = GuiCreate("Main", 485, 280)
$Child_1_Gui = GuiCreate("Child 1", 150, 100, 5, 5)
$Child_2_Gui = GuiCreate("Child 2", 150, 100, 165, 5)
$Child_3_Gui = GuiCreate("Child 3", 150, 100, 325, 5)
$Child_4_Gui = GuiCreate("Child 4", 150, 100, 5, 135)
$Child_5_Gui = GuiCreate("Child 5", 150, 100, 165, 135)
$Child_6_Gui = GuiCreate("Child 6", 150, 100, 325, 135)
GUISetState(@SW_SHOW, $MainGui)
DllCall("user32.dll", "int", "SetParent", "hwnd", $Child_1_Gui, "hwnd", $MainGui)
GUISetState(@SW_SHOW, $Child_1_Gui)
DllCall("user32.dll", "int", "SetParent", "hwnd", $Child_2_Gui, "hwnd", $MainGui)
GUISetState(@SW_SHOW, $Child_2_Gui)
DllCall("user32.dll", "int", "SetParent", "hwnd", $Child_3_Gui, "hwnd", $MainGui)
GUISetState(@SW_SHOW, $Child_3_Gui)
DllCall("user32.dll", "int", "SetParent", "hwnd", $Child_4_Gui, "hwnd", $MainGui)
GUISetState(@SW_SHOW, $Child_4_Gui)
DllCall("user32.dll", "int", "SetParent", "hwnd", $Child_5_Gui, "hwnd", $MainGui)
GUISetState(@SW_SHOW, $Child_5_Gui)
DllCall("user32.dll", "int", "SetParent", "hwnd", $Child_6_Gui, "hwnd", $MainGui)
GUISetState(@SW_SHOW, $Child_6_Gui)
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case -3
Exit
Case Else
EndSwitch
WEnd
Цитата:
как на самом деле правильно.
|
Смотря что тебе требуется, если нужно создать устновщик используя стиль с Next/Back кнопками, тогда как я и упоминал ранее, нужно в начале построения ГУИ создать ВСЕ контроли (кнопки, лейблы, инпуты и т.д  ), спрятать их ( GuiCtrlSetState($ID, $GUI_HIDE)), потом на первой стадии показать нужные ( $GUI_SHOW); или просто не прятать их изначально  , и при нажатии Next/Back прятать предыдущие (можно сделать счётчик нажатии кнопок вперёд/назад) и показывать нужные для следующего этапа.
|