• Keine Ergebnisse gefunden

Versuchsziele Vertiefung im Verständnis der Benutzung der SDI-Programmierung in einem Grafikprogramm mit zusätzlichem Dialogfenster in der MFC.

N/A
N/A
Protected

Academic year: 2021

Aktie "Versuchsziele Vertiefung im Verständnis der Benutzung der SDI-Programmierung in einem Grafikprogramm mit zusätzlichem Dialogfenster in der MFC."

Copied!
7
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Hochschule Harz FB Automatisierung und Informatik 2. Labor:

SDI

Grafische Nutzerschnittstellen mit MFC

Thema: SDI-Grafik-Programmierung mit einem Dialogfenster

Versuchsziele

Vertiefung im Verständnis der Benutzung der SDI-Programmierung in einem Grafikprogramm mit zusätzlichem Dialogfenster in der MFC.

Aufgabenstellung:

Entwickeln Sie ein SDI-Programm, welches ein Koordinatensystem darstellt. Dazu wird in einem Fenster die „onDraw-Methode“ überschrieben. Um die Daten in der Grafik zu ändern, soll durch ein Dialogfenster die Skalierung geändert werden. Die Daten werden durch eine Arraylist in der Dokumentenklasse gehalten resp. gespeichert bzw. geladen.

Abbildung des Views

Erläuterungen zur Aufgabe:

Das Fenster ist ein SDI-Programm mit Schalterleiste, mit Statuszeile und mit der Dokument / View-Architektur.

• Das Projekt ist als „MVC-Modell“ mit dem Dokument / Architektur-Modell entwickelt. Dement- sprechend existieren die Klassen „Doc“ und „View“.

• In der Klasse „Doc“ werden die Daten gespeichert, aus einer Datei gelesen und in eine Datei geschrieben. Des Weiteren stellt diese Klasse Funktionen zur Verfügung, um die Daten zu ändern (set/get-Methoden).

• Die View-Klasse dient dazu, die Daten anzuzeigen, Änderungen sind mittels modaler Dialogfenster vorzunehmen.

Hinweis:

Die Aufgabe simuliert ein Zeichenprogramm. Die Koordinaten des Diagramms (2 bis 10 und 0 bis 10) werden durch den Anwender eingegeben. In der ersten Fassung dieser Labore werden diese

„Variablen“ in die „Paint-Routine“ eingefügt. Sie sind der Ausgangspunkt beim Zeichen des Diagramms.

(2)

Versuchsdurchführung

1) Projekterstellung

• MFC-Applikation

1. Seite

o SDI mit Dokument / View-Architektur o Deutsch

o Ohne Unicode-Unterstützung

• Dateierweiterung „grf“

(3)

2) Erzeugen einer neuen Klasse zur Speicherung der Koordinaten

• Menü Project

• Add Class

Klassenname: CDblPoint

Keine abgeleitete Klasse, einfache C++ Klasse

Eintragen der Attribute in Klasse CDblPoint:

protected:

double m_x;

double m_y;

Eintragen der get- und set-Methoden

3) „Daten, Koordinaten, erzeugen“

In der Datei „CLabor2_GrafikDoc.h“ das „Array“ und die weiteren Member-Variablen definieren

Beispielcode:

CArray<CPoint, CPoint&> m_liste;

Eintragen der Attribute in Klasse CLabor2_GrafikDoc:

protected:

CString sHeader; // speichert die Überschrift CString sXAchse; // speichert die Achsbezeichnung CString sYAchse; // speichert die Achsbezeichnung

????? m_liste, // dient zur Speicherung von ???

Definieren und Eintragen folgender Methoden:

• int getCount(); // Anzahl der Elemente in der Liste

• CDblPoint GetPoint(int index); // Mit Kontrolle der Grenzen für den Parameter index

• void addPoint(double x, double y);

Methoden der Array-Liste:

GetCount liefert die Anzahl der Objekte in der Liste [i] liefert das i-te Element in der Liste

SetAtGrow( n, Object ); Einfügen ans Ende, n ist die Anzahl IN der Liste, vor dem Einfügen Damit wächst das Array dynamisch

RemoveAll(); Löscht alle Elemente in der Liste

