Windows ist in C geschrieben. Als Windows entworfen wurde, war von C++ noch nichts zu sehen. Das ist bis heute so geblieben. Das hat den Vorteil das C-Programmierer Programme in Windows entwerfen können ohne C++ anzuwenden. Sicherlich gibt es einige Gründe nur in C zu programmieren, Umgekehrt können C++ Programmierer ebenfalls Windows Programm schreiben, da sie auf nicht objektorientierte Funktionen zugreifen können.
Um nun ein Windowsprogramm zu schreiben gibt es eine imens große Sammlung von C-Funktionen. Diese Sammlung wird WIN 32 API genannt und wird von Microsoft betreut. Darin sind alle Funktionen enthalten um Windowsprogramme zu schreiben. Es sind Funktionen vohanden um Fenster zu erzeugen, Nachrichten auszutauschen, MDI-Fenster zu erstellen u.v.m.
Der Nachteil an diesen Funktionen ist, sie sind kompliziert und nicht immer einfach zu verstehen. Als Beispiel mag hier der Code dienen, der nur ein einfaches Fenster anzeigt und noch keine Funktionalität hat. Das ist das, was im C++Builder die Anwendung von "alleine" kann, wenn man "Neue Anwendung" anwählt.
#include <windows.h>
// **********************Globale Variablen***************************
HWND hdlg,hstatus,hedit1,hedit2,aktfocus;
HINSTANCE hInst;
//**********************MAIN-PROGRAMM********************************
int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrev,LPSTR CmdParam,int Show)
{
InitCommonControls();
MSG msg;
WNDCLASSEX win;
hInst=hInstance;
win.style = CS_DBLCLKS;
win.lpfnWndProc = dialog2;
win.cbClsExtra = 0;
win.cbWndExtra = 0;
win.hInstance = hInst;
win.hIcon = LoadIcon(hInst,MAKEINTRESOURCE(ICONGR));
win.hCursor = LoadCursor(NULL,IDC_ARROW);
win.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
win.lpszMenuName = NULL;
win.lpszClassName = PROGRAMM;
win.hIconSm = LoadIcon(hInst,MAKEINTRESOURCE(ICONKL));
win.cbSize = sizeof(WNDCLASSEX);
RegisterClassEx(&win);
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(hdlg,acl,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
Dabei ist hier noch nicht mal die Nachrichtenschleife enthalten, die die Auswertung der Nachrichten vornimmt.
Problem dabei war, dass man bei jeden Programm prinzipiell immer erstmal das gleiche programmieren musste. Das ist nervtötend und auch außerdem extrem unproduktiv.
Borland hatte dieses Problem erkannt und entwarf vor langer Zeit die OWL die Object-Windows-Bibliothek. Diese enthielt viele Klassen die den Umgang mit der WIN 32 API stark vereinfachten. Sie wurde mit der 3er Version der Borland Compiler ausgeliefert. Eine solche Kapselung und zur Verfügungstellung von Klassen nennt man üblicherweise Klassenbiliothek.. Borland zeigt damit den Entwickler, dass es andere Möglichkeiten und vor allem einfachere Möglichkeiten des Entwurfes von Windowsprogrammen gab.
Nun wurde auch Microsoft hellhörig und entwarf ebenfalls eine Klassenbiliothek. Die enthielt den Namen MFC = Microsoft Foundation Classes. Auch diese Klassenbiliothek kapselte die Funktionen der WIN 32 API. Jedoch auf einem anderen Prinzip. Und hier schieden sich die Anhänger. Die Kapselung der OWL war wesentlich komfortabler als die der MFC. Jedoch war dafür der benötigte Speicherplatz größer, den die OWL-Programme brauchten.
Als Fortentwicklung der OWL brachte Borland die VCL heraus. Die Visual-Component-Bibliothek. Diese kapselt nun noch mehr Funktionen der WIN 32 API und ist in einer eigenständigen IDE untergebracht (der C++Builder-Reihe). Die VCL stammt aus der Delphi Welt und wurde für C++ angepasst. Sie setzt erfolgreich die ereignisgrsteuerte Programmeirung um, und ist ein gutes Tool um schnell Programme zu entwickeln. Progammteile können als Komponenten in anderen Anwendungen verfügbar gemacht werden.
Was ist nun besser? MFC von Microsoft oder VCL von Borland
Ohne Zweifel ist die MFC von Microsoft weiter verbreitet. Viele Unternehmen und freie Entwickler setzen auf "das Original". Allerdings bietet die MFC auch nicht soviel Komfort wie die VCL. Egal in welchem Forum man sich umschaut, MFC'ler haben Probleme, die VCL'ler nicht kennen. Allerdings sind die kompilierten Programme der VCL'ler auch um einiger Größer (wer hat Mangel an Speicherplatz?).