He visto aplicaciones de Windows que funcionan tanto con una ventana como con una consola. Me pregunto sobre esto de vez en cuando y recuerdo que cada vez que lo investigo nunca encuentro una solución.

¿Hay alguna forma de programar mi aplicación WinApi C ++ de manera que pueda enviar a la consola como lo haría normalmente cuando estoy bajo la opción de enlazador SUBSYSTEM:CONSOLE? En otras palabras, puedo tener una ventana abierta, con mi WinMain y WndProc, etc. pero también me gustaría hacer std::cout, std::cin y std::wcout. Un buen caso de uso para eso sería usar la consola para registrar cosas y la ventana como la aplicación principal.

¿Sería una buena idea usar std::system() en su lugar y lanzar cmd desde eso y luego generar? No lo creo, pero por supuesto que no lo sé.

Windows 8.1, x86_64, MSVS 2017.

0
KeyC0de 17 oct. 2018 a las 04:41

2 respuestas

La mejor respuesta

Use AttachConsole para adjuntar a una consola existente, o AllocConsole para crear una nueva consola. Luego, redirija cin / cout a esa consola según sea necesario (según los requisitos de la implementación de tiempo de ejecución particular de su compilador). O simplemente use ReadConsole / WriteConsole en su lugar.

3
Remy Lebeau 17 oct. 2018 a las 02:33

Sí, configure el subsistema en WINDOWS y / ENTRY (punto de entrada) en WinMainCRTStartup (o wWinMainCRTStartup si está usando Unicode). Incluso puede configurarlo solo para la configuración de depuración, por lo que la consola no aparecerá para la versión.

0
Michael Loda 17 oct. 2018 a las 01:56