Datenaustausch zw Fenstern
-
Hi,
per Menuanwahl öffnen sich 2 Fenster
void CMainFrame::Onkundenverwaltung() { Kunden_verwaltung_open.Create(NULL,"Kundenverwaltung",WS_CHILD|WS_VISIBLE|WS_SYSMENU, CRect(0,0,450,370),this,1000,NULL); Kunden_verwaltung_open.SetWindowPos(&wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); Fahrzeugdaten_open.Create(NULL,"Fahrzeugdaten",WS_CHILD|WS_VISIBLE|WS_SYSMENU, CRect(450,0,900,370),this,1001,NULL); Fahrzeugdaten_open.SetWindowPos(&wndTop,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); }
Im ersten Fenster (Kundenverwaltung) habe ich eine CComboBox, wenn man jetzt da einen Eintrag auswählt, soll im 2ten Fenster etwas in ein CEdit geschrieben werden.
Wie mache ich das ?
Wenn ich es versuche knallt mir immer mein Prog weg.Schön wäre es mit einem kleinen Beispiel.
-
Erstell in dem zweiten Dialog eine CStringvariable und weise diese dem CEditfeld zu. Mach diese öffentlich oder schreib (was besser ist) eine setmethode dazu. Nun kannst du vom ersten dialog über diese Setmethode den Variablewert setzen.
-
Aber das Prob ist, das 2te Fenster zu aktuallisieren, nachdem ich die Variable verändert habe.
Da müstte ich doch OnPaint oder so ähnlich aufrufen, damit meine Sachen auch angezeigt werden.
-
Das Edit malt sich von alleine neu, wenn es einen anderen Text bekommt.
-
Wenn du es über ne Membervariable machst, musst du noch UpdateData(false) aufrufen nachdem du der Variable den neuen Wert zugewiesen hast.
-
Oder du sendest dem andern Dialog eine Nachricht.
-
Ich mache also folgendes im Fenster 1:
Fahrzeugdaten Fahrzeugdaten_update;
fahrzeugdaten_update.SendMessage(?,0,0); //Geht nicht. ? = ka was da rein kommt
oder
fahrzeugdaten_update.Fahrzeugdaten_Baujahr.SetWindowText("1998"); //Geht nicht
oder
Baujahr = "1998"; //Baujahr ist ein CString und GlobalIn Fenster 2 mache ich nachdem ich Baujahr gefüllt habe:
if (strcmp(Baujahr,"") != 0
{
Fahrzeugdaten_Baujahr.SetWindowText(Baujahr); // Geht, wird aber nicht angezeigt
}Wo soll ich denn die Funktion in Fenster 2 einbauen, damit sie neu gezeichnet wird ?
Bei den 2 Versionen
fahrzeugdaten_update.SendMessage(?,0,0);
fahrzeugdaten_update.Fahrzeugdaten_Baujahr.SetWindowText("1998");knallt mir das Prog weg, nachdem der Befehl ausgeführt wurde.
-
Dies ist keine vollständige Lösung sondern nur Ideen...
#define WM_LUSTIG WM_USER + 100 void fensterln() { FensterA *pA = new FensterA(); FensterB *pB = new FensterB(); pB->Create(); pA->Create(); pB->ShowWindow(SW_SHOW); pA->ShowWindow(SW_SHOW); pB->SendMessage(WM_LUSTIG, 1234, NULL); //SendMessage(NACHRICHT, wParam, lParam) .. .. // Löschen nicht vergessen. .. }
FensterB muss jetzt noch eine Methode in der es auf die Nachricht reagiert.
-
Jetzt geht es.