Neue View öffnen?

Skandalos

Grünschnabel
Ich möchte bestimmte Daten auf Mausklick grafisch darstellen und dazu eine neue CView-Klasse anlegen, die ich dann bei Bedarf mit new generiere und später wieder kille.

Leider erlaubt mein MFC-Projekt mir nicht, die View zu generieren, da ihr Konstruktor protected ist. Wie kann ich denn nun eine neue View erzeugen?

Hab ein bischen mit CWnd rumgespielt, hat aber leider massig Nachteile. Am liebsten wäre mir ein Window, welches nicht auf den Frame der Anwendung beschränkt ist (also kein Child) und seine eigene Instanz auf der Taskleiste bekommt. Wie gehtn sowas?

Hab mir in der MSDN einen Wolf gesucht aber nichts gefunden.
 
Hi,
CView ist ein Runtime_Class, deswegen geht das nicht. Ich hab leider nicht genau verstanden was du machen willst, aber schau dir mal folgendes an:

http://www.cpp-tutor.de/mfc/mfc/kap4/tut/tut5.htm

Da wird die derzeitige View vom Dokument und dem Mainframe "abgekoppelt" und statt dessen eine andere "angekoppelt"

Allerdings ist die neue View immer noch im Rahmenfenster. Wenn du das nicht haben willst, nützt mein Vorschlage nichts..

Grüße Squeegee
 
Zuletzt bearbeitet:
Mein Problem ist, daß ich die MFC nicht wegen der View/Doc-Geschichte verwende, sondern nur aus Bequemlichkeit, weil viele ihrer Klassen recht einfach zu benutzen sind. Der Preis dafür ist aber - wie ich feststellen muß - leider recht hoch.

Meine Hauptview ist eigentlich keine View, ich erzeuge im Hauptrahmen lediglich einen großen statischen und nicht-modalen Dialog, der weitere nicht-modale Dialoge dynamisch öffnet und schließt, eine Art komplexe Schalttafel. Gelegentlich sollen Daten auf Knopfdruck graphisch dargestellt werden, die Änderungen durc die Steuerungen sollen in Echtzeit in der Grafik (always on top) sichtbar sein. Dazu brauche ich ein simples Fenster mit Schließen-Icon, Scroll-Leisten und Graphik-Kontext. Hinzu kommt, daß pDoc von mir nicht benutzt wird. Alle verwendeten Daten werden innerhalb der Dialog-Klasse erzeugt, geladen und gespeichert. Allerdings benutze ich zur Steuerung auch das Menü des MainFrame sowie die Tool-Leiste und die Status-Leiste.

Danke für Deinen Lesetip, sehr interessant. Die Frage ist nur, wie ich von einer derart erzeugten zweiten View für pDoc (was ja bei mir praktisch leer ist) auf die innerhalb der ersten View erzeugten Daten Zugriff bekommen soll.

Habe bisher für mein Popup-Fenster eine Fensterklasse von CWnd abgeleitet, nur funktioniert das alles nicht gut. Das Fenster ist, obwohl so nicht deklariert, ein Child des MainFrame, hat nie den Focus, obwohl es permanent on top ist (ich vermute, der Mainframe gibt den Focus immer der View), die Scrollleisten funktionieren nicht, ein ziemlicher Murks. Ich könnte das Fenster statt mit Create auch mit CreateEx als Toplevel Fenster erzeugen, aber dann muß ich eine Fensterklasse angeben, NULL geht nicht, und bisher hab ich keine Standard-Klasse gefunden, die ich für meinen Zweck verwenden könnte.

Gerade versuche ich eine eigene Fensterklasse zu definieren, stoße aber bei der Übergabe des Pointers auf WinProc auf Probleme. Wenn ich die WinProc statisch deklariere, nimmts den Pointer an, aber dann kann ich wieder keine dynamischen Member zugreifen. Außerdem wird Winproc dann seltsamerweise beim Linken nicht gefunden.

wird fortgesetzt ;-)
 
Bin jetzt mit meinem CWnd Versuch wesentliche Schritte vorangekommen. Ist zwar Gefrickel, aber solange man vergleichsweise unkompliziert zum Ziel kommt...

1. BringWindowToTop() verhindert ein "Durchscheinen" der unter dem Popup-Window liegenden Dialog-Controls. Zwar waren die nicht zu sehen gewesen, hatten aber beim Draufklicken "durch" das Fenster hindurch reagiert.

2. Scrollbar: Zwar läßt sich die Kontrolle nicht an eine entsprechende Klasse übergeben, aber die Steuerung und die Kontrolle funktioniert irgendwie trotzdem.

Was noch stört:
- wenn ich das Popup-Fenster maximiere, wird die untere Scrollbar halb von der Statusbar des MainFrame überlappt.

- nach wie vor bleibt die Titelleiste des Fensters grau. Trotzdem kann ich das Fenster verschieben etc
 
Hi,
Da machst du etwas, was IMHO von den Microsoft-Herren nicht bedacht wurde. Nämlich dich nicht genauestens an die von der MFC vorgegebene Struktur zu halten. Das ist für das Programm an sich zwar manchmal praktischer, aber sobald man gegen die "Richtlinien" der MFC verstößt, wird das irgendwie immer eine einigermaßen großen Gefrickel...

Da kann ich dir nur noch viel Glück wünschen, weil ich damit selbst nicht viel Erfahrung habe.

Grüße Squeegee
 

Neue Beiträge

Zurück