Einsteigerproblem GDI Rechteck
-
Hi,
man möge mir verzeihen, wenn ich meinen Beitrag in den falschen Unterberreich gepostet habe. Kann sein das es auch in den MFC Bereich gehört...
ich habe hier ein Einsteiger Grafikproblem, an dem ich aber verzweifel, da ich nicht wirklich weiter weiß.
Es geht darum das ich eine kleine Klasse erstellen will, die mir einen Würfel in eine SDI Anwendung zeichnet. Später soll damit ein Spiel programmiert werden, bei dem sich einige Würfel über ein Spielfeld bewegen, und man selber mit einem Würfel ausweichen muss der mit der Maus bewegt wird. Aber das tut erstmal nichts zur Sache.
Ich habe in Visual C++ 6 ein SDI-MFC Projekt erstellt, udn nun meine MiniRechteckZeichnenKlasse hinzugefügt, die der einfachheit halber erstmal wie folgt aussieht:
class Square { public: void display(); int breite, hoehe; Square(); virtual ~Square(); };und die display Methode:
void Square::display() { CDC dc; dc.Rectangle(1,1,10,100); }und in meiner InitInstance Methode meiner App Klasse habe ich
Square sq;
sq.display();reingeschrieben.
ich will mir mit meinem ganzen Kram diesen Grafikdevice Kontext holen und da mein Rechteck drauf zeichnen
Problem ist, das das gar nicht funktioniert. Es kommt kein Rechteck, und wenn ich das Programm schließe stürzt es ab.Ich habe hier aber ein Buch, indem steht das ich
CDC dc(this); schreiben müßte.
Da kommt aber dann die Fehlermeldung "Funktion akzeptiert keine 1 Parameter"
Ich habe aber ein anderes kleines Progrämmchen, in dem genau diese Zeile CClientDC dc(this); steht und es funktioniertAber irgendwie sehe ich da jetzt nicht durch wie das bei mir funktionieren soll.
Dieser Grafik Device Kontext besagt doch, das ich quasi für mein Programm eine Schnittstelle hole, wo alles drauf gezeichnet wird ect.
Aber wie teile ich meiner Würfelklasse denn nun genau mit welchen GDC sie benutzen soll?Ich hoffe jemand versteht mein Problem und weiß was ich eigentlich will, und kann mir mal erklären worin mein Denkfehler liegt und was ich da total falsch mache?
Danke schonmal
-
den device context holst dir in deiner MFC OnPaint methode
und dieses dc objekt übergibst am besten per const reference an all deine kleinen shape objekte... class Square { public: void display(CDC const& dc); Square(); virtual ~Square(); int breite, hoehe; }; ... void Square::display(CClientDC const& dc) { dc.Rectangle(1, 1, breite, hoehe); } ... AFX_MSG void OnPaint() { CClientDC dc(this); Square sq; s1.breite = s1.hoehe = 10; //btw square = rechteck wo breite und höhe gleich ist sq.display(dc); }