PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++, MFC] Datenübergabe an Dialog


EGG-Beater
2011-08-11, 21:22:31
Ausgangssituation:
Ich habe ein Fenster mit einer Liste in der sich verschiedene Einträge befinden.
Wird ein Eintrag angeklickt, soll sich ein neues Fenster öffnen. Der Inhalt dieses neuen Fensters hängt davon ab, was ausgewählt wurde.

Vllt Lösung:
Ich dachte mir bisher, die einfachste Lösung wäre, ich speicher mir beim Anklicken eine ID des ausgewählten Eintrags und benutze diese ID, um die Datenfelder im sich öffnenden Dialog zu füllen. (Es gibt im Hintergrund eine Textdatei, welche die tatsächlichen Daten enthält.)

Problem:
Ich bin nicht so ganz sicher, wie man das am elegantesten macht.

- Schreibe ich die ID als Variable in die Klasse des Ausgangsfensters und übergebe sie als Parameter dem Mausklickevent?
--> Ich würde dann mit Hilfe der übergebenen ID in der Dialogklasse die Daten aus der Textdatei extrahieren.

- Baue ich mir eine neue Klasse als "Container" für einen Datensatz, fülle ihn beim Mausklickevent und übergebe das Objekt an den Dialog?
--> Der Dialog müsste die Daten Stück für Stück aus dem Objekt übernehmen.

Bedingung:
Die verschiedenen Daten in der Textdatei sind nicht alle gleichen Typs. Manche bestehen aus vielen, andere aus wenigen Parametern.


Falls jemand mit sowas Erfahrung hat oder einfach nur eine Idee bezüglich der Herangehensweise: Immer her damit. :)
Irgendwie zusammengefrickelt bekomme ich es zur Not sicher. Aber wenn möglich, soll es am Ende doch ein bisschen ordentlich sein.

Ectoplasma
2011-08-13, 09:11:26
- Baue ich mir eine neue Klasse als "Container" für einen Datensatz, fülle ihn beim Mausklickevent und übergebe das Objekt an den Dialog?
--> Der Dialog müsste die Daten Stück für Stück aus dem Objekt übernehmen.


Man könnte sich viele Lösungen vorstellen. Ohne mir jetzt eine bestimmte ausgedacht zu haben, würde ich aber dennoch den zweiten Ansatz wählen. Du nennst es "Container", ich würde es vielleicht eher Modell nennen. Dieses bildet schließlich die Organistaion der Daten ab. Das befüllen dieser Struktur sollte ausserhalb eines Views geschehen, weil es auf diese Weise wiederverwendbar wird. Meine Empfehlung ist, Dialog bzw. Views so "dumm" wie möglich zu halten.

Bud Spencer
2011-08-14, 17:45:36
Also in Textdateien verschieben bedeutet immer ein Festplattenzugriff, was immer eine schlechte Performance mit sich bringt. Daher würde ich den 1. Ansatz nicht nehmen.

Besteht nicht die Möglichkeit aus dem Programmcode aus auf den aktiven Dialog, direkt auf die Steuerlemente zuzugreifen? Hat man im aufgerufenen Programmcode nicht die Möglichkeit über MFC-Bibliotheken einen Zeiger auf den aktiven Dialog zu bekommen - oder derart? U.U. klappt es ja mit Fenster-Ids. Jedes grafische Fenster in Windows hat eine eindeutige Guid - oder wie sie sich noch nennt...

Ich kann auch nichts Genaueres sagen, weil meine MFC-Programmiererei weit in der Vergangenheit liegt - habs einfach vergessen...

EGG-Beater
2011-08-15, 11:43:24
Also in Textdateien verschieben bedeutet immer ein Festplattenzugriff, was immer eine schlechte Performance mit sich bringt. Daher würde ich den 1. Ansatz nicht nehmen.
An dem Zugriff kommt man hier sowieso nicht vorbei. Die Liste im ersten Fenster kann nur mittels dieser Datei befüllt werden. Man könnte nur noch darin differieren, ob jetzt nur ein mal oder zwei mal zugegriffen wird. Es wird übrigens nur aus der Datei gelesen, nicht in die Datei geschrieben.

Besteht nicht die Möglichkeit aus dem Programmcode aus auf den aktiven Dialog, direkt auf die Steuerlemente zuzugreifen? Hat man im aufgerufenen Programmcode nicht die Möglichkeit über MFC-Bibliotheken einen Zeiger auf den aktiven Dialog zu bekommen - oder derart? U.U. klappt es ja mit Fenster-Ids. Jedes grafische Fenster in Windows hat eine eindeutige Guid - oder wie sie sich noch nennt...
Also diese Dinge gehen vermutlich schon. Ich hab selbst wenig Ahnung von MFC. Aber mir wird noch nicht klar, wie sehr mir das hilft. ;)

Davon abgesehen schonmal Danke für die Meinungen.

Bud Spencer
2011-08-15, 12:05:18
Naja, es ist ein anderer Weg :)
Kann aber leider nicht aus dem Stegreif abwägen, was der bessere Weg ist.

EGG-Beater
2011-08-15, 12:18:03
Ok, anders: Ich verstehe nicht, was genau du überhaupt meinst. Was mache ich, wenn ich in der einen Ansicht einen Zeiger auf die andere habe?

Bud Spencer
2011-08-15, 12:21:36
Es geht doch hier um die Datenübergabe an ein Dialog: Mein Gedanke war, ob man nicht aus x-beliebigem Programmcode heraus mit einem Zeiger auf den Dialog, u.U. auf die einzelnen Steuerlemente, Zugriff hätte, so dass du beispielsweise von einem Textfeld die Daten direkt lesen könntest bzw. in ein Textfeld Daten reinschreiben könntest.

EGG-Beater
2011-08-15, 12:44:09
Ok, das wäre bestimmt irgendwie möglich. Klingt für mich aber ehrlich gesagt kompliziert.
Problem besonders: In der Liste am Anfang stehen verschiedenste Arten von Einträgen. Der sich öffnende Dialog ist je nach Art des gewählten Eintrags ein ganz anderer.

Man kann sich das so vorstellen, wie wenn man in einem Programm die Optionen öffnet und dort dann verschiedene Tabs zu verschiedenen Themen hat. Jeder Tab enthält andere Elemente als die anderen.

Und es gibt in dem Programm schon ne ganze Reihe verschiedener Einträge.

Bud Spencer
2011-08-15, 13:37:36
Ich denke, dass du schon eine Vorstellung hast wie du es implementieren könntest.


Baue ich mir eine neue Klasse als "Container" für einen Datensatz, fülle ihn beim Mausklickevent und übergebe das Objekt an den Dialog?
--> Der Dialog müsste die Daten Stück für Stück aus dem Objekt übernehmen.


Ersteres würd ich halt nicht nehmen wegen des häufigen Festplattenzugriffs. Zu Beginn eines Programms einmal auf die Festplatte zu greifen ist ok, natürlich. Aber man sollte stets häufige Zugriffe vermeiden, wenns geht. Bei deinem Programm wird kein PC in die Knie gehen, wenn es häufig auf die Platte greifen würde, womöglich merkst du häufige Plattenzugriffe gar nicht. Ich richte mich persönlich aber immer daran, dass ich Festplattenzugriffe möglichst minimal halte.

Du weißt schon, was du tun willst und wie dus tun willst. Tus einfach :)

EGG-Beater
2011-08-15, 13:39:36
Jopp, ich werde versuchen, das zu vermeiden. Danke für den Hinweis, auf dem Radar hatte ich das Thema nämlich nicht.