2009-12-20 31 views
6

¿Cuál es la mejor manera de dibujar cosas en la ventana de la consola en la plataforma Win 32 usando C++?¿Dibujando en una consola Win32 en C++?

Sé que se puede dibujar arte simple usando símbolos, pero ¿hay alguna manera de hacer algo más complejo como círculos o incluso mapas de bits?

+4

No, no lo hay. –

+0

Neil: ¿La consola de Windows no es compatible con la programación de gráficos VGA de estilo antiguo? Solía ​​tener esto en los 9 días para ejecutar viejos programas en modo gráfico de DOS ... pero tal vez finalmente dejaron de apoyarlos. – itowlson

+0

heh, recuerdo escribir programas en turbo pascal. tenías que conseguir un controlador para mostrar gráficos. Incluso traté de escribir mi propio sistema de ventanas. Desafortunadamente fallé :( –

Respuesta

10

No, no puedes hacer eso simplemente porque la consola Win32 no admite esos métodos. Sin embargo, puede usar GDI para dibujar en la ventana de la consola.

Este es un gran ejemplo de dibujar un mapa de bits en una consola mediante la creación de una ventana secundaria en él: http://www.daniweb.com/code/snippet216431.html

Y esto le indica cómo dibujar líneas y círculos:
http://www.daniweb.com/code/snippet216430.html

Sin embargo, esto no está realmente dibujando en la consola. Esto es una especie de dibujo "sobre" la consola, pero todavía funciona bastante bien.

0
No

sin arte usng ASCII. En los días de DOS, era "bastante" fácil de hacer rediseñando los mapas de bits de los personajes. Puede que solo sea posible en Windows creando tu propia fuente, pero realmente no estoy seguro de que sea posible

+0

¿cómo hicieron esos viejos juegos de DOS en la consola? –

+1

Eso no es la "consola". Hay un cambio del modo de texto al modo de gráficos ... – Goz

+0

La consola en ese momento no era la misma que ahora. –

2

Tal vez usted está hablando de programas de DOS, utilizando VGA mode. Una búsqueda rápida en Google muestra un C tutorial.

+0

es posible con VC++ ? No quiero acostumbrarme a un nuevo IDE. Error –

2

Como Nick Brooks ha señalado, puede utilizar llamadas GDI en aplicaciones de consola, pero los gráficos no pueden aparecer en la misma ventana que la consola de texto de E/S. Esto puede no importar ya que puede dibujar elementos de texto en GDI.

WinBGIm proporciona una interfaz simplificada para llamadas GDI en aplicaciones de consola. Es un clon de la API BGI de DOS de Borland, pero con extensiones para manejar ventanas redimensionables, entrada de mouse y modelos de color de 24 bits. Como está disponible como código fuente, también sirve para una buena demostración del uso de GDI de esta manera.

Es posible tener tanto una consola como la ventana GDI, o puede suprimir la ventana de la consola especificando que la aplicación es una GUI (la opción -mwindows linker en GNU toolchain) - tenga en cuenta que se especifica una GUI la aplicación realmente solo suprime la consola, solo es realmente una aplicación GUI si tiene un bucle de mensaje. Tener la consola es buena para la depuración, ya que es donde se envían stdout y stderr por defecto.

3

Es posible, aunque no esté documentado, crear un búfer de pantalla de consola que utiliza un HBITMAP que se comparte entre el proceso de la ventana de consola y el proceso de llamada. Este es el enfoque que NTVDM toma para mostrar gráficos una vez que una aplicación de DOS cambia al modo de gráficos.

See it.

12
#include <windows.h> 
#include <iostream.h> 


int main() 
{ 
    // Get window handle to console, and device context 
    HWND console_handle = GetConsoleWindow(); 
    HDC device_context = GetDC(console_handle); 

    //Here's a 5 pixels wide RED line [from initial 0,0] to 300,300 
    HPEN pen =CreatePen(PS_SOLID,5,RGB(255,0,0)); 
    SelectObject(device_context,pen); 
    LineTo(device_context,300, 300); 


    ReleaseDC(console_handle, device_context); 
    cin.ignore(); 
    return 0; 
} 
+0

: 'GetConsoleWindow' no se declaró en este ámbito – Milad

Cuestiones relacionadas