Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Creat0R

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 прятать предыдущие (можно сделать счётчик нажатии кнопок вперёд/назад) и показывать нужные для следующего этапа.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:50, 11-08-2007 | #286