VS2005 IDE & MFC
-
Hallo Gemeinde,
habe jetzt seit etwa 3 Monaten VS2005 Prof. und bin eigentlich ganz zufrieden.
Nach der ersten Euphorie sind aber speziell für C++/MFC nicht so viele Neuerungen hinzugekommen. Die Integration des Klassenassistenten in die IDE ist wohl hier die entscheidenste Verbesserung. Was mich jetzt interessiert, ist ob es denn jetzt Möglichkeiten gibt diese Funktionalität auch für eigene Klassen zu nutzen. Was schon mal gut ist, dass Ereignisse und virtuelle Funtionen auch in abgeleiteten MFC-Klassen angezeigt werden (war früher (VS6) nur mit trick 17 möglich) und hinzugefügt werden können. Aber: kann ich denn jetzt auch für meine eigenen Klassen automatisch Funktionsrümpfe für eigene virtuelle Funktionen, Meldungen, etc. erzeugen lassen? Und wenn ja, wie?Viele Grüße,
Connan.
-
connan schrieb:
...(war früher (VS6) nur mit trick 17 möglich)...
Dieser "Trick 17" bei VS6 würde mich sehr interessieren, da ich wohl auch weiterhin mit VS6 arbeiten werde und dies schon oft vermisst habe.
-
Ja bitte, mich interessiert das auch.
Copy&Paste schön und gut, aber das muss eleganter gehen.Wenn die Lösung für VC2003 oder 2005 wäre, hätte ich nen neuen Grund, das VC6 zu beerdigen...

-
Was ist denn Dein Problem. Wenn ich eine abgeleitete Klasse die über Ecken von CPropertyPage abgeleitet wurde dann wird bei mir in den Properties unter Overrides alles angeboten was es bei einem CPropertyPage zu überschreiben gibt. VS2003+VS2005 machen das sehr gut.
IMHO war das in VC6 nie und das nicht mal mit Tricks möglich. Sobald man eine CPropertyPage von einer eigenen Klasse abgeleitet hat, die auf CPropertyPage basierte, dann versagte der Classwizard immer kläglich.
Ganz zu schweigen von Namespaces. Wenn man die verwendete dann hat VC6 nur noch Mist verzapft. Auch das beherscht VS2003 so fast gut, aber nicht immer.
-
Naja, ich habe eigene Basisklassen mit eigenen virtuellen Funktionen, die drin sein MÜSSEN.
Und die muss ich immer kopieren.
Mit der Macke, die du meinst, habe ich mich arangiert. Ich leite direkt von CFormView oder CDocument ab und ändere dann.

-
Martin Richter schrieb:
...Wenn ich eine abgeleitete Klasse die über Ecken von CPropertyPage abgeleitet wurde...
Genau das war auch mein Problem. Schade, ich dachte, hier gibt es eine elegante Lösung (außer einem VS-Update).
-
AndRo67 schrieb:
connan schrieb:
...(war früher (VS6) nur mit trick 17 möglich)...
Dieser "Trick 17" bei VS6 würde mich sehr interessieren, da ich wohl auch weiterhin mit VS6 arbeiten werde und dies schon oft vermisst habe.
Ich weiss gar nicht ob es so tricky ist:
Bei mir treten immer zwei Fälle auf
1.Fall (ich glaub so meinte es estartu)
-Ich füge meinem Projekt eine MFC- Ableitung hinzu bsp.:CMyWnd : public CWnd-Dann möchte ich von CMyWnd 'normal' ableiten meinetwegen CMyWndEx
-tut man das, werden für CMyWndEx im Kontextmenü der Klassenansicht keine virtuellen Funktionen und keine Nachrichten angeboten.Trick: statt CMyWndEx als allgemeine Klasse zu erstellen wird auch CMyWndEx vorerst von CWnd abgeleitet. Jetzt sind noch drei Dinge zu tun:
- in CMyWndEx den Header von CMyWnd includen
- die Elternklasse in CMyWnd umbenennen (.h)
- den MessageMap Eintrag korrigieren (CWnd --> CMyWnd) (.cpp)fertig, im Kontexmenü für CMyWndEx tauchen jetzt Nachrichten und virtuelle Funktionen der MFC-Klasse auf.
2. Fall:
Ich habe Bereits in einem anderen Projekt eine abgeleitete MFC-Klasse die ich weiterverwenden möchte, wenn man aber die Dateien dem Projekt einfach hinzufügt ergibt sich die selbe Problematik wie oben ( keine Nachrichten und Virtuals im Kontextmenu der Klasse)Trick: Klasse als MFC-Klasse im Projekt neu erstellen (gleicher Name, gleiche Basisklasse, gleiche Dateinamen).
Jetzt gibts zwei Möglichkeiten:
1. Projekt schliessen und die erstellten .h und .cpp mit denen der früher erstellten Klasse ersetzten -> fertig
2. Möglichkeit (advanced
): Projekt schliessen und die neu erstellten Dateien einfach löschen. Beim nächsten Projektaufruf wird VS rummeckern und nach den Dateien fragen. Der Clou: Die können jetzt sonstwo stehen und direkt mit den Quelldateien der Ausgangsklasse übereinstimmen. D.h. man kann in allen Projekten die diese Klasse enthalten, die Klasse 'global' verändern (birgt Risiken, liefert aber bei aufmerksamer Benutzung ausgezeichnete Werkzeugklassen) und hat den ganzen 'MFC-Luxus'
zur verfügung.Gruß Connan
-
Noch mal zu meinem Problem
, ich suche schon seit Monaten nach einer Lösung aber finde nicht einmal Leute die das selbe Problem haben
, ich verstehs irgendwie gar nicht. Es ist doch einfach nur nervig ständig die eigenen virtuals neu definieren zu müssen (ihr wisst schon wie ichs meine).
Gäbe es denn vieleicht die Möglichkeit mit Makros und dergleichen so eine Funktionalität zu erreichen? Rein technisch sollte das doch kein Problem sein o.?
-
connan schrieb:
Es ist doch einfach nur nervig ständig die eigenen virtuals neu definieren zu müssen (ihr wisst schon wie ichs meine).
Nein! Verstehe ich nicht. Ich verwende Visual Assist. Der macht mir soviele Vorschläge, dass ich mich gar nicht verschreiben kann...

