# Grafiken / Zeichnen in der Konsole



## Prophet05 (1. März 2005)

Also ich benutzte den DevC++ 4 Compiler und ich würde gerne in einer meiner Anwendungen zeichnen. Solche sachen wie Linien und Kreise oder einfach nur einzelne Pixel einfärben. Die Funktionen könnte ich mir auch selbst Schreiben aber ich kriege es nicht hin auf einzelne Pixel zuzugreifen und diese Einzufärben.

 Ich weiß die einfachste lösung wäre es einfach eine Windows Anwendung zu schreiben habe ich auch schon gemacht, aber es muss doch auch auf DOS-Ebene gehen.


----------



## Tobias K. (1. März 2005)

moin


Das ist ganz einfach.
Du holst dir das Handle deines Dosfensters, erstllest nen passenden DC und schon kanns losgehen.


mfg
umbrasaxum


----------



## Tobias K. (1. März 2005)

moin


Naja ich war dann doch so frei dir mal ein Beispiel zu schreiben.

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

void main(void)
{

	SetConsoleTitle("Zeichnen in Dos");
	HWND hWnd = FindWindow(NULL, "Zeichnen in Dos");
	
	HDC hDC = GetDC(hWnd);
	{
		//Pixel setzen
		SetPixel(hDC, 10, 10, RGB(255,255,255));
	}
	ReleaseDC(hWnd, hDC);
	DeleteDC(hDC);

	std::cin.get();
}
```

Ansonsten benutz die Suchfunktion solche Sachen wurden hier schon ein paar mal behandelt! Auch wie man Bilder in die Konsole packt.


mfg
umbrasaxum


----------



## Prophet05 (1. März 2005)

Danke ich habe den Quelltext zwar nur zur hälfte Verstanden aber ich fummel mir dasschon zurecht.


----------



## Prophet05 (1. März 2005)

Hi,

   Ich habe dein beispiel mal getestet aber gibt mir diese Fehelrmeldung aus:

  Compiler and Linker output error:
   C:\DOKUME~1\LOKALE~1\Temp\ccAZbaaa.o(.text+0x64):untitl~1.cpp: undefined reference to `SetPixel@16'
   C:\DOKUME~1\LOKALE~1\Temp\ccAZbaaa.o(.text+0x83):untitl~1.cpp: undefined reference to `DeleteDC@4'

   Da ich es sowieso nicht ganz verstanden habe. Wusste ich natürlich auch nicht wie ich den Fehelr beheben kann.

   mfg
   Prophet05


----------



## Tobias K. (1. März 2005)

moin


Da muss der jemand helfen der auch DEV C nutzt, es wird ne lib nicht eingebunden sein die benötigt wird.


mfg
umbrasaxum


----------



## Daniel Toplak (1. März 2005)

Dazu must du die libgdi32.a mit dazulinken:
Unter Projektoptionen->Parameter->Linker wählst du aus dem lib Verzeichnis von DevCpp einfach die o.g. lib aus.

Daniel


----------



## Daniel Toplak (1. März 2005)

Achja man kann sich das mit dem FindWindow sparen, denn mit GetConsoleWindow () kann man sofort den HWND des zugehörigen Konsolenfensters erhalten.

Daniel


----------



## Tobias K. (1. März 2005)

moin


Man kann Libarys auch mit:

```
#pragma comment(lib, "name.lib")
```
einbinden.


mfg
umbrasaxum


----------



## Daniel Toplak (2. März 2005)

Vorsicht!
#pragma ist compilerabhänig.
Die Pragmas funktionieren nicht überall.

Daniel


----------



## Prophet05 (2. März 2005)

Hi,

 also ich verstehe das nicht habe beide Varianten getestet und alles was er mir in der Error Liste für den Linker ausgibt ist das hier:

  g++: C:\Programme\Dev-C++: No such file or directory
  g++: 4\Lib\libgdi32.a: No such file or directory
  g++: file path prefix `C:\PROGRA~1\DEV-C_~1\Bin\' never used

 Ich habe auch nachgeguckt ob die Lib vorhanden ist und ob der Dateipfad stimmt. Beides richtig. Hat einer eine ahnung warum er nun mekert.

 Ausserdem habe ich gehört das das Zeichenen auf diese Weise nur im Konsolenfenster von Windows funktioniert. Stimmt das oder funktioniert es auch im richtigen DOS?

 mfg Prophet05


----------



## Endurion (2. März 2005)

Sieht aus, als hätte DevC Probleme mit Spaces im Datei/Verzeichnisnamen.


----------



## Prophet05 (2. März 2005)

was willst du damit sagen?


----------



## Tobias K. (2. März 2005)

moin


Zeig mal deinen #pragma Aufruf.


mfg
umbrasaxum


----------



## Prophet05 (2. März 2005)

Hi, 
 also ich habe geschrieben:
 #pragma comment(lib, "libgdi32.a") und dann kam die o.g. fehlermeldung.

 mfg Prophet05


----------



## Daniel Toplak (2. März 2005)

Wie Endurion schon sagte, das mit den Leerzeichen ist nicht gut. Versuch mal den Library-Pfad mit " Anführungszeichen zu quoten. 
Oder installiert Dev-Cpp in einen anderen Pfad.

Daniel


----------



## MetallDragon (5. März 2005)

Also abgesehen davon fehlt hinter den Headereinbindungen (Zeile 1 und 2) afaik noch ein
_using namespace std;_
Da du ja nicht iostream.h einbindest sondern nur iostream.


----------



## Aylon (5. März 2005)

Wenn ich das jetzt ncith falsch überblickt hab wird hier der namespace std nur fuer den cin.get befehl genuttz und da umbrasaxum ja geschrieben hat std::cin.get(); ist das eigetnlich kein problem. Außer das man vielleicht ein  int main()   raus machen sollte


----------



## Tobias K. (5. März 2005)

moin


@MetallDragon
Nein das hab ich richtig gemacht!

Wie Aylon schon sagte braucht man das nur wenn man Funktionen aus der iostream nutzt. Da ich aber nur die eine Funktion benutzt hab, habe ich bei der einen den genauen Bereich angegeben.


mfg
umbrasaxum


----------



## MetallDragon (5. März 2005)

Stimmt jetztt wo du's sagst. Ist ne schreibweise, die ich nie verwende, bzw bisher auch noch gar nicht gekannt habe, aber wenns keinen Fehler gibt wird das ja auch so gehen.


----------

