mikrocontroller.net

Forum: PC-Programmierung Zeichnen mit MFC


Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Kühne (tommes)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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;
void CMyView::OnDraw( CDC* pDC )
{
  CMyDoc* pDoc = GetDocument();
  ASSERT_VALID(pDoc);

  // hier ergänzt du

  pDC->MoveTo( 0, 0 );
  pDC->LineTo( 100, 100 );

  // bis hier
}

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.

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void Draw(CDC* pDC)
{
  
    CPen pen;  // Konstruieren, dann Initialisieren
    pen.CreatePen( PS_SOLID, 1, RGB(255,0,0));

  pDC->MoveTo(10,200);
  pDC->LineTo(550,200);

}

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

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Kühne (tommes)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus wrote:
>
> void Draw(CDC* pDC)
> {
> 
>     CPen pen;  // Konstruieren, dann Initialisieren
>     pen.CreatePen( PS_SOLID, 1, RGB(255,0,0));
> 
>   pDC->MoveTo(10,200);
>   pDC->LineTo(550,200);
> 
> }
> 
>
> 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.

Autor: Thomas Kühne (tommes)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus wrote:
>
> void Draw(CDC* pDC)
> {
> 
>     CPen pen;  // Konstruieren, dann Initialisieren
>     pen.CreatePen( PS_SOLID, 1, RGB(255,0,0));
> 
>   pDC->MoveTo(10,200);
>   pDC->LineTo(550,200);
> 
> }
> 
>
> 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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.