Forum: PC-Programmierung Zeichnen mit MFC


von Uwe (Gast)


Lesenswert?

Ich muss unter MFC ein Projekt erweitern. Wie kann man unter MFC eine 
Linie einen Punkt ein Rechteck zeichnen lassen?
In Google habe ich schon geschaut, hab da nichts gescheites gefunden.
hat von euch jemand ein Beispielprojekt wo man sehen kann, wie so was 
unter MFC funktioniert? Das Problem wo ich noch dabei habe ist, dass ich 
nicht genau weiss wo man da den Code plazieren muss.

von Karl H. (kbuchegg)


Lesenswert?

Uwe wrote:
> Ich muss unter MFC ein Projekt erweitern. Wie kann man unter MFC eine
> Linie einen Punkt ein Rechteck zeichnen lassen?
> In Google habe ich schon geschaut, hab da nichts gescheites gefunden.
> hat von euch jemand ein Beispielprojekt wo man sehen kann, wie so was
> unter MFC funktioniert? Das Problem wo ich noch dabei habe ist, dass ich
> nicht genau weiss wo man da den Code plazieren muss.

Zeichnest du in einem View oder in einem Control, welches in einem
Dialog eingesetzt wird?

Beides funktioniert ähnlich, nur musst du dich in verschiedene
Funktionen reinklinken.
View: Du hängst dich in die OnDraw rein
Control: Du hängst dich in die OnPaint rein

In beiden Funktionen kriegst du einen CDC Pointer übergeben, der
die Zeichenfläche repräsentiert. Und über den CDC erzeugst du
dann deine Zeichnung. CDC hat eine Menge Memberfunktionen, zb.
MoveTo, LineTo, SetPixel, Rectangle, TextOut, etc ....

Wenn du damit Schwierigkeiten hast, dann solltest du mal zumindest
ein MFC Tutorial von vorne weg durcharbeiten. Das sind die absoluten
Basics.

von Uwe (Gast)


Lesenswert?

Ja am besten wäre, wenn ich so ein Beispiel projekt hätte, wo alles 
wesentlich vorhanden ist. Ich möchte mit dem OnDraw arbeiten.

von Thomas K. (tommes)


Lesenswert?

Mit diesem Tutorial kannst du erstmal ein paar MFC Grundlagen lernen 
(incl. Grafiken): http://home.wtal.de/ranzurmall/visualc/
es baut zwar auf Visual C++ auf, aber man kann bestimmt auch einiges für 
andere Compiler ableiten.

von Karl H. (kbuchegg)


Lesenswert?

Uwe wrote:
> Ja am besten wäre, wenn ich so ein Beispiel projekt hätte, wo alles
> wesentlich vorhanden ist. Ich möchte mit dem OnDraw arbeiten.

Irgendwo in deiner Dev-Studio Installation gibt es das
bekannte 'Scribble' Demo. Das geht in mehreren Stufen den
Prozess des Erstellens einer SDI Applikation durch.
Inklusive Zeichnen.

ANsonsten:
Das ist nicht weiter schwer.
Lass die mal ein neues Projekt erzeugen:
SDI Applikation

Dann gehst du in die View Klasse. Der Wizard hat dort schon
die OnDraw Funktion eingebaut.
In die ergänzt du mal:

