Tengo un programa en C++ en el que uso una ventana de consola y otra de windows.
Estando en la de windows, en ocasiones necesito ver el contenido del texto de la consola que se encuentra normalmente tapada por otras o por la propia ventana, pero me gustaría que emergiera automáticamente por encima del resto de ventanas ante un determinado evento.
¿cómo puedo llevar la de consola al frente?, ¿alguien conoce alguna función o truco?
Usa FindWindow (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/findwindow.asp) para obtener el handle de tu ventana, y luego usa ShowWindow (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/showwindow.asp) para traerla al frente.
Se que no va mucho al tema, pero ya que estamos, como se crea/destruye la ventana de consola????
en los settings de visual hay un sitio donde pone subsystem:console o subsystem:windows pero creo que en modo windows tiene que haber un winmain en lugar de un main.
No me refiero iniciar el programa con/sin consola, sino como crearla y destruirla en ejecucion. O solo se puede iniciar el programa con consola, y oculta al iniciar, y mostrarla cuando se quiera?
Si. Necesitas crear la consola primero con AllocConsole() y destruirla con FreeConsole().
Google para mas info.
Bien, ya casi lo tengo.
Despues de romperme un poco el coco para ver de donde obtenía los parámetros que tenía que pasar a FindWindow he visto que con el nombre de la ventana era suficiente, pero he tenido que renombrarla al principio del programa.
SetConsoleTitle("Consola");
Despues obtengo el handle y muestro la ventana, pero hay un pequeño fallo.
HWND hwnd = FindWindow( NULL, "Consola" );
ShowWindow( hwnd, SW_SHOW );
La ventana no aparece en primer plano, sólo cuando uso SW_SHOWNA emerge, pero la ventana no queda activa. Esto también puede ser útil en ocasiones, pero lo raro es que no funcione SW_SHOW.
Puedes intentar activar la ventana con SetActiveWindow o SetForegroundWindow. No sé si te servirán pero ahí queda : P
Sí, usando despues SetForegroundWindow funciona. Lo dejaré así.