Forum: PC-Programmierung MFC: Kontext-"Menü" erstellen


von Steffen H. (steffenh)


Lesenswert?

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

von tictactoe (Gast)


Lesenswert?

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.

von Steffen H. (Gast)


Lesenswert?

Ok, dann werde ich das auch so machen. Vielen Dank für Deine Antwort!

von georg (Gast)


Lesenswert?

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

von georg (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Steffen H. (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wie bekommt der Benutzer der Anwendung mit, daß er irgendwo mit der 
rechten Maustaste draufklicken muss, um eine Auswahlliste angezeigt zu 
bekommen?

von georg (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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)

von Zeno (Gast)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

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.