(CMyView und CMyDoc werden bei dir anders heissen, je nachdem
wie du dein Projekt benannt hast. Ist aber egal, den Teil
hat der Wizard ja bereits fertig erzeugt;
1
void CMyView::OnDraw( CDC* pDC )
2
{
3
  CMyDoc* pDoc = GetDocument();
4
  ASSERT_VALID(pDoc);
5
6
  // hier ergänzt du
7
8
  pDC->MoveTo( 0, 0 );
9
  pDC->LineTo( 100, 100 );
10
11
  // bis hier
12
}

Das ist schon alles. Neu builden und laufen lassen und dann
muss im Fenster eine Linie zu sehen sein. 0-Punkt
links oben, x geht nach rechts, y geht nach unten.


Schau dich wirklich nach einem Tutorial im Web um.
Das ist eine der leichtesten Übungen mit MFC. Da warten
noch wesentlich schwierigere Dinge auf dich.

von Uwe (Gast)


Lesenswert?

Ich verfluche echt MFC.

Ich hab da schon probleme mit dem Poi0nter CMyDoc* pDoc = GetDocument();
Funktioniert überhaupt gar nichts.

Hat jemand ein lauffähiges Programm.

von Markus (Gast)


Lesenswert?

1
void Draw(CDC* pDC)
2
{
3
  
4
    CPen pen;  // Konstruieren, dann Initialisieren
5
    pen.CreatePen( PS_SOLID, 1, RGB(255,0,0));
6
7
  pDC->MoveTo(10,200);
8
  pDC->LineTo(550,200);
9
10
}

Hab diese Funktion erstmal erstellt. Ich kann aber keine Linie sehen.

von Uwe (Gast)


Lesenswert?

Muss man die OnDraw Funktion dann noch irgendwo aufrufen?
Ich raffe da echt nichts. Ich benöte nur mal ein lauffähiges Beispiel, 
das mir eine Linie zeichnet.

von Thomas K. (tommes)


Lesenswert?

schau dir halt mal das Tutorial, was ich weiter oben gepostet habe, an.
Ich glaube aber die Funktion OnDraw wird automatisch aufgerufen, wenn 
das Fenster, in dem gezeichnet werden soll, geöffnet wird. Also ist die 
Funktion keine "unabhängige" Funktion, sondern eine Funktion eines 
Objektes / einer Klasse. Um genau zu sein, nichtmal vom Fenster an sich, 
sondern von der Ansicht (View) Kasse des Fensters. Ich bin mir nicht 
ganz sicher ob ich mich so richtig ausgedrückt habe, aber ich denks mal. 
Hab mich auch erst ein bissel mit MFC beschäftigt.
Und um das ganze zu verstehen musst du eh erstmal nen Tutorial oder nen 
Buch zu Hand nehmen. Meiner Meinung nach, kann man mit MFC nicht mal 
einfach so nen Strich zeichnen, man muss das Gerüst dahinter verstanden 
haben...

von Simon K. (simon) Benutzerseite


Lesenswert?

Markus wrote:
>
1
> void Draw(CDC* pDC)
2
> {
3
> 
4
>     CPen pen;  // Konstruieren, dann Initialisieren
5
>     pen.CreatePen( PS_SOLID, 1, RGB(255,0,0));
6
> 
7
>   pDC->MoveTo(10,200);
8
>   pDC->LineTo(550,200);
9
> 
10
> }
11
>
>
> Hab diese Funktion erstmal erstellt. Ich kann aber keine Linie sehen.

Die Funktion sollte OnDraw heißen. Außerdem musst du dem Framework 
klarmachen, dass diese Funktion auch aufgerufen werden soll (von 
selbigem).

Bei Microsoft Visual C++ 6.0 gibts unter Ansicht den Klassenassistenten, 
womit man einfache Event-Handler hinzufügen kann.

PS: Den Gefallen dir ein lauffähiges Programm abzuliefern wird dir hier 
sicher niemand tun.

von Thomas K. (tommes)


Lesenswert?

naja bei dem Tutorial is ein lauffähiges Beispiel dabei, kann man sich 
alles runterladen. Nur ohne die Grundlagen von MFC zu kennen, versteht 
man im Quelltext recht wenig. Deshalb sollte man halt auch das Tutorial 
oder nen Buch dazu lesen...

von Karl H. (kbuchegg)


Lesenswert?

Markus wrote:
>
1
> void Draw(CDC* pDC)
2
> {
3
> 
4
>     CPen pen;  // Konstruieren, dann Initialisieren
5
>     pen.CreatePen( PS_SOLID, 1, RGB(255,0,0));
6
> 
7
>   pDC->MoveTo(10,200);
8
>   pDC->LineTo(550,200);
9
> 
10
> }
11
>
>
> Hab diese Funktion erstmal erstellt. Ich kann aber keine Linie sehen.

Wozu red ich mir eigentlich den Mund fusselig.
Die Funktion heist OnDraw und ist bereits vom Wizard
erstellt worden, wenn du ein neues Projekt erzeugst.
Du musst lediglich 2 Zeilen (in Worten: zwei) in eine
bereits vorhandene Funktion einfügen. Das kann doch
nicht so schwer sein.

von Simon K. (simon) Benutzerseite


Lesenswert?

Karl heinz Buchegger wrote:
> Die Funktion heist OnDraw und ist bereits vom Wizard
> erstellt worden

Ich bin mir gerade nicht 100% sicher, aber ich meine, dass die OnDraw 
nicht standardmäßig drin ist. Wenn du dir da jetzt nicht 100% sicher 
bist, werde ich das aufjedenfall nochmal nachprüfen.

Aber egal: Im Klassenassistenten kannst du diese Funktion hinzufügen.

von Karl H. (kbuchegg)


Lesenswert?

Simon K. wrote:
> Karl heinz Buchegger wrote:
>> Die Funktion heist OnDraw und ist bereits vom Wizard
>> erstellt worden
>
> Ich bin mir gerade nicht 100% sicher, aber ich meine, dass die OnDraw
> nicht standardmäßig drin ist. Wenn du dir da jetzt nicht 100% sicher
> bist, werde ich das aufjedenfall nochmal nachprüfen.

Ich habs geprüft. Sie wird.

Alles was er tun muss:
* ein neues Projekt erzeugen. Ob SDI oder MDI ist erst mal egal
* Dem Projekt einen Namen geben
* Das CPP File für die View Klasse aufmachen
* runter scrollen bis zur OnDraw Funktion
* Die beiden Zeilen (stellvertretend für eine Grafik) einfügen
* F7 - Build
* F5 - Ausführen
* Sich am Ergebnis erfreuen und überlegen, wie man mit mehr
  Linien eine komplexere Grafik hinkriegt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.