-
Klar kannst du dir die entsprechenden Makros basteln.

Strg+Shirt+R und dann werden bis zum nächsten Strg+Shift+R alle Tasten aufgezeichnet.Dann noch das Makro benennen und schon kannst du es per Toolbar einfach aufrufen.

Ich mache so immer die Köpfe über die Funktionen. Das andere habe ich mal versucht, aber das is ne ziemliche Fleissarbeit.

-
Sorry, war im Urlaub

@estartu: Du denkst, man würde das mit Makros hinbekommen? Die müsste man dann aber für jedes Projekt und jede virtuelle Funktion neu definieren?
Gibts denn da nicht noch eine andere Möglichkeit über ein AddIn o. so? Das Buch das Microsoft mit VS05 ausliefert macht da solche Andeutungen (mal im Ernst, dieses Buch ist eine Frechheit *hüstel*).
-
Also, das mit dem Tasten aufzeichnen ist Makro-Programmierung für Anfänger.
Das ist ja ne richtige Programmiersprache, bei der man bestimmt auch auf Code-Datenbanken zurückgreifen kann.
Du kannst dir den produzierten Code hinterher auch angucken. So korrigiere ich dann hinterher, wenn ich mich mittendrin vertippt hatte.
Für VC6 könnte ich dir so ein Tool schicken.

Ich müsste mal testen, wie das auf VC2005 reagiert.
Edit: Ich finde nicht, wie man Add-Ins in die Liste bekommt.
Über Bücher von Microsoft schweige ich mal vorsichtshalber...
Die Quote Brauchbar:Unbrauchbar fällt nicht gut aus.
-
Sooo, habs jetzt endlich hinbekommen (bin zumindest auf einem guten Weg
)
Zum AddIn (vs2005):
Bis jetzt funktioniert folgendes:
Man kann in die Deklaration einer Klasse springen (z.B. Doppelclick auf die Klasse in der Klassenansicht) und dann das Addin starten. In einem TreeView wird dann die Klassenhierarchie sämtlicher Basisklassen mit sämtlichen virtuellen Funktionen angezeigt. Mit Doppelklick auf die entsprechende Funktion wir der Prototyp im Header der Klasse gesetzt und die Definition erstellt
Bei ein paar Sachen komme ich aber nicht so richtig weiter und brauch mal wieder Hilfe
:1. Leider wird die Definition der entsprechenden Funktion im Header der Klasse erstellt. VCCodeClass.AddFunction hat zwar einen Parameter Location nur hab ich damit keinen Erfolg

