Forum: PC-Programmierung Visual C++ 2008, Fensterübergreifend


von P. F. (pfuhsy)


Lesenswert?

Hallo zusammen,

ich programmiere seit ein paar Wochen ein bisschen mit Visual C++ 2008. 
Ich habe ein Programm geschrieben, welches 2 Fenster hat, das Main.h und 
das Optionen.h. Im Code des Fensters Main.h habe ich mit #include 
"Optionen.h" das andere Fenster eingebunden. Wenn ich das Fenster 
"Optionen.h" geöffnet habe und es z.B. wieder schliesse, möchte ich im 
anderen "Main.h" den Text eines Labels ändern. Wenn ich jetzt im Code 
des Fensters "Optionen.h" genau das selbe vorhabe wie im Main.h nur 
umgekehrt, nämlich include "Main.h" damit ich Zugriff darauf habe, 
bekomme ich vom Compiler ca. 100 Fehler Meldungen. Ich hab es auch schon 
mit namespace::Main::usw versucht, doch da sagt er mir, dass er das 
Fenster gar nicht kennt.

Wie kann ich über das Fenster "Optionen.h" auf Text und andere 
Eigenschaften des Fensters "Main.h" zugreifen und die Werte ändern.

Ich hoffe Ihr könnt mir folgen.

Gruss

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter F. schrieb:
> Ich habe ein Programm geschrieben, welches 2 Fenster hat, das Main.h und
> das Optionen.h.

Das sind Headerdateien, keine Fenster. Vermutlich meinst Du 
irgendwelche Klassen, die wiederum Fenster repräsentieren, und deren 
Deklarationen in den Headerdateien vorliegen.

Anscheinend programmierst Du in "C++/CLI", das ist nicht C++, sondern 
eine Microsoft-Perversion für den .Net-Unterbau (die früher "Managed 
C++" genannt wurde).

Ansonsten solltest Du die Darstellung von Daten von deren 
Speicherung separieren, die Fenster sind nur für deren Darstellung 
zuständig, die Daten aber werden in einem Dokument gespeichert, auf das 
die Fenster über wohldefinierte Zugriffsfunktionen zugreifen.

Das wird als "Document-View"-Konzept bezeichnet, eine Verfeinerung (und 
etwas abweichende Herangehensweise) ist das 
"Document-View-Controller"-Konzept.

von der mechatroniker (Gast)


Lesenswert?

Warum wollen soviele Anfänger mit C++/CLI programmieren? Das Zeug hat 
nur eine einzige Daseinsberechtigung: .NET-Anwendungen und native 
Libraries miteinander verheiraten. Es ohne Not zu verwenden ist was für 
Masochisten. Ich war zum Glück noch nie drauf angewiesen.

von P. F. (pfuhsy)


Lesenswert?

der mechatroniker schrieb:
> Warum wollen soviele Anfänger mit C++/CLI programmieren? Das Zeug hat
> nur eine einzige Daseinsberechtigung: .NET-Anwendungen und native
> Libraries miteinander verheiraten. Es ohne Not zu verwenden ist was für
> Masochisten. Ich war zum Glück noch nie drauf angewiesen.

Sorry, aber das bringt mich kein Milimeter weiter.

Rufus Τ. Firefly schrieb:
> Ansonsten solltest Du die Darstellung von Daten von deren
> Speicherung separieren, die Fenster sind nur für deren Darstellung
> zuständig, die Daten aber werden in einem Dokument gespeichert, auf das
> die Fenster über wohldefinierte Zugriffsfunktionen zugreifen.

...und wie mach ich das ?

von Bruno (Gast)


Lesenswert?

Hallo

Hast du schon eine Lösung?
Willst du die Änderungen nach dem Schliessen des Optionen.h Fensters?
Eine möglichkei wie Rufus geschriben hat wäre, wenn du die Optionen in 
ein separates Dokument, z.B. XML schreibst und wieder ausliest. Vorteil 
ist das du die Daten immer gespeichert hast und beim Starten der 
Anwendung wieder auslesen kannst. XML Dateien sind aber auch leicht "von 
Hand" veränderbar.
Oder: du kannst es in die Registry schreiben.
Oder: Mach im Optionen.h Methoden für die Rückgabe deiner Werte.
In der Main.h kannst du dann die Methoden von optionen.h aufrufen (falls 
OK gedrückt) und die Werte speichern oder was auch immer.

Gruss Bruno

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bruno schrieb:
> Eine möglichkei wie Rufus geschriben hat wäre, wenn du die Optionen in
> ein separates Dokument, z.B. XML schreibst und wieder ausliest.

Das habe ich nicht beschrieben, und auch nicht ansatzweise damit 
gemeint. "Document" bezieht sich nicht zwingend auf eine Datei, sondern 
nur auf ein die Daten verwaltendes Objekt. Ob das seinen Inhalt aus 
einer Datei, einer Datenbank oder was auch immer holt, oder ob es bei 
jedem Programmstart "bei Null" anfängt, ist für die Problemstellung hier 
uninteressant.

von P. F. (pfuhsy)


Lesenswert?

Hallo

Bruno schrieb:
> Hast du schon eine Lösung?

Nein, habe ich nicht.

Bruno schrieb:
> Eine möglichkei wie Rufus geschriben hat wäre, wenn du die Optionen in
> ein separates Dokument, z.B. XML schreibst und wieder ausliest.
> Oder: du kannst es in die Registry schreiben.


So umständlich will ich das nicht machen.
Ich hab vorher mit Visual basic programmiert und das ging ungefähr so:

[frmOptionen.Button.Klick]:
frmMenü.lblLinkStatus.text = "geklickt"
...fertig

In C++ hab ich etwas ähnliches versucht...

[frmOptionen.Button.Klick]:
BTRemote::Main::lblLinkStatus->Text = "geklickt";

..tja, geht aber nicht.

Es kommt nur: "error C2065: 'lblLinkStatus': nichtdeklarierter", 
natürlich, weil es das Label im Fenster >>Optionen<< nicht gibt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.