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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Steffen H. (steffenh)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von georg (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.