REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
 EnglischEpochenFranzösischBiologieInformatikItalienisch
 KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  



Windows - Programmierung in C++(MFC)

Windows - Programmierung in C++(MFC)

 

Einleitung zu MFC

MFC = Microsoft Foundation Classes

MFC ist ein objektorientierter Überbau über Windows API.

Vorteile zu normaler C-Programmierung:

  • Betriebssystemunabhängiger

  • Einige Routinearbeiten bleiben erspart wie z.B.: Meldungsschleife im Hauptprogramm

  • Wenig Type Casting = höhere Sicherheit. Statt dessen spezialisierte Element

  • Funktionen

Namen

  • Alle Klassen in MFC beginnen mit C(CWnd, CString, CPoint)

  • Member Variable beginnen mit m_(z.B.: m_hInstance)

  • Ungarische Notation verwenden



  • Allgemeine Hilfsfunktionen beginnen mit Afx(z.B.: AfxMessageBox)

Wizards:

Application Wizard: zum generieren eines Programm - Gerüsts das auf der Document - View Architektur basiert.

Grundlage der Document-View Architektur ist die Trennung von Daten - Speicherung und Daten - Darstellung.

Die Daten des Programmes werden in einem Dokument Objekt abgespeicher. Die Klasse von der das Objekt abgeleitet wird ist CDocument, das die technische Realisierung der Datenspeicherung des Programmes enthält. 57623rxt25lkk1z

Das Hauptfenster wird mit einem Frame-Objekt verwaltet (Basisklasse CFrameWnd). Dieses Objekt verwaltet den Fensterrahmen, Menü, Symbolleiste und die Statuszeile.

Das Anzeigen der Daten erfolgt mit dem View Objekt, das von CView abgeleitet wird. Zu einem Document - Objekt kann es mehrere Views geben.

Class Wizard: Zum Erstellen von neuen oder ändern und erweitern von bereits bestehenden Klassen. Mit dem Class Wizard kann man die Elementfunktionen einer Klasse mit Windows Ereignissen verbinden. Der Wizard erleichtert außerdem einige weitere Dinge wie das Überladen von virtuellen Funktionen oder das automatische Generieren des Dialog Datenaustausches.

Die Objekte

Das Anwendungs Objekt

Ein MFC-Programm hat immer ein Anwendungs Objekt, welches die wesentlichen Aufgaben von WinMain übernimmt z.B.: xk623r7525lkkk

Registrieren, Erzeugen und Anzeigen des Hauptfensters

Meldungsschleife

Das eigene Anwendungsobjekt wird von der MFC-Klasse CWinApp abgeleitet und normalerweise als globale Variable erzeugt, und der Ablauf, der WinMain entspricht, verbirgt sich im Konstruktor des Objekts.

Durch das Überladen von virtuellen Funktionen wird die eigene Klasse an die entsprechenden Bedürfnisse angepaßt. Z.B.: Überladen von "InitInstance"

Das Hauptfenster Objekt

Das Hauptfenster Objekt wird von der Funktion InitInstance angelegt und verwaltet das Hauptfenster der Anwendung. Die Klasse des Hauptfensters muß von der passenden MFC Fenster Klasse abgeleitet werden(z.B.:CFrameWnd).

Das Windows Objekt wird im Konstruktor durch Aufruf der Create Methode erzeugt:

CmyWindow:: CmyWindow()

{

Create (NULL, "Hello Windows Programm", WS_OVERLAPPEDWINDOW, RectDefault,NULL,"MENU_1");

}

 

Die Schnittstellen- und Steuerelement Objekte

 

Die Schnittstellen Objekt ermöglichen ein objektorientiertes Arbeiten mit den Elementen von Windows Fenstern wie

z.B.: Listboxen Liste->AddString("Erste Zeile");

im Gegensatz zu

SendDlgItemMessage (hWnd,IDC_LIST,LB_ADDSTRING,0,(LPARAM) (LPSTR) "Erste Zeile");

 

Mit Hilfe der Schnittstellen Objekte ist es außerdem möglich auf Windows Nachrichten durch Nachrichten Tabellen (Message Maps) und Nachrichten-Behandler-Funktionen zu reagieren.

Alle vordefinierten Klassen die als Ausgangspunkt für eigene Klassen verwendet werden (wie z.B.: CDialog, CDistBox, CView) haben CWnd als Basisklasse.

 

Für Steuerelemente gibt es verschiedene Klassen:

CButton, CEdit, CStatic, CListbox,....

Ein Steuerelement wird folgendermaßen einem Resource Element zugeordnet:

CListBox *liste = (CListBox *) GetDlgItem (IDD_LIST1)

 

Häufige Elementfunktionen bei Steuerelementen.:

  • Bei Buttons. SetCheck, GetCheck

  • Bei Listen: AddString, InsertString, DeleteString, ResetContent, SetItemData, GetItemData, GetCurSel, SetCurSel, GetCount, FindString, SelectString

 

 

 

Das Dokument Objekt

 

Das Dokument Objekt ist von CDocument abgeleitet und verwaltet die Daten der Anwendung. Z.B.: das Speichern und Laden der Daten vom/in die Datei und kommuniziert mit den View-Objekten.

 

Wichtige Element Funktionen:

 

  • SetModifiedFlag Diese Funktion bewirkt, daß beim Schließen, Öffnen usw. der

Benutzer gefragt wird, ob er das Dokument speichern will.

  • UpdateAllViews Ruft für alle View Objekte die Element Funktion OnUpdate auf.

  • OnNewDocument Initialisiert die Daten des Dokuments

  • OnOpenDocument Zum Initialisieren der Daten, die nicht aus der Datei gelesen

