bien vu pour la méthode, mais le use case d'inclusion dans une GUI est plus facile que dans un contrôle de type tab :
l'astuce réside à déclarer l'handle de l'exe en tant qu'enfant du handle "windows" de la gui entière (cas de l'exemple) ou d'un contrôle (notre cas avec le tab)
Le soucis du tab, est qu l'handle windows couvre le tab entier, du coups tous les tabitems ont le même handle.
La grosse bidouille consiste alors à faire l'insertion du handle de l'exe 1 après la création du tabitem1, l'exe 2 après le tabitme2 ...
Et là, oh rage, oh désespoire, il va falloire jongler avec le masquage des différents exe en fonction du tabitem sélectionné, car on, perds la souplesse "automatique" gérée par autoit.
voici un exple en tabitem avec les contraintes suivante :
- le refresh des déplacement a des lacunes, faut recliquer sur les tabitem pour "bien" repeindre, surtout pour wordpad ...
- j'ai fait un décalage volontaire des gui venant des "exe" passé en maximize, car sinon on ne peut plus cliquer sur les tabitem (sauf en déplaçant les gui)
- effet de bords : quand j'appel "write" j'ai un crash d'extinction", d'où l'appel direct en chemin absolu à wordpad (sans doute dû au pid renvoyé qui doit être celui d'un wrapper et non celui de wordpad, mais bon, là on s'écarte) :
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
$pid_paint = Run("mspaint.exe")
$pid_word = Run("C:\Program Files\Windows NT\Accessoires\wordpad.exe")
Sleep(2000)
$GuiParent = GUICreate("Parent & Enfant", 650, 319, -1, -1, BitOR($WS_CLIPCHILDREN, $WS_SYSMENU))
$tabini = GUICtrlCreateTab(2, 2, 620, 250)
$tab = ControlGetHandle("Parent & Enfant", "", "[CLASS:SysTabControl32; INSTANCE:1]")
$tab0 = GUICtrlCreateTabItem("wordpad")
ConsoleWrite($tab0 & @CRLF)
$Enfant = WinGetHandle("Document - WordPad")
DllCall("user32.dll", "int", "SetParent", "hwnd", $Enfant, "hwnd", $tab)
WinSetState($Enfant, "", @SW_SHOWMAXIMIZED)
WinMove($Enfant,"",30,30)
$tab1 = GUICtrlCreateTabItem("paint")
$Enfant2 = WinGetHandle("Sans titre - Paint")
DllCall("user32.dll", "int", "SetParent", "hwnd", $Enfant2, "hwnd", $tab)
WinSetState($Enfant2, "", @SW_SHOWMAXIMIZED)
WinMove($Enfant2,"",30,30)
WinSetState($Enfant2, "", @SW_HIDE)
WinSetState($Enfant, "", @SW_SHOW)
GUISetState(@SW_SHOW)
$msg = 0
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $tabini
switch_screen($tabini)
Case Else
;
EndSelect
WEnd
ProcessClose($pid_word)
ProcessClose($pid_paint)
exit 0
Func switch_screen($id_tab)
Local $itemid=GUICtrlRead($id_tab)
if $itemid = 0 Then
WinSetState($Enfant2, "", @SW_HIDE)
WinSetState($Enfant, "", @SW_SHOW)
Else
WinSetState($Enfant, "", @SW_HIDE)
WinSetState($Enfant2, "", @SW_SHOW)
EndIf
EndFunc