Problem MFC Anwendung Hilfsklasse behält die Daten nicht bei



  • Hallo,
    ich versuche mal, mich so verständlich wie möglich auszudrücken.
    Der Programmcode ist ziemlich gekürzt.

    Ich habe eine Klasse "daten" erstellt:

    class CDaten  
    {
    	public:
    		CDaten();	// Konstruktor
    		virtual ~CDaten();	// Destruktor
    
    		// Alle benötigten Variablen aus der Eingabemaske "Netzeingabe"
    		double d_nennspannung;
    		double d_ss1;
    		double d_ss2;
    		double d_r_ss1_ss2;
    		double d_r_ss1_ss3;
    		double d_r_ss2_ss3;
    
    		// Nun alle Variablen, die für die Ausgabe notwendig sind
    		double d_U1, d_U2;
    		double d_I12, d_I13, d_I23;
    
    [...]
    

    Hier befindet sich unter anderem die Variable d_I12, auf die ich im Hauptformular zugreifen möchte. Dort möchte ich eine Zeichnung erstellen und benötige den Wert in dieser Variable:

    CString Strom12 = "";
    
    void CPR11View::OnDraw(CDC* pDC)
    {
    	CPR11Doc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    
    	CString strText;
    
    	if(bAnzeige)
    	{
    
    		CPen Blau, Rot, Gruen, Schwarz;
    		Blau.CreatePen(PS_SOLID,2,RGB(83, 134, 139));
    		Rot.CreatePen(PS_SOLID,4,RGB(139, 26, 26));
    		Gruen.CreatePen(PS_SOLID,3,RGB(69, 139, 0));
    		Schwarz.CreatePen(PS_SOLID,4,RGB(0,0,0));
    
    		pDC->SelectObject(&Schwarz);
    		pDC->Rectangle(1,1,999,599);	// Rahmen
    
    		// I12
    		Strom12.Format(_T("%5.5f A"),pDoc->daten.d_I12);
    		pDC->TextOut(300,420,Strom12);
    

    So gebe ich die Variable aus.

    Nachfolgend die Funktion in der ich daten.d_I12 speichere:

    void CNetz::OnOK() 
    {
    
    	// Wir befinden uns im Fenster Netzeingabe. 
    	// OK-Button wurde gedrückt -> Verarbeitung/Speichern der Variablen in der 
    	// Hilfsklase CDaten -> Instanz "daten"
    	CString strText;
    
    	// ----------------------
    	// Variablendeklarationen
    	// ----------------------
    
    	double G12, G13, G23;	// Leitwerte
    	double I;				// Gesamtstrom
    	double I12, I13, I23;	// Strangströme
    	double U1, U2;			// Spannungen aus Knotenpot-Verfahren
    	double phi1, phi2;
    	double P;				// Leitungsverluste
    	double dG;				// Determinante der Leitwertmatrix (skalarer Zahlenwert)
    	double dGinv;			// entspricht 1 / dG
    
    	// Werte aus Formular in Hilfsklasse "daten" speichern
    	UpdateData(true);
    				daten.d_ss1 = m_ss1;
    				daten.d_ss2 = m_ss2;
    				daten.d_nennspannung = m_nennspannung;
    				daten.c_netzbeschreibung = m_netzbeschreibung;
    				daten.d_r_ss1_ss2 = m_ss1_ss2;
    				daten.d_r_ss1_ss3 = m_ss1_ss3;
    				daten.d_r_ss2_ss3 = m_ss2_ss3;
    	UpdateData(false);		
    
    		// Gesamtstrom errechnen
    		I = m_ss1 + m_ss2;
    
    		// Leitwerte ermitteln für Knotenpot-Verfahren
    		G12 = 1 / m_ss1_ss2;
    		G13 = 1 / m_ss1_ss3;
    		G23 = 1 / m_ss2_ss3;
    
    		// Knoten 3 ist auf Masse gelegt. Aus Leitwertmatrix 3x3 wird 2x2!!!
    
    		// Determinante bilden
    		dG = ( (G12+G13) * (G12+G23) ) - ( (-G12) * (-G12) );
    		dGinv = 1 / dG;	// invertieren
    
    		// Potentiale berechnen
    		phi1 = dGinv * (G12 + G23) * m_ss1 - (dGinv * (-G12)  * m_ss2 );
    		phi2 = dGinv * (G12 + G13) * m_ss2 - (dGinv * (-G12)  * m_ss1 );
    
    		// 
    		U1 = ((m_nennspannung * 1000) - (phi1 * sqrt(3))) / 1000;
    		U2 = ((m_nennspannung * 1000) - (phi2 * sqrt(3))) / 1000;
    
    		// Strangströme
    		I12 = ((phi2 - phi1) * G12);
    		I13 = (phi1) * G13;
    		I23 = (phi2) * G23;
    
    		daten.d_I12 = I12;
    		daten.d_I13 = I13;
    		daten.d_I23 = I23;
    [...]
    

    Das Problem ist, dass der Wert nicht gespeichert wird. Könnt Ihr mir sagen, wieso?

    Ich hoffe, das ist einigermaßen verständlich ausgedrückt.

    Gruß,
    Stefan


Anmelden zum Antworten