4) Eintragen von Default-Werten im Doc-Quellcode

Methode onNewDocument:

• m_liste.SetAtGrow( 0, CDblPoint( 2.2, 1.0 ) );

• m_liste.SetAtGrow( 1, CDblPoint( 3.2, 0.2 ) );

• m_liste.SetAtGrow( 2, CDblPoint( 3.5, 0.5 ) );

• m_liste.SetAtGrow( 3, CDblPoint( 4.3, 1.9 ) );

• m_liste.SetAtGrow( 4, CDblPoint( 4.3, 5.0 ) );

(4)

• m_liste.SetAtGrow( 5, CDblPoint( 4.7, 3.3 ) );

• m_liste.SetAtGrow( 6, CDblPoint( 5.9, 2.1 ) );

• m_liste.SetAtGrow( 7, CDblPoint( 6.4, 1.8 ) );

• m_liste.SetAtGrow( 8, CDblPoint( 8.3, 7.3 ) );

• m_liste.SetAtGrow( 9, CDblPoint( 9.6, 2.1 ) );

• sHeader=_T("Überschrift");

• sXAchse=_T("X-Achse");

• sYAchse=_T("Y-Achse");

5) Speichern und Laden in Methode serialize

Hinweis:

Die Klasse CDblPoint kann nicht komplett gespeichert werden.

CDblPoint pxy;

pxy = m_liste[0];

ar << pxy; // ist nicht erlaubt, man müsste die Serialize-Funktion in der Klasse

// überschreiben

6) Zeichnen der Grafik, Datei Labor2_GrafikView.cpp

In der Methode „onDraw“ werden Schritte programmiert (Überblick):

• Holen einer Referenz auf das Dokument

• Definieren lokaler Variablen

o double xa, xsw, xe; // Anfangswert, Schrittweite, Endweite o double ya, ysw, ye; // Anfangswert, Schrittweite, Endweite

• Setzen der Schrittweite für die X-Achse auf 1.0

• Setzen der Schrittweite für die Y-Achse auf 0.4

• Bestimmen der Grenzen pro Achse (xa,xe, ya,xe)

• Bestimmen der Position und Größe des Rahmens o int x0 = 15% der Fensterbreite

o int y0 = 15% der Fensterhöhe o int width = 80% Fensterbreite o int height = 70% der Fensterhöhe

• Setzen der Schrift für die Zahlen (14 pt, Times New Roman)

• Zeichnen der X-Achse

• Zeichnen der Y-Achse

• Setzen der Schrift für die Überschrift (20 pt, Arial)

• Zeichnen der Überschrift (zentriert auf den Rahmen)

• Setzen der Schrift für die X-Achse (14 pt, Arial)

• Zeichnen des Namens der Y-Achse (zentriert auf den Rahmen) o CFont font;

o font.CreatePointFont(140,"Times New Roman");

o ???->SelectObject(&font);

• Setzen der Schrift für die X-Achse (14 pt, Arial, senkrecht !!!) o CFont fontYAchse;

o fontYAchse.CreateFont(14, 14, 900, 0, o FW_DONTCARE, false, false, false,

o DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, o CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, o DEFAULT_PITCH || FF_DONTCARE, "Arial");

• Für das Zeichnen der X-Achse bzw. Y-Achse wird eine Schleife durchlaufen (x von xa bis xe). Es müssen spezielle Rundungswerte für xa, xe bzw. ya, ye berechnet werden. Je nach Schrittweite muss xa und xe berechnet werden.

(5)

• Beispiel:

o Kleinster Wert Schrittweite xa

o 2.1 1.0 2.0

o 2.5 1.0 2.0

o 2.6 0.5 2.5

• Für das Beispiel gilt für die X-Achse die Schrittweite 1,0, man sollte den Wert aber

„spaßeshalber“ auch mal auf 0,5 setzen.

• Für das Zeichnen der Ziffern der X-Achse benötigt man die Länge des Textes (mitte.) o CSize cz = pDC->GetTextExtent( string );

• Für das Zeichnen der Ziffern der Y-Achse benötigt man die Länge und Höhe des des Textes (rechtsbündig bzw. mittig auf den Strich auf der Y-Achse)