werden.

  • DeleteContents Entfernt alte Daten des vorherigen Dokuments aus dem Speicher

und gibt Ressourcen frei.

  • Serialize Zum Lesen und Schreiben der Daten in die Datei. Das Öffnen

und Schließen der Datei wird von Anwendungs-Rahmen

übernommen.

 

Aufruf Sequenzen:

OnNewDocument: DeletContents

OnOpenDocument: Datei öffnen, DeleteContents, Serialize, Datei schließen

OnCloseDocument: DeleteContents

Serialize

Die Serialize Funktion dient zum Speichern und Laden aus Dateien. Diese Funktionen können

mittels Überladungder virtuellen Serialize Funktion erreicht werden.

à Serialize(CArchive& ar)

Wichtige Methoden des CArchive Objektes sind:

IsStoring()

Read()

Write()

Z.B.: if(ar.IsStoring()) ar << Info << pos;

Die Verwendung ist ähnlich der cin und cout Funktionen.

Das View Objekt

Das View Objekt ist von CView oder CScrollView abgeleitet und verwaltet zum Beispiel

Fenster Ausgaben, Maus Aktionen oder Keybord Eingaben.

Vom View Objekt aus kann auf das Dokument Objekt und dessen Daten mittels

GetDocument() zugegriffen werden.

Wichtige Element Funktionen:

OnDraw Entspricht OnPaint. Ein Zeiger auf das DC-Objekt wird bereits als Parameter überliefert.

Wichtigste zu überladende Funktion.

OnUpdate Wird zum Beispiel durch UpdateAllViews des Dokument Objektes aufgerufen.

OnInitialUpdate Zur Initialisierung des View Objektes. Ruft standardmäßig OnUpdate auf.

Dialog Objekte

Die eigenen Dialogklassen werden von CDialog abgeleitet, und werden der Resource im Konstruktor zugeordnet.

Bei modalen Dialogen:

CmyDialog:: CmyDialog (CWnd* pwnd): Cdialog (IDD_DIALOG1, pwnd) {...}

Bei nicht modalen Dialogen:

CmyDialog:: CmyDialog (CWnd* pwnd) { Create (IDD_DIALOG1, pwnd); }

Abhängig davon, ob es sich um einen modalen oder einen nicht modalen Dialog handelt, wird er entweder am Stack oder am Heap angelegt:

Modal:

CmyDialog dlg(this);

Nicht Modal:

PDlg = new CmyDialog (this);

Auch die Ausführung und die Beendung des Dialogs ist von der Art des Dialogs abhängig:

Ausführung Beendung

Modal: dlg.DoModal(); Aufruf von: Cdialog::EndDialog(int)

Nicht Modal: Create im Konstruktor Aufruf von: CWnd::DestroyWindow()

Falls Buttons mit den Kennungen IDOK und IDCANCEL erstellt werden, so rufen diese beiden standardmäßig EndDialog auf. Das heißt, daß OnOk() und OnCancel() bei nicht modalen Dialogen unbedingt überladen werden müssen.

Die Freigabe des Dialog Objektes geschieht bei modalen Dialogen automatisch. Bei nicht modalen Dialogen muß man das Objekt manuell mit delete(this) löschen.

Wenn man bei Dialogen Steuerelemente vor dem Anzeigen belegen oder den Focus setzen will, so muß an die virtuelle Methode BOOL Cdialog::OnInitDialog() überladen.

Die Nachrichten Tabelle funktioniert genauso wie im Hauptfenster. Nicht in die Message Map gehören allerdings OnInitDialog, OnOK und OnCancel.

In die MessageMap gehört OnClose.

Nachrichten - Tabellen

Nachrichten Tabellen (Message Maps) sind dazu da, um beim Eintreffen von Windows Meldungen automatisch Element Funktionen aufzurufen. Dadurch ist kein manuelles analysieren von wParam und lParam mehr notwendig.

Nachrichten Tabellen werden mittels Makros realisiert, da diese den virtual Mechanismus nach bauen aber effizienter sind.

Beispiel.

class CmyWindow : public CFrameWnd

{

afx_msg void OnPaint();

afx_msg void OnLButtonDown(UINT, Cpoint);

DECLARE_MESSAGE_MAP(); //Legt fest, das die Klasse eine Message-Map verwendet

};

BEGIN_MESSAGE_MAP(CmyWindow,CframeWnd) //Definiert die Message-Map

ON_WM_PAINT() //Angabe ohne Parameter, da diese fix vorgegeben sind.

ON_WM_LBUTTONDOWN() //Angabe ohne Parameter, da diese fix vorgegeben sind.

END_MESSAGE_MAP()

Der Dialog-Daten-Austausch

Der Dialog-Daten-Austausch(DDX/DDV) ist ein Mechanismus zum Austausch zwischen dem Dialog Objekt und den Steuerelementen des Dialoges.

Für die Steuerelemente müssen passende Member-Variablen im Dialog Objekt enthalten sein.

Bei Modalen Dialogen wird der Transfer automatisch bei OnInitDialog und OnOK ausgeführt.

Der Transfer der Daten kann auch manuell mittels UpdateDate(TRUE/FALSE) aktiviert werden:

UpdateData(TRUE) Transfer vom Dialogobjekt zu den Steuerelementen

UpdateData(FALSE) Transfer von den Steuerelementen zum Dialogobjekt

Kernstück des DDX/DDV ist die Funktion DoDataExchange.







Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen