Wie übergebe ich den Inhalt einer Struktur an eine andere Klasse
-
Hallo,
ich komm mal wieder nicht weiter und benötige eure Hilfe.
Mein Programm besteht aus mehreren Menüs und Dialogen. Außerdem habe ich eine Struktur, auf die ich mittels Zeiger aus den verschieden Klassen heraus zugreifen möchte.
Mein Problem ist jetzt, dass ich entweder die Dialoge über DoModal() erstelle - dann kann ich aber den Zeiger bzw. die darin enthaltene Adresse nicht übergeben.
Versuche ich mit DialogBoxParam den Dialog zu erstellen, kann ich zwar den Zeiger übergeben, aber der Dialog wird nicht angezeigt. Da ich mit MVS2010 C++ eine MFC-Anwendung erstelle, habe ich kein WinMain um bereits im Hauptmenue auf User-Befehle reagieren zu können und damit "hWnd" und "message" zu erhalten.//MView.h class CNewExperiment; typedef struct{ int iExp; int iLData; WCHAR lpLogpath[1024]; WCHAR lpInifile[1024]; WCHAR lpStartfile[1024]; }PROJECT; public: CNewExperiment* m_pNewExp; public: PROJECT Data; PROJECT* pProjectData; protected: LPARAM lParam; //MView.cpp #include "MsbMView.h" #include "Dlg_NewExperiment.h" CMView::CMView() { m_pNewExp = NULL; } // CMView-Meldungshandler ////////////////////////// // Menü-Befehle // ////////////////////////// void CMView::OnDlgNewExperiment() { DialogBoxParam(GetModuleHandle(NULL),L"IDD_NEW_EXPERIMENT",hWnd,(DLGPROC)m_pNewExp->DlgNewExperiment(NULL, NULL,(LPARAM)pProjectData),(LPARAM)pProjectData); } //Dlg_NewExperiment.h #pragma once #include "MView.h" // Dialogfelddaten enum { IDD = IDD_NEW_EXPERIMENT }; CNewExperiment* m_pNewExp; public: int DlgNewExperiment(UINT message,WPARAM wParam, LPARAM lParam); //Dlg_NewExperiment.cpp #include "Dlg_NewExperiment.h" #include "MView.h" int CNewExperiment::DlgNewExperiment(UINT message, WPARAM wParam, LPARAM lParam) { PROJECT* pProjectData = (PROJECT*)lParam; HINSTANCE hInst= AfxGetInstanceHandle( ); DialogBox(hInst,L"IDD_NEW_EXPERIMENT", hWnd,DialogProc(hWnd, message, wParam, (LPARAM)pProjectData)); //Aufruf erzeugt Fehlermeldung return 0; }
Zum Aufruf von "DialogBoxParam()" und "DialogBox()" fehlt mir jeweils "hWnd" und "UINT message" hat auch keinen Wert.
Wenn ich in "CMView::OnDlgNewExperiment()" das Dialogfenster mit "DoModal()" aufrufe, müsste ich dann in "Dlg_NewExperiment()" irgendwie auf meine Struktur PROJECT zugreifen können. Aber wie?
Könnt ihr mir bitte helfen?
Ich hoffe, dass ich nichts wesentliches im Code vergessen habe, ansonsten sagt Bescheid.
Vielen, vielen Dank schon mal im Voraus.
-
class CNewExperiment : public CDialog { public: CNewExperiment( PROJECT* projektdaten, CWnd* parent = NULL ) : CDialog( CNewExperiment::IDD, parent ) , projekt( projektdaten ).......// <- fertig. { ........ } .. .. .. private: PROJECT* projekt; } void CMView::OnDlgNewExperiment() { CNewExperiment experiment( pProjectData ); // Übergabe experiment.DoModal(); }
Die Frage gehört aber in den MFC-Bereich
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Sorry, dass ich im falschen Forum gefragt habe.
Danke für die Lösung. Ich habe den Konstruktor in "Dlg_NewExperiment.cpp" geändert.
Der Aufruf des Dialogfeldes passiert bei mir bisher in "MView.cpp", doch da kommt jetzt die Fehlermeldung:error C2664: 'CNewExperiment::CNewExperiment(const CNewExperiment &)': Konvertierung des Parameters 1 von 'PROJEKT *' in 'const CNewExperiment &' nicht möglich 1> Ursache: Konvertierung von 'PROJEKT *' in 'const CNewExperiment' nicht möglich 1> Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
werd also jetzt erst mal den Aufruf des Fensters in "Dlg_NewExperiment.cpp" verlegen.
Ich hoffe, dass es dann funktioniet und melde mich dann wieder.
Trotzdem erstmal ein großes Dankeschön.
-
Den Aufruf von DoModal() in der Klasse zu machen, die den Dialog behandelt war großer Quatsch. Sorry.
Mein Code sieht jetzt so aus:
void CMView::OnDlgNewExperiment() { CNewExperiment m_pNewExp(pProjectData,NULL); m_pNewExp.DoModal(); }
Allerdings komme ich an die übergebenen Wert von pProjectData in "Dlg_NewExperiment.cpp" nicht ran. Wie geht das jetzt wieder?