o CSize cz = pDC->GetTextExtent( string );

• Die Koordinaten werden als eine Kurvenlinie gezeichnet

Insgesamt hat die onDraw-Methode 193 Zeilen, je nach Kommentierung

7) Eintragen eines Dialogfenster, zur Änderung der Beschriftung

• Auswahl Register „Recource“

• Eintrag „Dialog“

• Rechte Maustaste „Insert Dialog“

Nun das folgende Fenster aufbauen:

Neue Klasse für das Dialogfenster erzeugen

Name der Klasse: CHeaderXY

(6)

Membervariablen definieren:

• CString m_header;

• CString m_xAchse;

• CString m_yAchse;

8) Menüeintrag erstellen

• Auswahl Register „Recource“

• Eintrag „Menu“

• Doppelklick auf „IDR_MAINFRAME“

Nun das Hauptmenü Hilfe anklicken Taste Einfügen betätigen

Grafik eintragen

Darunter dann Beschriftung

Dann mit rechter Maustaste auf den Eintrag „Beschriftung“

Eintfag „Add Event Handler“

Wichtig:

Die Event-Methode sollte zur Datei GrafikView verweisen.

Beispielcode:

CHeaderXY dlg;

dlg.m_header = ?????;

if (dlg.DoModal() == IDOK) { // Daten übertragen

pDoc->setHeader( ???? );

Invalidate(); // zwingt zum Neuzeichnen pDoc->SetModifiedFlag(true);

}

(7)

Hinweis:

Der Aufruf der Methode „UpdateData“ ist nicht erforderlich !

9) Eintragen eines Dialogfenster, zur Änderung der Skalierung, optional

Anzeige des neuen Dialogfensters Dialogfenster: IDD_SKALIERUNG

Grafische Elemente des Dialogfensters:

ID-Name GUI-Typ Membervariablen Datentyp Min / Max

IDC_EDIT_XA Editfeld m_xa Double

IDC_EDIT_XSW Editfeld m_xsw Double

IDC_EDIT_XE Editfeld m_xe Double

IDC_EDIT_YA Editfeld m_ya Double

IDC_EDIT_YSW Editfeld m_ysw Double

IDC_EDIT_YE Editfeld m_ye Double

IDC_XTICKS Editfeld m_xticks UINT 0 bis 20

IDC_YTICKS Editfeld m_yticks UINT 0 bis 20

IIDC_SPIN_XTICKS Drehfeld m_xticks_ctrl IIDC_SPIN_XTICKS Drehfeld m_yticks_ctrl

Abbildung

Abbildung des Views
Grafik eintragen

Referenzen

ÄHNLICHE DOKUMENTE

werden bei einer Analyse der Betriebsflache die unterschiedlichen okologischen Verhaltnisse (s. o.) aufier Betracht gelassen. Ahnliches gilt selbst dann noch, wenn man

Der auBerste Osten und Siiden des ?Waard&#34; wurde zwar nicht uberschwemmt, geriet aber doch in Verfall und ist bis auf den heutigen Tag ein mehr oder weniger ver

So ist man zukünftig dazu verpflichtet, einen fehlenden Rückstauschutz nachzurüsten, auch wenn dies beim Bau des Hauses noch nicht verpflichtend vorgeschrieben war..

Anders als im latei- nischen Westen, in dem sich ein äußerst spannungsreicher und produktiver Prozess der Dif- ferenzierung zwischen Kirche und Staat, Religion und Politik vollzog, 40

Die folgenden Methoden stellen sicher, dass Änderungen in das Dokument eingetragen werden und dann automatisch gespeichert werden. Change-Event für

Die Komponente „ListView“ erlaubt die Darstellung von Objekten in einem Fenster. Bekannt durch die rechte Seite im Explorer. Dabei kann man unterschiedliche Darstellungen

TVIS_EXPANDED The item's list of child items is currently expanded; that is, the child items are visible. This value applies only to

M 3 Fichas de palabras para la “Pecha Kucha“ / Wortkärtchen für die „Pecha- Kucha”-Präsentationen.. ZM 4 PowerPoint-Präsentation “Pecha Kucha“ / Präsentation von