Thomas: C: Durchlaufen eines Menüs

Hallo.

Ich suche in C / C++ einen Algorithmus, um ein Menü (bestehend aus mehreren Ordnern und mehreren Unterordner-Ebenen) wie eine Baumstruktur durchlaufen zu können.

Durch diesen Algorithmus sollte jeder Menüeintrag einmal durchlaufen werden.

Kann mir bitte jemand einen Tipp geben bzw. einen Link zu einer entsprechenden Dokumentation posten?

Vielen Dank vorab für alle hilfreichen Beiträge,
Thomas

  1. Hi

    Ich suche in C / C++ einen Algorithmus, um ein Menü (bestehend aus mehreren Ordnern und mehreren Unterordner-Ebenen) wie eine Baumstruktur durchlaufen zu können.

    Selbst schreiben. Du bist hier im _Self_Forum ;-). Ich würde dir eine Struktur / eine Klasse für einen Menüeintrag mit einem (Pointer-)Array auf Untermenüeinträge ans Herz legen. Der Algorithmus zum Durchlaufen wird dadurch wohl sehr einfach (Stichwort: rekursive Funktion).

    Kann mir bitte jemand einen Tipp geben bzw. einen Link zu einer entsprechenden Dokumentation posten?

    Ehm, leider nein. Wir können das aber hier diskutieren, bis du es selbst geschrieben hast ;-). Du kennst dich doch ein wenig mit C aus oder sollen wir nur deine Hausaufgaben machen?

    cya

    Tom2

    --
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
    1. Ehm, leider nein. Wir können das aber hier diskutieren, bis du es selbst geschrieben hast ;-). Du kennst dich doch ein wenig mit C aus oder sollen wir nur deine Hausaufgaben machen?

      Ich brauch das ja eigentlich nicht für mich selbst.
      Ein Kollege von mir könnte das gebrauchen, und da er im Moment keine Zeit hat, hat er mich gefragt ob ich mich mal umsehen könnte, ob es dazu irgendwelche Quellen im Internet gibt.
      Deshalb wäre mir ein Link zu einer Dokumentation am liebsten gewesen ;-)
      Gruß,
      Thomas

      1. Hi

        Ich brauch das ja eigentlich nicht für mich selbst.

        Ach, dann ist alles klar ;-).

        Deshalb wäre mir ein Link zu einer Dokumentation am liebsten gewesen ;-)

        Den kann dir eventuell Google geben. Ich kenne keinen. Aber lass uns doch das kurz selbst schreiben. Wäre doch gelacht, wenn wir dies nicht innert einer Stunde hinbekämen. Ein wenig Einsatz deinerseits ist jedoch schon erforderlich.

        Schreib doch mal ganz einfach eine Struktur oder eine Klasse, die deine Daten für einen Menüeintrag speichern kann. Poste diese und wir versuchen dannach eine Baumstruktur daraus zu basteln.

        Ich hoffe, du hast wenigstens einen funktionierenden C-Compiler. ;-)

        cya

        Tom2

        --
        SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
        ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
        1. Wäre doch gelacht, wenn wir dies nicht innert einer Stunde hinbekämen. Ein wenig Einsatz deinerseits ist jedoch schon erforderlich.

          Schreib doch mal ganz einfach eine Struktur oder eine Klasse, die deine Daten für einen Menüeintrag speichern kann. Poste diese und wir versuchen dannach eine Baumstruktur daraus zu basteln.

          »»
          Vielen Dank erstmal für das Angebot - wär wirklich super wenn das klappen würde.
          Ich möchte von einer MFC-Anwendung das Mainframe-Menü durchlaufen.
          Über getmainframe() bekommt man ja einen Pointer auf dieses Menü.
          Was genau soll ich denn jetzt posten?.

          Ich hoffe, du hast wenigstens einen funktionierenden C-Compiler. ;-)

          Compiler hab ich...

          Gruß,
          Thomas

          1. Hi

            Ich möchte von einer MFC-Anwendung das Mainframe-Menü durchlaufen.

            Achso, du sprichst von MFC. Nun, die Klasse kenne ich jetzt nicht (hab nur das nötigste Grundwissen in MFC) aus dem Kopf. Es sollte aber, vom Prinzip her, mit jeder Klasse gleich funtkionieren. Moment, ich schau mir die Klasse mal an... Oder meinst du einfach das Hauptmenü ('Datei', usw)?

            Über getmainframe() bekommt man ja einen Pointer auf dieses Menü.

            Seltsam, ich kann nirgends etwas zu dieser Funktion oder der Klasse finden... Was kann die Klasse denn genau. Ich hab kurz eine kleine Klasse in C++ geschrieben, aus der man einen Baum erstellen kann. Sie stellt also einen Menüeintrag dar, der auch Untermenüs haben kann. Du brauchst auch so etwas in der Art.

            FG

            Tom2

            --
            SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
            ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
            1. Achso, du sprichst von MFC. Nun, die Klasse kenne ich jetzt nicht (hab nur das nötigste Grundwissen in MFC) aus dem Kopf. Es sollte aber, vom Prinzip her, mit jeder Klasse gleich funtkionieren. Moment, ich schau mir die Klasse mal an... Oder meinst du einfach das Hauptmenü ('Datei', usw)?

              Genau, ich meine das Hauptmenü, das automatisch von der MFC generiert wird wenn man eine MFC-Anwendung anlegt. Natürlich sollte der Algorithmus auch für ein manuell erweitertes Hauptmenü anwendbar sein.

              Seltsam, ich kann nirgends etwas zu dieser Funktion oder der Klasse finden... Was kann die Klasse denn genau. Ich hab kurz eine kleine Klasse in C++ geschrieben, aus der man einen Baum erstellen kann. Sie stellt also einen Menüeintrag dar, der auch Untermenüs haben kann. Du brauchst auch so etwas in der Art.

              Mit der Klasse und der Funktion getmainframe() hab ich auch noch keine Erfahrung. Ich hab aber von einem Kollegen gehört, dass man über diese Funktion einen Zeiger auf das Menü bekommt...

              Mfg,
              Thomas

              1. Hi Thomas

                Also, ich würde das folgendermassen anstellen: Da die Quellen der MFC für die rechtmässigen Besitzer von Visual Studio und Konsorten offen sind, kannst du, falls es nötig sein sollte, die von dir verwendete Klasse an deine Vorstellungen anpassen oder eine modifizierte Klasse davon ableiten.

                Folgendes sollte deine Klasse besitzen:
                 - Infos zu dem aktuellen Menüeintrag
                 - Ein Array für Pointer auf die Untermenüeinträge (dieselbe Klasse)
                 - Eine Zählervariable, die die Anzahl Untermenüeinträge speichert
                 - Eine Methode, die Untermenüeinträge hinzufügt, um dir die Arbeit zu erleichtern

                Damit kannst du die Baumstruktur aufbauen. Das sollte kein all zu grosses Problem sein.

                Danach baust du eine rekursive Funktion. Das ist eine Funktion, die eine Ebene von Menüeinträgen abarbeitet. Stösst sie auf eine Unterebene, dann ruft sie sich selbst für die Untereben auf und arbeitet diese ab. Tärä, schon hast du das, was du suchst.

                FG & HTH

                Tom2

                --
                SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
                ss:| zu:) ls:& fo:) de:] va:) ch:] sh:( n4:& rl:° br:> js:| ie:% fl:( mo:}
                1. OK, vielen Dank für die Erklärung.

                  Heute werd ich zwar nicht mehr dazu kommen, aber nächtse Woche werd ich das sicher mal ausprobieren bzw. an meinen Kollegen weiterleiten.

                  Schönes Wochenende,
                  Thomas

  2. Servus Thomas,
    so etwas ähnliches hatten wir vor kurzem erst. Und aus purem Egoismus verlinke ich hier auf meinen eigenen Eintrag *g*.
    http://forum.de.selfhtml.org/archiv/2004/3/77044/#m444414
    Der Algorithmus funktioniert in allen Programmiersprachen.

    Grüße Noodles