Anfängerfragen zu den MFCs

Hallo zusammen,

ich möchte nach meinen Erfahrungen mit VB6 nun auf VC++ umsteigen. Dieser Schritt ist komplizierter als ich ihn mir zunächst vorgestellt habe, da ich nicht damit gerechnet habe, dass mir VB6 bisher soviel Arbeit abgenommen hat. Nundenn, was solls - da muss ich jetzt durch :smile:

Ich habe einige konkrete Fragen zu einem Beispielprogramm aus der MSDN: saver.exe, das Beispielprogramm zum Screensaver.

Mittlerweile habe ich schon einiges selbst herausgefunden, aber eben noch lange nicht alles:

In CSaverApp::InitInstance werden je nach Kommandozeilenoptionen die Klassen CSaverDlg, CSaverWnd oder CDrawWnd instanziiert. Welche Funktion ruft die Zeile pWnd->Create(…) für die Option „/p“ eigentlich genau auf. In CDrawWnd ist kein Create(…) mit 5 Parametern deklariert. Die Implementierung der Create-Methode in CDrawWnd finde ich auch seltsam. Warum wir in der Create-Methode die Mthd. CreateEx aufgerufen? Es handelt sich bei dieser Funktion offenbar auch nicht um eine Ereignisfunktion, da sie nicht OnCreate heißt, oder? Meiner Ansicht nach dürfte sie daher erst gar nicht aufgerufen werden (wegen der unterschiedlichen Anzahl der Parameter).

In CDrawWnd::open_mouth:nPaint wird mit CPaintDC dc(this) ein neuer Gerätekontext instanziiert. Ich dachte immer, dass man sich einen Gerätekontext geben lassen müsste (GetDC o.ä.) , den man für kurze Zeit benutzen darf und danach mit ReleaseDC auf jeden Fall wieder freigeben müsste. Wie genau funktioniert das hier? Und was soll der Hinweis „Do not call CWnd::open_mouth:nPaint […]“ usw.?

Tja, Fragen über Fragen. Mir würden glatt noch mehr einfallen, aber wenn mir jemand schon einmal die oberen Fragen beantworten kann, wird mir das sicher schon sehr weiterhelfen!

Vielen Dank!
Marcel