Hallo zusammen,
wie kann ich mir in MFC aus einem Dialog heraus ein untergeordnetes
Fenster anzeigen lassen? Sollte ich dafür immer eine eigene Klasse von
CDialog ableiten?
Eigentlich geht es mir darum, mit der rechten Maustaste einen kleinen
Auswahldialog anzeigen zu lassen. Je nachdem, wo geklickt wird, soll
dieser Dialog aber immer komplett anders aussehen. Wenn ich da jetzt
jedes Mal eine eigene Klasse ableite, habe ich am Ende 6-7 eigene
Klassen.
Das fühlt sich irgendwie nicht richtig an. Allein schon, weil es in der
Projektmappe unübersichtlich aussieht. Oder wäre das hier das übliche
Vorgehen?
Weiß jemand Rat?
Grüße
Steffen
Ja, ich denke, es ist richtig, für jeden Dialog eine eigene Klasse von
CDialog abzuleiten, insb. wenn die alle komplett verschieden aussehen
sollen.
Wenn sich die Unterschiede auf das Aussehen beschränken, aber die
Funktionen immer gleich sind, könnte man auch Klassen wiederverwenden
und nur mit unterschiedlichen Dialog-Ressourcen arbeiten.
Steffen H. schrieb:> habe ich am Ende 6-7 eigene> Klassen.
Du kannst ja alles vorsehen und aktuell nur anzeigen was im Kontext
sinnvoll ist. Dazu eigene abgeleitete Klassen zu erzeugen könnte ins
Chaos führen, wenn es zu viele Kombinationen gibt, ich würde einfach
jedesmal eine Liste erstellen was gerade benötigt wird und das im Menü
anzeigen.
Das gibt ev. eine Mischform, Klassen für ähnliche Menüs, die aber vor
der Anzeige noch geeignet modifiziert werden.
Georg
So als Beispiel: wenn du Objekte hast, die einen Preis haben, aber nicht
müssen, würde ich keine Klasse mit und ohne "Preis ändern" erzeugen,
sondern den Menüpunkt einfach ein- oder ausschalten. Dem Objekt muss man
natürlich entnehmen können ob es einen Preis hat.
Oder das Objekt ist Lagerware oder nicht. Wenn nicht gibt es auch keinen
Lagerbestand den man ändern könnte.
Georg
Steffen H. schrieb:> Eigentlich geht es mir darum, mit der rechten Maustaste einen kleinen> Auswahldialog anzeigen zu lassen.
Tatsächlich einen Dialog?
Üblich, d.h. konform zu den selten beachteten "Human interface
guidelines"* von Microsoft ist hier ein Popup-Menü.
*) eines der am seltensten gelesenen Werke der Weltliteratur.
Rufus Τ. F. schrieb:> Tatsächlich einen Dialog?
Ja, gute Frage. In einem Popup trifft man üblicherweise nur eine Auswahl
(ein/aus). Ich brauche mehrere Checkboxen. Deshalb ist es ein Dialog
geworden.
georg schrieb:> Du kannst ja alles vorsehen und aktuell nur anzeigen was im Kontext> sinnvoll ist.
Genau so habe ich es jetzt gemacht!
Danke für Eure Antworten
Steffen
Rufus Τ. F. schrieb:> Wie bekommt der Benutzer der Anwendung mit, daß er irgendwo mit der> rechten Maustaste draufklicken muss
Das nimmt man heute als selbstverständlich an - ich habe gerade mal ein
paar Stunden mit Windows 3.11 gearbeitet, da war ich immer wieder
frustriert dass da z.B. im Dateimanager keine Reaktion auf die rechte
Maustaste kam. Aber das geht halt schon automatisch, Datei anklicken,
rechte Maustaste, Eigenschaften, auch wenn man weiss dass das mit
uraltem Windows nicht geht.
Georg
Gewiss, aber in einem Dialog einen Rechtsklick auf ein Dialogelement
auszuführen, ist nochmal etwas anderes, als in einem explorer-artigen
Fenster auf irgendwas draufzuklicken.
Rechtsklick auf Dialogelemente ist nach wie vor unüblich.
Steffen,
was genau für Dinge sind das in Deinem Ausgangsdialog, auf die da ein
Benutzer Rechtsklicks machen soll, und welcher Art sollen die dann
erscheinenden "Auswahldialoge" sein?
Welcher Art sind die auszuwählenden Informationen, und was von ihnen
wird im Ausgangsdialog angezeigt?
(Ich mach' das mit der Windows-Entwicklung auch schon seit ein paar
Jährchen und habe sogar mal in das von mir angesprochene ungelesenste
Werk der Weltliteratur reingesehen, wenngleich das auch schon 'ne Weile
her ist)
Steffen H. schrieb:> Ja, gute Frage. In einem Popup trifft man üblicherweise nur eine Auswahl> (ein/aus). Ich brauche mehrere Checkboxen. Deshalb ist es ein Dialog> geworden.
Im Popupmenü kann haben die Einträge doch das Property Checked. Damit
hat man im Prinzip eine CheckBox. Im gesetzten Zustand wird dann vor dem
Eintrag ein Häckchen angezeigt. Wenn man zusätzlich noch das Property
RadioItem setzt wird an Stelle des Häckens ein Punkt gezeigt. Zusätzlich
gibt es noch die Eigenschaft GroupIndex, womit man das Ganze auch noch
zu Gruppen zusammenfassen kann. Damit hat eigentlich jede Menge
Möglichkeiten.
Delphi und Lazarus können das schon seit ewigen Zeiten.Gibt es so etwas
bei MFC nicht?
Zeno schrieb:> Gibt es so etwas bei MFC nicht?
Natürlich; das ist Grundfunktionalität von Windows selbst und kann auch
mit der Win32-API ohne MFC erledigt werden, wenn es denn sein muss.
Der Nachteil der Lösung ist halt, daß man, um mehrere Häkchen (ohne
"ck", es sind kleine Haken und keine kleinen Hacken) zu setzen, das
Kontextmenü für jedes einzelne Häkchen erneut aufmachen muss.
Und so etwas ist eine schlechte GUI.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang