Die Windows-MFC-Klassenbibliothek

Werbung
Grundlagen der Informatik
Die Programmierung
mit der MFC
Prof. Dr.-Ing. Thomas Wiedemann
Prof. Dr.rer.nat. Ralph Großmann
Fachgebiet Informatik / Mathematik
Überblick / Gliederung
• Die Microsoft Foundation Classes MFC
• Beispielprogramm
• Weitere MFC-Bibliotheken
2
Die MFC
• die erste Windows-API basierte noch auf einer reinen CProgrammierung und bot nur reine C-Funktionen an, oft nur
sehr schwer erweiterbar bei sehr komplexer Programmierung
• zur Vereinfachung später wurde eine objektorientierte Schicht
darüber gesetzt - die Microsoft Foundation Classes (MFC)
Überblick:
• ca. 200 teilweise sehr komplexe Klassen
siehe http://msdn.microsoft.com/de-de/library/ws8s10w4.aspx
http://msdn.microsoft.com/de-de/library/bk77x1wx.aspx
• heute zusätzliche Unterstützung von Datenbankprogrammierung, Object Linking and Embedding (OLE) und Netzwerken
•
Tipp: Zum Generieren von MFC-Anwendungen verwenden Sie günstig den
MFC-Anwendungs-Assistent (EXE) in der Projekterstellung mit dem
jeweiligen Visual Studio.
3
Wiederholg.: Das Nachrichtensystem von WINDOWS
Windows-Applikation
Fenster mit Callbackfunc.
WndProc zur Reaktion
auf Ereignisse
WinMain ( )
Fenstererzeugung/Registrierung
while (getmessage)
{ dispatchmessage }
2.
3.
0.
Start
Nachrichtenwarteschlange
Kodierung und
Windows-Betriebssystem Ablage als Nachricht
Fensterverwaltung
(Sichtbarkeit / Ereigniszuordn.)
1. Hardwareereignis (z.B. Mausklick)
Hardware ( Bildschirm, Tastatur, Maus, Massenspeicher, Drucker, ...)
4
MFC – Die Objekthierarchie
Die MFC-Klassenhierarchie ist eine gutes Beispiel für die Erstellung
komplexer Klassenstrukturen:
• Fast ALLE MFC-Klassen haben die Klasse CObject als Urmutter.
• davon abgleitet ist die Klassen CCmdTarget als eine Hauptklasse, welche
Windowsnachrichten verarbeiten kann.
• Eine davon weiter abgeleitete Klasse ist CWnd als Basis aller WindowsFensterelemente. Dies sind neben allen echten Fenstern, Dialogen und
Rahmen auch alle Bedienelemente (Controls) (siehe volle Liste ff).
CObject
CCmdTargetObject
CWinThread
CWinApp
CDocument
CWnd
Controls
CDialog
5
Gesamtüberblick zur MFC - Objekthierarchie
Quelle: MSDN Library Visual Studio 6.0
6
Die MFC - Objekthierarchie
Quelle: MSDN Library Visual Studio 6.0
7
Anlegen eines MFC-Projektes
Anlegen einer MFC-Anwendung über C++ -> MFC -> MFC –Anwendung
Danach Auswahl der Application-Optionen (vgl. Rechte Maske)
-
Single-Doc- entspricht einfacher App wie Notepad
-
Multiple doc. entspricht komplexen Apps wie Winword
8
Initialkonfiguration eines MFC-Projektes
In den weiteren Masken des MFC-Assistenten können die
Standardeigenschaften der App definiert werden:
-
Frame Styles definiert die Bedienelemente von Windwos ( Min/Max etc.) und
die Konfiguration der Menüleisten
-
Adv. Features: Hilfekonf., MAPI - Email-Kommunikation, Windows-Socket
für direkte Netzwerkkommunikation, Anzahl der Filereferenzen
9
Ableitung eines MFC – Programm durch Vererbung
Die MFC-Bibliotheken werden durch
#include "stdafx.h"
eingebunden (AFX war die erste Bezeichnung der MFC)
•
Ein neues Windowsprogramm auf MFC-Basis wird von der Klasse
System::Windows::Forms::Form
abgeleitet , z.b. die neue (app-spezifische) Klassen Form1 mit :
public class Form1 : public System::Windows::Forms::Form
{ …
•
Die Methoden dieses neuen Objektes werden dann an die speziellen
Aufgaben angepasst.
•
Bei Standardverhalten werden die bereits vorhandenen Methoden
von Form verwendet (spart sehr viel Code)
10
MFC – Klassen - Konstruktor und Destruktor
Die Konstruktoren / Destruktoren der neue Klasse sind ggf. anzupassen:
// Konstruktor
public: Form1(void)
{ InitializeComponent(); // Routine zum Aufbau des Formulars (siehe ff.)
// //TODO: weiteren Konstruktorcode hier hinzufügen.
}
// Destruktor
protected: ~Form1()
{
if (components)
{ delete components; } // wieder aufräumen beim Schliessen
}
11
MFC – Klassen – Der Formularaufbau
Mit der Methode InitializeComponent() wird das Formular aufgebaut:
void InitializeComponent(void)
{ this->components = (gcnew System::ComponentModel::Container());
// Erzeugung der Objekte als dynamische Objekte
this->label1 = (gcnew System::Windows::Forms::Label()); // Erzeugung dyn.
this->button1 = (gcnew System::Windows::Forms::Button());
// Parametrisierung der Objekte
this->label1->Location = System::Drawing::Point(13, 13); // Pos. des Labels
this->label1->Name = L"label1"; // Name
this->label1->Size = System::Drawing::Size(210, 25); // Größe
this->label1->Text = L"MiniCAD-System 0.1"; // Beschriftung
// nach Erzeugen aller dyn. Elemente werden diese an das Form gebunden
this->Controls->Add(this->button1);
this->Controls->Add(this->label1);
}
12
Ein typisches MFC – Programm II
•
Am einfachsten lassen sich die Vorgehensweisen am Beispiel eines
typischen Windows-Dialoges demonstrieren (-> MFC-Assistent -> DialogAnwendung ...)
•
In der Ressourcenansicht kann dann mit einem relativ komfortablen Editor
gearbeitet werden :
Rechte Maustaste
-> Eigenschaften
13
Ein typisches MFC – Programm III
Zum Testen und einfachen Kennlernen eigenen sich folgende
Programmbausteine (Details der Aufrufe über Hilfe ... ):
- Generierung einer Meldungsbox (Messagebox)
MessageBox::Show("beim Laden ...“ Info“ ,MB_OK|MB_ICONSTOP);
Text
-
Titel
Buttonanzeige
das Schreiben eines Textes auf dem Windows-Screen ist aufwendiger:
CPaintDC dc (this);
CFont f;
f.CreatePointFont(160,"Desdemona");
dc.SelectObject(&f);
CRect rect;
GetClientRect (&rect);
dc.FillSolidRect(&rect,RGB(128,128,128));
dc.SetBkColor(RGB(192,192,0));
dc.SetTextColor(RGB(255,0,0));
dc.DrawText ("Gelber Hintergrund - roter Text", -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
14
MFC – Funktionen für Datenbankprogrammierung
Datenbankprogrammierung
- die MFC stellt Data Access Objects (DAO) zum Zugriff auf
Datenbanken bereit:
CdbDBEngine
CdbDatabase
m_cDBEngine;
// gesamte Datenbankschicht als Objekt
m_cNWDatabase; // eine konkrete Datenbank
CdbRecordset m_cEmpRecordSet; // eine Tabelle oder Abfrage
•
Spezielle Unterstützung für Microsoft® SQL Server™ 6.0
(Datenbankserver)
•
Für den Zugriff auf größere Datenbankserver existieren entweder spezielle
Bibliotheken der jeweiligen Datenbankhersteller oder universelle MicrosoftSchnittstellen über ODBC (Open Database Connectivity )
15
MFC – DAO-Datenbankbeispiel
BOOL CDAOEMP2Doc::ConnectToDatabase()
{ CFileDialog cOpenFile(TRUE, T("MDB"), T("employee.mdb"), ... }
/* Get the location of database (assume it's the Employee example) */
cOpenFile.DoModal();
CdbDBEngine
m_cDBEngine;
CdbDatabase
m_Database;
CdbRecordset m_RecordSet;
m_cDatabase = m_cDBEngine.OpenDatabase( cOpenFile.m_ofn.lpstrFile);
m_cRecordSet =m_cNWDatabase.OpenRecordset(_T("Employees"), _
dbOpenDynaset);
char a[50];
a = m_cRecordSet.Fields["FirstName"].GetValue();
}
16
Weitere MFC – Bibliotheken
Grafik und Multimedia-Funktionen :
- Multimedia
- Audio Compression Manager (ACM) zur Wiedergabe
komprimierter Musik
- Musical Instrument Digital Interface (MIDI) zur Ansteuerung
von Musikinstrumenten
• DirectX: Funktionen zum sehr schnellen Zugriff auf die
Grafikkarte (teilweise direktes Schreiben in den Grafikspeicher)
• Video for Windows
• Abspielen von AVI –Dateien, Video Capture zum
Aufzeichnen
• OpenGL - spezielle 3D-Grafik-Beschreibungssprache von
Silicon Graphics, Inc.
17
Weitere MFC – Bibliotheken II
Netzwerk-und Kommunikationsfunktionen :
- NetBios – unterste Ebene der Kommunikation
- Remote Access Service (RAS) für den Fernzugriff auf
Rechner
- Simple Network Management Protocol (SNMP) zur
Verwaltung von Netzwerken
- Microsoft Remote Procedure Call (RPC) für die verteilte
Realisierung von Abwendungen
- Internet services : Active Server Pages zum Einhängen in
der Microsoft Internet Information Server (IIS)
- Telephony Application Programming Interface (TAPI) für die
Anbindungen von Telefonen an Windows-Applikationen
18
Weitere MFC – Bibliotheken III
- COM/ ActiveX
- Entwicklung von Softwarekomponenten für Internet- und
Desktopanwendungen
- ActiveX Script – analog zu anderen Internet-Skripsprachen
Hinweis: Die ActiveX Technologie hat sich aufgrund von
Sicherheitsproblemen bisher nicht durchgesetzt.
- Automation-Objects zur Kopplung und zum Datenaustausch
zwischen Microsoft bzw. Windowsprogrammen
19
Zusammenfassung zur MFC – Bibliothek
Generelle Vorteile
- relativ starke Vereinfachung der Windowsprogrammierung
- Das gesamte Messagingsystem ist gekappselt, WindowsMessages werden automatisch an die entsprechenden
Objekte weitergeleitet
- 90 bis 99% der Funktionalität kann von den vorhandenen
Basisklassen nachgenutzt werden, nur die Abweichungen
sind zu programmieren
Probleme und offene Fragen:
• Die relativ starke Verwendung von Pointern (Verweise auf alle
Objekte) kann bei falscher Anwendung zu Instabilitäten führen.
• Dieses Problem wurde mit .NET und dem neuen C# adressiert
und zu einem Großteil gelöst.
20
Herunterladen