Anfänger Braucht Hilfe
-
ich habe jetzt immer alles mit Dialogen gemacht und nur einer klasse, jetzt will ich zwei haben.
ich möchte in einer klasse mein Dialog haben mit paar Kleinigkeiten und in der zweiten klasse eine liste erstellen mit allen Funktionen. also eine klasse nur für die liste und die dann auf den Dialog aus der ersten klasse zu positionieren. ich finde aber in meinem buch nichts dafür und mit google komme ich auch nicht weiter.
Kennt da einer ein Beispiel kann auch ohne Beschreibung sein, nur ein Programm was läuft, damit ich es mir anschauen kann???Grüße,
der CPP_Dau
-
Wie meinst du das jetzt genau. Willst du die Dialogfeldsteuerung (OnButtonClick etc...) und deine Daten die du anzeigen willst in unterschiedlichen Klassen unterbringen? Wenn ja dann

Wenn ich das richtig verstanden hab dann schau dir mal das Beispiel an (mit Eigener Klasse zum Datenspeichern und den jeweiligen Funktionsaufrufen in den Buttonfunktionen etc...):
//////////////////////////////////////////////////////////////////////// //Daten.h class Daten //klasse für irgendwelche Daten, Implementierung spare ich mir jetzt { public: CString GetName(); void SetName(CString Name); private: CString m_Name; } //////////////////////////////////////////////////////////////////////// //Dialogfeldklasse.h #include "Daten.h" class Fenster : public CDialog //dein Dialogfenster { //... Viele vom Assistenten erzeugten Funktionen //eigenes Zeug private: Daten m_Daten; //noch mehr Assitenten Code } //////////////////////////////////////////////////////////////////////// void Fenster::OnButtonAnzeigen() // irgendein Button auf deinem Dialogfenster { m_sEditFeld = Daten.GetName();//einem Editfeld den in Daten gespeicherten Namen zuweisen //m_sEditFeld = Membervariable (CString) von so einem Feld UpdateData(FALSE); }Also du brauchst dir eigentlich nur eine Klasse für deine Daten erstellen. Die notwendigen Get...() und Set...() Methoden hinzufügen. Diese Klasse in deinem Dialogfenster inkludieren (in der *.h Datei) und an den richtigen Stellen die Get...(), Set...(), BerechneWas() oder Machsonstwas() Methoden aufrufen.
-
Sowas änliches habe ich auch gemacht, ich hatte alles in ener klasse was auch funktionier hat, jetzt wollte ich das übersichtlicher haben und wollte für die liste eine neue klasse machen, wo ALLES was mit der liste zutun hat reinkommen, aufbau, button anfrage, aufbau und layout.
es kommt aber ein fehler und ich habe keine ahnung wieso, aber ich weiss wann.void myList::Init() { ... m_myList.SetImageList(pmyImageList, LVSIL_NORMAL); .. }Fehler:
Debug Assertion Failed! ... File: f:\vs70builds\...\afxcmn.inl Line: 260 ...
-
CPP_Dau schrieb:
jetzt wollte ich das übersichtlicher haben und wollte für die liste eine neue klasse machen, wo ALLES was mit der liste zutun hat reinkommen, aufbau, button anfrage, aufbau und layout.
Um was für eine "Liste" geht es überhaupt. Eine Liste deiner Daten?
-
es geht um eine CListCtrl.
-
wenn ich dich richtig verstanden habe, willst du eine eigene ListCtrl-Klasse erstellen, mit neuen funktionen?!
du musst erstmal deine eigene listctrl von der mfc-klasse ableiten:
class CMyListCtrl : public CListCtrl { //.... }; class CMyDialog { //.... CMyListCtrl m_list; };dann musst du in der dialog-klasse deine neue ctrl noch einbinden,
dazu die funktion "OnInitDialog" überschreiben und die funktion "SubclassDlgItem" aufrufen (IDC_LIST musst du durch deine Control-ID für die Liste ersetzen)CMyDialog::OnInitDialog () { //.... m_list.SubclassDlgItem (IDC_LIST, this); //.... }
-
danker, aber der meckert immernoch bei
InsertColumn(0, _T("Status"));die MEssageBox wird ausgegeben
CmyList::CmyList() { // TODO: Add extra initialization here MessageBox("Run", "Aaarrgh", MB_ICONSTOP ); InsertColumn(0, _T("Status")); ... }Fehler:
Debug Assertion Failed! ... File: f:\vs70builds\...\afxcmn.inl Line: 260 ...
-
Das kann nicht fuktionieren. Wenn das List Objekt erzeugt wird heißt dass noch nicht, dass Dein Window existiert.
-
also muss ich nach dem ich das programm gestartet habe und manuel (durch einen button clicken) die daten in die liste laden.
wenn das richtig ist, dann ist schon mal gut, bin dann nicht ganz blöd, aber ich würde doch schon gerne die daten direkt nach dem start haben.
-
Dann erstelle doch eine neue Funktion in der ListCtrl Klasse der die Daten in dein ListCtrl einfügt und ruf die Funktion in der OnInit deines Dialoges auf.
Gruß