2009-12-20 21 views
6

Qual è il modo migliore per disegnare le cose nella finestra della console sulla piattaforma Win 32 utilizzando C++?Disegno in una console Win32 su C++?

So che è possibile disegnare l'arte semplice usando i simboli ma esiste un modo per fare qualcosa di più complesso come cerchi o anche bitmap?

+4

No, non c'è. –

+0

Neil: la console di Windows non supporta la programmazione grafica VGA old-skool? Era solito avere questo nei 9 giorni per eseguire vecchi programmi in modalità grafica DOS ... ma forse alla fine hanno rinunciato a supportarli? – itowlson

+0

heh, ricordo di aver scritto programmi in turbo pascal. dovevi avere un autista per mostrare la grafica. Ho anche provato a scrivere il mio sistema di finestre. sfortunatamente ho fallito :( –

risposta

10

No, non è possibile farlo perché la console Win32 non supporta questi metodi. È tuttavia possibile utilizzare GDI per disegnare sulla finestra della console.

Questo è un grande esempio di disegnare una bitmap su una console con la creazione di una finestra figlio su di esso: http://www.daniweb.com/code/snippet216431.html

E questo ti dice come disegnare linee e cerchi:
http://www.daniweb.com/code/snippet216430.html

Questo però non sta davvero disegnando nella console. Questa è una sorta di disegno "sopra" la console, ma fa ancora abbastanza bene il trucco.

0

Non senza usanza ASCII art. Ai tempi di DOS era "abbastanza" facile da fare ridisegnando le bitmap dei caratteri. Potrebbe essere possibile solo in Windows creando il proprio carattere, ma non sono proprio sicuro che sia possibile

+0

allora come hanno fatto quei vecchi giochi DOS in console? –

+1

Questa non è la "console". C'è un passaggio dalla modalità testo alla modalità grafica ... – Goz

+0

La console di allora non era la stessa console di adesso. –

2

Forse si sta parlando di programmi DOS, utilizzando VGA mode. Una rapida ricerca su google mostra uno C tutorial.

+0

è possibile con VC++ ? non voglio abituarmi a un nuovo IDE. Errore –

2

Come ha sottolineato Nick Brooks, è possibile utilizzare le chiamate GDI nelle app della console, ma la grafica non può apparire nella stessa finestra dell'I/O della console di testo. Ciò potrebbe non avere importanza dal momento che è possibile disegnare elementi di testo in GDI.

Un'interfaccia semplificata per le chiamate GDI nelle app console è fornita da WinBGIm. È un clone dell'API DOS BGI di Borland, ma con estensioni per gestire finestre ridimensionabili, input del mouse e modelli a 24 bit. Poiché è disponibile come codice sorgente, offre anche una buona dimostrazione dell'uso di GDI in questo modo.

E 'possibile avere sia una console che la finestra GDI, oppure è possibile sopprimere la finestra della console specificando che l'applicazione è una GUI (l'opzione -mwindows linker in GNU toolchain) - nota che specificare una GUI l'app in realtà sopprime solo la console, è solo un'app GUI se ha un loop di messaggi. Avere la console è buono per il debug, dal momento che è dove output stdout e stderr vengono generati per impostazione predefinita.

3

È possibile, anche se totalmente non documentato, creare un buffer di schermo della console che utilizza uno HBITMAP condiviso tra il processo della finestra della console e il processo chiamante. Questo è l'approccio che NTVDM utilizza per visualizzare la grafica quando un'applicazione DOS passa alla modalità grafica.

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" non è stato dichiarato in questo ambito – Milad