MFC8 auf MFC9... irgendwie
-
Hallo zusammen,
folgendes Szenario:
Die Firma in der ich beschäftigt bin hat ein Programm, das auf die MFC8 aufbaut. Ursprünglich unter VC6 geschrieben wurde es vor 2 Jahren auf VC2008 portiert. Seit diesem Jahr bin ich in der Firma tätig und soll nun Möglichkeiten ausloten, die jetzige Applikation (ca. 1,2 Millionen Zeilen Code, altbackene Optik) optisch aufzubessern. Natürlich wäre es sehr schön, Aero-ähnliche Dinge im Fenster realisieren zu können, aber es scheint alles nicht so einfach zu sein, wie man es gerne hätte.Da ich eigentlich eher der .NET und C#-Typ bin, tu ich mir hier natürlich sehr schwer, in dem alten und sehr schlecht kommentierten Code rumzuwühlen. Es sieht vor allem so aus, dass diverse Basisklassen wie CButton oder CStatusBar bereits beerbt und als neue Klassen eingesetzt wurden. Teilweise sogar mehrfach beerbt. Nun bin ich, naiverweise, davon ausgegangen, dass ich mit der MFCNext (oder eben MFC9) relativ schnell zu dem Ergebnis komme, dass die ganze Applikation in einem Office2007-Look erstrahlen könnte. Das Tutorial mit der Scribble-Applikation funktioniert zwar bei kleinen Beispiel-Projekten wunderbar, allerdings sobald die Basisklassen rege beerbt wurden, will alles nicht mehr so recht funktionieren.
Jedenfalls bin ich wie in den Tutorials vorgegangen, habe die angegebenen Basisklassen von ihren neuen Vertretern erben lassen und schon bekomme ich die schönsten Stackoverflows, nicht weiter beschriebenen Fehler und andere Dinge, die mir graue Haare wachsen lassen.
Nun meine eigentliche Frage, nach so viel Geschwätz: Gibt es weitere Tutorials, die auch mögliche Probleme eher ansprechen bei der Migration zu MFC9? Gibt es vielleicht sogar Toolkits, die hier etwas benutzerfreundlicher sind? Oder gibt es irgendwelche anderen Tips oder Ratschläge, die mich hier ein bisschen weiterbringen könnten?
Kleine Anmerkung noch: Die Applikation soll neu in C# geschrieben werden. Allerdings ist der Zeitplan für diese Arbeit auf 1,5-2 Jahre angelegt und es soll auf Basis des alten Programms noch eine optisch aufgebesserte Zwischenversion geben.
Danke im Voraus für die aufgebrachte Zeit.
Grüße
-
Eigentlich ist nicht viel mehr notwendig als von den Ex Klassen abzuleiten.
Die Frage ist, ob Du dann auch wirklich brav überall die neuen Basisklassen eingetragen hast, besonders in den Message-Maps.Mehrfaches Ableiten von CObject-Klassen ist unmögich und verbietet sich in der MFC. Alle Lösungsansätze dazu sollte man sofort in die Tonne treten.
Ein Tutorial gibt es eignetlich nicht dazu, weil es eigentlich zu einfach ist
, oder sagen wir: Ich kenne keines.
Am Besten Du gehst mal selber an die Unterschiede heran und baust eine MFC Applikation mit dem Wizard. Einmal mit MFC-Next einmal ohne. Dann vergleiche die Unterschiede mit WinMerge oder was passendem.
Du wirst sehen: So viel ist da nicht zu machen.Was Deine Stack-Ovewrflows angeht und andere Probleme: Schrittweises lösen hilft. Ein Problem nach dem anderen.
Ich würde Dir raten erstmal nur das CMainFrame umzustellen, inkl. der beinhalteten Bars. Dann erst an andere eingebetete Toolsbars.
Ich nutze immer noch die BGC-Library (Software des Lizenzgebers für MFC-Next) und ich empfand die Umstellung extrem einfach..., wobei es lästerliche Stimmen gibt, die mich jetzt schon als Johannes Hesters der MFC bezeichnen...
-
Vielen Dank für die ausfühliche Antwort. Also hilft wohl nur, Zähne zusammenbeissen und so lange durchziehen, bis es wieder läuft
-
Ich kann wirklich nur raten: Gehe schrittweise vor!
Ansonten ist das Zeugs eigentlich exrem stabil und für einen (MFC :D) Entwickler auch transparent...
-
Bredley schrieb:
Kleine Anmerkung noch: Die Applikation soll neu in C# geschrieben werden. Allerdings ist der Zeitplan für diese Arbeit auf 1,5-2 Jahre angelegt und es soll auf Basis des alten Programms noch eine optisch aufgebesserte Zwischenversion geben.
Darf ich mal fragen wieviele Programmierer an der C#-Version arbeiten werden? 1.2 MLoc sind ja schon sehr ordentlich.
-
Zwischen 1 und 3 Arbeitern werden an dem neuen C#-Programm arbeiten. Dabei wird aber nicht das alte 1:1 portiert, sondern alles von Grund auf neu entwickelt. Der gesamte Codemüll im alten Programm wandert dann endlich über Bord und etliche Funktionen, die .NET von Haus aus schon bietet müssen ebenfalls nicht mehr selbst geschrieben werden. Da das Programm über 10 Jahre gewachsen und schlecht dokumentiert ist, sind auch einige Funktionen doppelt unter verschiedenen Namen in verschiedenen Dateien vorhanden, riesige Codeblöcke auskommentiert, nur um sie beinahe unverändert direkt darunter wieder einzufügen usw. Ein recht chaotisches Gebilde also.
Da wir aber noch kaum Erfahrung haben, was das Neuentwickeln eines Projekts dieser Größe angeht, hoffen wir einfach mal, dass wir da einigermaßen realistisch planen
-
Naja. Bei 1.2 Mio Zeilen an Code glaube ich kaum, dass man soviel sparen kann was .NET von zu Hause mitbringt. Vieles wird dort weitaus komplizierter in der UI, was in der MFC schon drin ist und .NET nicht kann.
Besonders was UI lastige Sachen angeht sehe in .NET und WinForm keine großen Vorteile.
-
Ich arbeite seit 8 Monaten an nun 35 kLoc (ohne den autogenerierten Winforms-Designermist)
Was soll ich sagen: Viel Glück
-
Martin Richter schrieb:
Ich kann wirklich nur raten: Gehe schrittweise vor!
Ansonten ist das Zeugs eigentlich exrem stabil und für einen (MFC :D) Entwickler auch transparent...Jippiee, ein Teil hat jetzt funktioniert. Nun muss ich noch rausfinden, wie ich bei den Childframes die Titelleisten wieder wegbekomme, da die jetzt plötzlich vorhanden sind. Aber vielen Dank schonmal für den Tip
-
Hm, irgendwie bekomme ich die Titelleisten nicht weg. Die Anwendung ist eine Doc-View-Anwendung und die Ansichten waren bisher ohne Titelleiste eingeblendet. Nach dem Ersetzen der Basisklassen (und nach Setzen des LunaBlue Themes) sind diese nun wieder da und ich kann sie nicht ausblenden. ~WS_SYSMENU und ~WS_CAPTION funktionieren nicht und sonst finde ich keine Infos dazu
-
Wo? MDI? Ist das eine zusätzliche Leiste?
Ansonsten PreCreateWindow in der Child Klasse für die MDI-CHilds überschrieb und evtl. dort ändern. Ich bin mir aber nicht sicher ob WS_CAPTION in MDI-Child Windows nicht pflich sind...
-
Das komische ist halt, wenn ich CMFCVisualManagerOffice2003 nutze, sieht es so aus, wie es aussehen soll. Mehrere angeordnete Fenster ohne Titelleisten. Stelle ich das Ganze auf Office2007 um (LunaBlue oder Obsidian), haut es mir die Leisten einfach rein. Ich gehe einfach mal davon aus, dass ich irgendwie zu doof dazu bin, aber ich hoffe immer dazu, dass jemand schonmal ein ähnliches Problem hatte und es ganz einfach lösen konnte