Ich verstehe das mit den Klassen nicht
-
Hi,
ich setze mich etwas mit MFC auseinander, verstehe aber ein paar wichtige
Sachen noch nicht.Wenn ich eine dialogbasierende Anwendung erstelle und eine Klasse hinzufüge,
dann muss ich ja einen Typ dazu angeben. Nehme ich CDialog, dann wird auch ein
Dialog mit erstellt.Was ist, wenn ich einfach eine Klasse haben möchte, die keinen Dialog voraus-
setzt, aber mit der Hauptklasse (die ja einen Dialog hat) zusammenarbeiten soll?Ich habe es mit dem Typ CWnd probiert. Dann habe ich meine neue Klasse in der
xyzDlg.cpp des Hauptdialoges bekannt gemacht und eine Instanz erzeugt.
Ich kann dann auch auf die Funktionen der neuen Klasse zugreifen.Nur leider erhalte ich beim Kompilieren diesen Fehler:
'IDD_QWE': nichtdeklarierter Bezeichner
Das kommt in der neuen Klasse (Typ CWnd) in der "qwe.h"
Anonsten kommen keine Fehler. Kann mir das jemand erklären?
-
Kleiner Nachtrag der wichtig sein könnte.
So sieht die qwe.h aus:
#pragma once // qwe-Dialogfeld class qwe : public CDialog { DECLARE_DYNAMIC(qwe) public: qwe(CWnd* pParent = NULL); // Standardkonstruktor virtual ~qwe(); //Hier kommt der Fehler: //########################### // Dialogfelddaten enum { IDD = IDD_QWE }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung DECLARE_MESSAGE_MAP() public: //meine Testfunktion :-) int cool(CString aa); };
-
du solltest dich vielleicht mal mit den grundlagen der oop beschäftigen und tutorials/bücher dazu durcharbeiten.
du musst eine klasse nicht zwingend von etwas wie CDialog oder CWnd ableiten...
du kannst auch eine eigene klasse so deklarieren:
public CMeineSupertolleKlasse { protected: BOOL FunktionProt1(); BOOL FunktionProt2(); private: LPCSTR FunktionPriv1(); BOOL FunktionPriv2(); bool m_bMember1; string m_sMember2; public: LPCSTR FunktionPub1(); LPCSTR FunktionPub2(); };usw...
lern erstmal richtig die oop.
zu deinem fehler: in der resourcendatei muss natürlich deine dialog-id definiert sein, sonst kennt der compiler das nicht.
am besten du liest auch nen tut zur mfv

-
Hi, ja ich beginne erst und habe nur ein Buch hier (OOP für Dummies).
Ich erstelle eine neue MFC-Klasse über den Assistenten. Dort muss ich ja
eine Basisklasse angeben. Und dabei wird dann auch diese IDD_QWE in der *.h
mit angelegt. Für was genau ist denn das
Deine Beispielklasse bezieht sich wohl darauf, wenn man ohne den Assi etwas
anlegt?!Mag sein, dass meine Fragen blöde sind, aber ich stehe wirklich noch total am
Anfang und habe noch jede Menge zu lernen
-
So, ich glaube ich habe es verstanden!
Ich muss eine "Allgemeine Klasse" anlegen um mein Vorhaben umzusetzen.
Wenn ich Standardfunktionen der MFC verwenden will KANN ich auf die MFC-Basis-
Klassen zurückgreifen muss ich aber nicht

-
korrekt
-
Ich glaub'
Axcel != Axcel
greetz, Swordfish
-
Dort muss ich ja eine Basisklasse angeben.
Wenn ich schreibfaul bin, und denn Assistenten nutze, leite ich allg. (MFC-)Klassen oft von CObject ab.
-
Tester2 schrieb:
Dort muss ich ja eine Basisklasse angeben.
Wenn ich schreibfaul bin, und denn Assistenten nutze, leite ich allg. (MFC-)Klassen oft von CObject ab.
CObject??
-
Ich behaupte einfach mal, dass ich OOP verstanden habe - ich hab fürs Studium ein paar mal Java programmiert.
Allerdings kann ich nicht behaupten, dass der Einstieg in c++ und noch dazu mit mfc leicht gewesen wäre. Die ganzen Sachen die schon durch die Assistenten vorgegeben sind...