2. Würde ich gern das AddIn im Kontextmenü der Klassen (Rechtsklick auf eine Klasse der Klassenansicht) verankern. Dazu fehlt mir jedoch zum einen der Zugriff auf eben jenes Menu zum anderen der Zugriff auf die gewählte Klasse. Die Klasse wird im Moment noch über die Textselection bestimmt.
Habt schon mal vielen Dank für eure Hilfe. Wenn jemand Lust hat lad ich das Projekt auch gern mal hoch.
p.s. gehört jetzt irgendwie nur noch indirekt ins MFC Forum (c#- AddIn), vieleicht verschieben

-
estartu schrieb:
Klar kannst du dir die entsprechenden Makros basteln.

Strg+Shirt+R und dann werden bis zum nächsten Strg+Shift+R alle Tasten aufgezeichnet.Dann noch das Makro benennen und schon kannst du es per Toolbar einfach aufrufen.

Ich mache so immer die Köpfe über die Funktionen. Das andere habe ich mal versucht, aber das is ne ziemliche Fleissarbeit.

Köpfe über Funktionen macht bei mir die Autotext-Funktion von Visual Assist
.
-
connan schrieb:
Sooo, habs jetzt endlich hinbekommen (bin zumindest auf einem guten Weg
)
Zum AddIn (vs2005):
Bis jetzt funktioniert folgendes:
Man kann in die Deklaration einer Klasse springen (z.B. Doppelclick auf die Klasse in der Klassenansicht) und dann das Addin starten. In einem TreeView wird dann die Klassenhierarchie sämtlicher Basisklassen mit sämtlichen virtuellen Funktionen angezeigt. Mit Doppelklick auf die entsprechende Funktion wir der Prototyp im Header der Klasse gesetzt und die Definition erstellt
Bei ein paar Sachen komme ich aber nicht so richtig weiter und brauch mal wieder Hilfe
:1. Leider wird die Definition der entsprechenden Funktion im Header der Klasse erstellt. VCCodeClass.AddFunction hat zwar einen Parameter Location nur hab ich damit keinen Erfolg

2. Würde ich gern das AddIn im Kontextmenü der Klassen (Rechtsklick auf eine Klasse der Klassenansicht) verankern. Dazu fehlt mir jedoch zum einen der Zugriff auf eben jenes Menu zum anderen der Zugriff auf die gewählte Klasse. Die Klasse wird im Moment noch über die Textselection bestimmt.
Habt schon mal vielen Dank für eure Hilfe. Wenn jemand Lust hat lad ich das Projekt auch gern mal hoch.
p.s. gehört jetzt irgendwie nur noch indirekt ins MFC Forum (c#- AddIn), vieleicht verschieben

Keiner eine Idee?

Estartu?
-
Soo, ist jetzt der letzte Versuch (Versprochen).
Ich hab mal in dem jetzigen Zustand (siehe oben) ein bisschen getestet und bis jetzt hat sich das AddIn als sehr angenehm erwiesen. So sind bei mir zum ersten mal Interfaces eine wirkliche Erleichterung: Vom Interface ableiten und per Klick die abstrakten Methoden definieren
.
Was im Moment aber noch am meisten stört ist, daß man die Funktionsdefinition
z.B.:void CFoo::Bar(void) { }per Hand aus dem Header in die cpp verschieben muß. Wenn dazu jemand eine praktikable Lösung hätte...

Ein kleineres Problem habe ich mit dem Addin-Projekt an sich, wenn ich das Projekt auf einen anderem Rechner erstelle ist das AddIn nicht verfügbar, selbst wenn ich die zugehörige AddIn-Datei mit übernehme

Irgendwie scheint vom ganzen VS die AddIn-Geschichte am wenigsten dokumentiert zu sein

Bin wirklich für jede Hilfe dankbar!
connan
-
Soo, hab das Addin noch etwas erweitert, so, daß auch die Möglichkeit zur Auswahl der CToren besteht (CTor Überschreibungen duchzuschleifen ist doch immer sehr lästig).
Zum Problem im vorherigen Post hab ich immer noch keine Lösung gefunden, aber es muß irgenwie gehen, verdammt nochmal.Ein kleineres Problem habe ich mit dem Addin-Projekt an sich, wenn ich das Projekt auf einen anderem Rechner erstelle ist das AddIn nicht verfügbar, selbst wenn ich die zugehörige AddIn-Datei mit übernehme
Das hat sich inzwischen gelöst, das Problem war, dass ich die .Addin Datei nicht mit übernommen hatte, als auch die dll falsch referenziert wurde.
-
Hier mal ein Screenshot: http://wwwpub.zih.tu-dresden.de/~sb821288/vfaddin.png
Im Fenster werden alle virtuellen Funktionen der Elternklassen dargestellt, mit Doppelklick wird der Funktionsrumpf zur ausgewählten Klasse hinzugefügt.