Menü in MFC anwendung mit Funktion versehen

Ich bin Anfänger in Visual studio und MFC und habe jetzt das erste Mal Kontakt mit Menüs. Ich habe eine auf Dialogfeldern basierende Anwendung und bereits ein Menü erstellt und es zu dem Hauptdialog hinzugefügt.In der Anwendung kann man es sehen es hat aber keine Funktionalität. Laut meiem Tutorial muss ich für das Menü eine Klasse erstellen bzw. es zu der Hauptdialogfeldklasse hinzufügen.
Nun meine Frage: Wie mache ich das?

PS: Ich arbeite mit Microsoft Visual Studio 2003 (Version 7.1).

Hi!
Wenn Du in Deinem Dialogdesigner auf einen Menüpunkt doppelklickst, dann wird in Deiner Dialogfeldklasse eine entsprechende Methode zur Behandlung des Klick-Ereignisses genau dieses Menüpunkts angelegt und entsprechend verdrahtet, damit sie auch aufgerufen wird.

Dann einfach den Code, der beim Klick auf den Menüpunkt ausgeführt werden soll, in den Methodenrumpf eintragen - fertig.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Tach Martin,
Wenn ich auf einen Menüpunkt doppelklicke tut sich gar nichts.
Ich habe erst ein leeren Hauptdialog erstelle,über die Ressourcenansicht eine neue Ressource vom Typ Menü hinzugefügt sie ein bisschen gestaltet und einzelnen Menüpunkten ID’s zugewiesen(z.B.IDM_DATEI_BEENDEN) und im Hauptdialog in den Eigenschaften bei Menü das Menü hinzugefügt. Mehr nicht.

Was muss ich jetzt tun um die Menüfelder mit Funktionalität zu versehen?

Hi!
Wenn Du in Deinem Dialogdesigner auf einen Menüpunkt
doppelklickst, dann wird in Deiner Dialogfeldklasse eine
entsprechende Methode zur Behandlung des Klick-Ereignisses
genau dieses Menüpunkts angelegt und entsprechend verdrahtet,
damit sie auch aufgerufen wird.

Dann einfach den Code, der beim Klick auf den Menüpunkt
ausgeführt werden soll, in den Methodenrumpf eintragen -
fertig.

Gruß,
Martin

Achso, Du siehst das Menü noch nicht mal in Deinem Dialog, korrekt?
Sorry, ich war von einer SDI/MDI-Anwendung ausgegangen, aber Du hast ja eine „Auf Dialogfeldern basierende Anwendung“ erstellen lassen.

Dialoge selbst haben ja i.d.R. unter MFC keine Menüs, so dass es nicht ganz trivial wird. Sprich: Du müsstest alles selbst verdrahten und die ganze Nachrichtenbehandlung selbst machen, weil es in MFC so nicht vorgesehen ist.
Ein Vorschlag, wenn Du erst mit MFC anfängst und trotzdem Menüs haben willst: Mach’ Dir ein SDI-Projekt, da kannst Du Dir ansehen, wie Menüs „normalerweise“ erstellt/angesteuert werden.

Dieser Artikel kann Dir auch weiterhelfen:
http://www.codeguru.com/forum/showthread.php?t=267664

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Na OK danke schön

Gruß DR

Na OK danke schön

Gruß DR

:smile:

Damit es nicht ganz so hoffnungslos ist: Es geht natürlich schon.
Es ist aber etwas manuelle Arbeit dafür vonnöten, so dass ich es für besser hielte, wenn Du Dir zunächst die „normale“ Verwendung von Menüs aneignest.

Wenn Du partout dennoch gleich mit Menüs in Dialogen anfangen willst, muss folgendes gemacht werden:

  1. In Deinem Dialog musst Du der Eigenschaft „Menü“ die Resourcen-ID Deines Menüs zuweisen. (Also im Dialog-Designer den Dialog anwählen und dann unter den Eigenschaften den Eintrag „Menü“ suchen). Damit taucht zur Laufzeit dann schon mal über dem Dialog das Menü auf, allerdings ohne Funktionalität.

  2. Für jeden Menüpunkt musst Du manuell einen Eintrag in der Message Map Deines Dialogs anlegen, und zwar die Behandlung von ON_COMMAND().
    Für einen Menüpunkt mit ID ID_DATEI_NEU bspw.:
    ON_COMMAND(ID_DATEI_NEU, &CMeineDialogKlasse::open_mouth:nDateiNeu)

  3. Jetzt ist noch die Methode OnDateiNeu im Headerfile zu deklarieren als „afx_msg void OnDateiNeu()“ und…

  4. in Deiner Dialogfeldklasse zu implementieren:
    void CMeineDialogKlasse::open_mouth:nDateiNeu()
    {
    // Hier kannst Du jetzt die Behandlung von Datei/Neu ausprogrammieren.
    }

Und schon (?) funktioniert’s.

Gruß,
Martin

Dankeschön, aber vlt. hast du recht, Menüs in Dialogfeldern sind (meistens) nicht notwendig, werde mir dann esrt mal SDI_Anwendungen anschauen.

Grüße DR