2009-10-21 36 views
6

Tengo una aplicación de consola de Windows escrita en C++ y quiero ocultar/eliminar la barra de título completa de la ventana de la consola, incluidos los controles de cierre, mínimo/máximo, etc. Busqué mucho pero no encontré nada útil todavía.Aplicación de consola C++, ocultando la barra de título

indago el HWND consola con GetConsoleWindow y trataron de cambiar el estilo de la ventana de la consola con SetWindowLong mediante la eliminación de la bandera WS_CAPTION, pero esto parece no tener ningún efecto en absoluto:

HWND hwnd = GetConsoleWindow(); 
LONG style = GetWindowLong(hwnd, GWL_STYLE); 
style &= ~(WS_BORDER|WS_CAPTION|WS_THICKFRAME); 
SetWindowLong(hwnd, GWL_STYLE, style); 

SetWindowPos(hwnd, NULL, 0,0,0,0, 
     SWP_NOSIZE|SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE 
     |SWP_FRAMECHANGED); 

También probé GetSystemMenu/RemoveMenu pero esto parece solo desactivar controles como el botón de cerrar.

+0

Interesante pregunta, ¿por qué necesita ocultar la barra de título? –

+3

Realmente no. Se trata simplemente de hacer que el programa se vea "mejor" al mostrar algo diferente a la consola predeterminada, que todos ya han visto miles de veces. – asdrubael

Respuesta

5

No puede. En general, no se garantiza que el hWnd de una ventana de consola sea adecuado para todas las operaciones del manejador de ventana como, por ejemplo, here documentado.

+0

Ok esto es bueno saberlo, así que me olvidaré de esto y probaré con un símbolo del sistema alternativo o lo dejaré como está. – asdrubael

0

Creo que escribiría/usaría dos programas. Un programa de consola haciendo el trabajo y un segundo programa siendo una ventana de consola controlable ejecutando el primero. Probablemente ya existan programas de consola existentes y algunos se puedan iniciar sin barra de título. O encuentre uno de código abierto y modifíquelo.

+0

Sí, esta sería una opción, para reemplazar el cmd.exe con algo así como "Consola": http://sourceforge.net/projects/console/ – asdrubael

2

Puede intentar una solución compleja que incluya ocultando la ventana de la consola (esto es posible), y luego configure una ventana (sin los controles) que reenvíe sucesos apropiados desde la ventana de la consola real. En particular, los eventos GDI dibujan los contenidos de la ventana de la consola en la ventana de la consola falsa e interactúan con la barra de desplazamiento (que a su vez ajusta la consola ...).

Esta solución está bastante lejos, y es bastante técnica.

0

Puede usar SetWindowLongPtr(hWnd, GWL_STYLE, WS_POPUP);, que eliminará la leyenda/barra de título y los bordes.
Advertencia: Esto presenta algunas fallas técnicas que no sé cómo solucionar (supongo que son en la memoria caché?), Pero al menos produce el efecto que desea.

Cuestiones relacionadas