MDI (multiples ventanas). Win hijas: consola,paint,notepad.

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

MDI (multiples ventanas). Win hijas: consola,paint,notepad.

Mensaje por Chefito »

Respondiendo a una cuestión del compañero xapu puesta en el post http://www.emesn.com/autoitforum/viewto ... 1874#p6786, he decido contestar en otro post independiente ya que veo que es un tema interesente, que no tiene que ver nada con el tema donde realizó la pregunta, y que además no debe estar en ese subforo ya que veo que es un poco complicado para el foro de "Preguntas sencillas". Aquí va mi respuesta a su post:

En AutoIt se puede hacer casi de todo :smt003 .
xapu escribió:y si por ejemplo quisiera meter la ventana del cmd dentro de un formulario? se podria?
i si puedes.. como seria XD
Mmmmm......interesante pregunta. Me ha hecho pensar un poco esto y me he animado para intentar hacerlo :smt005 .
AutoIt tiene una propiedad para hacer MDI ($WS_EX_MDICHILD), pero como bien dice AutoIt, es una simulación no real de esta situación. Esto no me gusta.
Solución....utilizar alguna que otra api de win, como siempre :smt003 .
Con el código que he puesto, no solo he metido una ventana consola, sino que también he metido un paint y un notepad :smt005 . Con esto queda demostrado que autoit puede manejar ventanas MDI :smt023 .
Espero que os guste.

Código: Seleccionar todo

;Ejemplo MDI con tres ventanas hijas (consola, paint, notepad) por chefito ;).

#include <WindowsConstants.au3>
#Include <WinAPI.au3>
;#include <Constants.au3>
#include <GUIConstantsEx.au3>
$gui = GUICreate("Ventana padre",700,600,100,100)	;creo la ventana padre.
GUISetBkColor(100)	;color azul de fondo.
;cargo los tres programas ocultos (consola, paint, notepad).
$pidCmd=Run(@ComSpec , "",@SW_HIDE)
$pidPaint=Run("mspaint.exe", "",@SW_HIDE)
$pidNotepad=Run("notepad.exe", "",@SW_HIDE)
;no sale de este bucle hasta que me de el handle de las tres ventanas.
Do
	Sleep(50)
	$hCmd=WinGetHandle("[CLASS:ConsoleWindowClass]")
	$hPaint=WinGetHandle("[CLASS:MSPaintApp]")
	$hNotepad=WinGetHandle("[CLASS:Notepad]")
Until ($hCmd And $hPaint And $hnotepad)<>0
;hago estas tres ventanas hijas de la ventana principal $gui, la cual es su padre.
_WinAPI_SetParent($hCmd,$gui)
_WinAPI_SetParent($hPaint,$gui)
_WinAPI_SetParent($hNotepad,$gui)
;posiciono las tres ventanas dentro de la ventana padre.
WinMove($hCmd,"",0,0)
WinMove($hPaint,"",100,100)
WinMove($hNotepad,"",200,300)
;muestro las tres ventanas hijas.
WinSetState($hCmd,"",@SW_SHOW)
WinSetState($hPaint,"",@SW_SHOW)
WinSetState($hNotepad,"",@SW_SHOW)
;capturo los eventos cuando se tiene que repintar la ventana.
GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")
GUISetState(@SW_SHOW)

while 1
	Sleep(10)
	$msg=GUIGetMsg()
	If $msg= -3 Then
		Switch $msg
			Case -3		;cuando cierro la ventana padre, escondo la ventana padre, destruyo las hijas y salgo del programa.
				GUISetState(@SW_HIDE)
				WinKill($hCmd)
				WinKill($hPaint)
				WinKill($hNotepad)
				Exit
		EndSwitch
	EndIf
WEnd
Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)
	;redibujo las ventanas hijas.
	_WinAPI_RedrawWindow($hCmd,0,0,BitOR($RDW_ERASE,$RDW_INVALIDATE,$RDW_UPDATENOW,$RDW_FRAME,$RDW_ALLCHILDREN))
	_WinAPI_RedrawWindow($hPaint,0,0,BitOR($RDW_ERASE,$RDW_INVALIDATE,$RDW_UPDATENOW,$RDW_FRAME,$RDW_ALLCHILDREN))
	_WinAPI_RedrawWindow($hNotepad,0,0,BitOR($RDW_ERASE,$RDW_INVALIDATE,$RDW_UPDATENOW,$RDW_FRAME,$RDW_ALLCHILDREN))
    Return $GUI_RUNDEFMSG
EndFunc
Saludos :smt026 .
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
gna08
Hacker del Foro
Mensajes: 379
Registrado: 27 Sep 2008, 18:51
Ubicación: Cordoba, Argentina

Re: MDI (multiples ventanas). Win hijas: consola,paint,notepad.

Mensaje por gna08 »

mmmmmmmm :smt003 :smt003 verdaderamente interesante.. me trae varias ideas... :smt026 jojo, k divertido.. gracias por el aporte :smt023 :smt023 :smt023
Aunk no m Buskes, Seguro m enkontras!
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: MDI (multiples ventanas). Win hijas: consola,paint,notepad.

Mensaje por Ximorro »

¡ANDA YA! ¡MUY BUENO!

No sabía que podías crear un MDI de cualquier programa, muy interesante.

¿El hecho de tener esos programas como hijos nos da algún control especial?
Como evidente la gestión de ventanas, se maximiza a la nuestra, se minimiza dentro de la nuestra, etc..., la pregunta es ¿se puede hacer algo más con ellas que no se pueda hacer si son independientes?
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: MDI (multiples ventanas). Win hijas: consola,paint,notepad.

Mensaje por Chefito »

Limitación?? Pues no se. Supongo que ninguna. Es como una ventana normal, pero en vez de mostrada en los límites del escritorio (recuerda que es como una ventana especial....tiene su handle), pues se muestra en los de una ventana la cual le has dicho que es su padre :smt002 .
Respecto a si se puede hacer algo más con ellas....supongo que lo mismo :smt001 . Lo único que hay que recordar es que estas ventanas son hijas (children) de una ventana padre. Tienen esa propiedad. Lo digo por si quereis enumerarlas, minimizarlas, maximizarlas, cerrarlas, posicionarlas, redimensionarlas, etc etc.

Aunque si os poneis a pensar un poco, es totalmente innecesario tratar de buscar estas ventanas para interactuar con ellas, ya que sabemos sus handles no? :smt005 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
XPyro
Profesional del Autoit
Mensajes: 542
Registrado: 04 Mar 2007, 10:12
Ubicación: México
Contactar:

Re: MDI (multiples ventanas). Win hijas: consola,paint,notepad.

Mensaje por XPyro »

Buen Script Chefito felicidades, siempre se aprenden cosas nuevas :smt003
Imagen
Avatar de Usuario
Nahuel
Hacker del Foro
Mensajes: 194
Registrado: 27 Jun 2007, 23:32
Ubicación: Argentina
Contactar:

Re: MDI (multiples ventanas). Win hijas: consola,paint,notepad.

Mensaje por Nahuel »

Genial, muy útil! :smt024
No soy un hombre de plegarias, pero si estás en el cielo sálvame por favor Superman!
Avatar de Usuario
Rupert.25
Hacker del Foro
Mensajes: 247
Registrado: 17 Jul 2007, 18:27

Re: MDI (multiples ventanas). Win hijas: consola,paint,notepad.

Mensaje por Rupert.25 »

Muy buen ejemplo, se me ocurren varias cosas interesantes....

A ver que tranza hacemos :D


Gracias por el ejemplo!
Responder