Ich brauche eine eigene CMenu Klasse



  • Erst einmal ein gutes neues Jahr.

    Ich brauche eine eigene Klasse die von CMenu erbt.

    Bin also in meinem Projekt auf Klassen gegangen und habe dort über die rechte Maustaste
    „Neue Klassen“ aufgerufen.

    Als Klassennamen habe ich MyMenu gewählt und wollte nun unter Basisklasse
    CMenu wählen. Es gibt aber keine CMenu-Basisklasse.

    Ich kann doch auch eine Klasse CMyButton erstellen die dann von CButton erbt.
    Warum geht das denn nicht von CMenu?

    cebion



  • erstell dir ne classe die MyMenu heist und leite sie von nichts ab. wenn sie dann erstellt ist schreibste hinter class MyMenu : public CMenu dann erbt deine neue klasse die functionen von CMenu



  • cebion schrieb:

    Ich brauche eine eigene Klasse die von CMenu erbt.

    Wozu?



  • Hallo LowFly.
    Wie soll ich das denn machen.
    Egal ob ich über Klassen und dann den rechtsklick oder ob ich
    es über den Klassenassistenten (Klasse hinzufügen) versuche ich soll jedesmal eine
    Basisklasse angeben.

    cebion



  • LowFly schrieb:

    erstell dir ne classe die MyMenu heist und leite sie von nichts ab. wenn sie dann erstellt ist schreibste hinter class MyMenu : public CMenu dann erbt deine neue klasse die functionen von CMenu

    Naja, das ist aber nicht gerade Sinn und Zweck eines Wizards. Ich verstehe schon das "Problem" des Fragestellers. Wenn es nach Dir geht, bräuchte man auch keine IDE. 😉



  • cebion schrieb:

    Hallo LowFly.
    Wie soll ich das denn machen.
    Egal ob ich über Klassen und dann den rechtsklick oder ob ich
    es über den Klassenassistenten (Klasse hinzufügen) versuche ich soll jedesmal eine
    Basisklasse angeben.

    cebion

    Naja, er meint du sollst es einfach in den Sourceeditor selbst eintippen. OHNE Wizard. Nicht nur Clicki Bunti.



  • Hallo MFK.
    Weil ich diese meine eigene Klasse dann um ein paar funktionen erweitern kann.
    Das herkömmliche CMenu macht nicht ganz das was ich will.

    cebion



  • Wieso müssen diese Zusatzfunktionen unbedingt in das Menü rein (und was sind das für Funktionen?)? Die Applikation oder die Fenster-Klasse sind normalerweise viel geeigneter dafür.



  • Hallo CStoll.

    Ich will in der eigenen MyMenu-Klasse OnMouseMove(UINT nFlags...
    aufrufen um dort einen anderen Curosr einzustellen.

    cebion



  • Wieso die Fensterklasse? Wenn er z.B. die Paintmethode von CMenu überschreiben will, muß er ja wohl am besten ein eigenes CMenu implementieren, oder?



  • Ich brauche aber den Wizard denn ich programmiere noch nicht lange in C++
    und der Wizard erstellt mir ja die passende Headerdatei mit der Message-Behandlung und so.
    Weis sonst nicht was ich da alles reinpacken soll damit meine MyMenu dann auf die OnMouseMove-Aktion reagiert.

    cebion



  • cebion schrieb:

    Wie soll ich das denn machen.

    naja in dem du im mfc im menu auf Datei/Neu gehst
    im Register Dateien C/C++ Header-Datei makierst unter Dateinamen MyMenu eingibst und mit ok bestätigts.
    in die gerade erstellte Headerdatei schreibste dann

    #ifndef MYMENU_H
    #define MYMENU_H
    class CMyMenu :public CMenu
    {
    public:
        CMyMenu(){};
        virtual ~CMyMenu(){};
    protected:
    
    private:
    
    };
    #endif//MYMENU_H
    

    danach gehst du nochmal ins Menu auf Datei/Neu im Register Dateien diesmal auf C++ Quellcodedateien gibst unter dateiname wieder MyMenu ein klickst auf ok. in die erstellte datei schreibst du dann

    #include "StdAfx.h"
    #include "MyMenu.h"
    

    oder geh im Menu auf Einfügen/Neue Klasse, unter KlassenTyp stellst du das Dropdown auf Allgemeine Klasse unter Klasseninformationen Name schreibst du CMyMenu rein. bei Basisclasse(n) Abgeleitet von kommt CMenu rein und unter Als public dann auf ok klicken und du hast in etwa den selben effeckt wie oben mit der hand erstellt.



  • Hallo LowFly.
    Erst einmal Danke.

    Muss jetzt erst einmal weg. Werde mich später damit beschäftigen und im zweifel wieder hier posten.

    cebion



  • Hallo LowFly.

    Das funktioniert erst einmal so wie du schreibest.
    Ich habe die Klasse MyMenu und die entsprechende Headerdatei in mein Projekt rein bekommen.

    Ich konnte also
    CMyMenu menu;
    menu.LoadMenu(IDR_MENU1);

    und so weiter verwenden.
    Das popup erscheint auch. Super.

    Wie bekomme ich nun aber OnMouseMove(UINT nFlags, CP...

    In meine MyMenu hinein. Ich will ja das die neue Klasse auf WM_MOUSEMOVE reagiert.

    Darum geht es ja eigentlich.

    Im Klassenassistenten kann ich meine eigene Klasse nicht finden und deshalb nicht auf die Nachricht reagieren.

    cebion



  • Ich will ja das die neue Klasse auf WM_MOUSEMOVE reagiert.

    Das ist unmöglich.



  • reagieren kannst du schon drauf du kannst den assisitenten nur nicht verwenden da CMenu eine allgemeine klasse ist und keine mfc klasse.

    du must jetzt alles von hand machen die MESSAGE_MAP & OnMouseMove setzen usw. der klassenassi hilft dir da nicht mehr.



  • LowFly schrieb:

    reagieren kannst du schon drauf du kannst den assisitenten nur nicht verwenden da CMenu eine allgemeine klasse ist und keine mfc klasse.

    Was soll den eine "allgemeine klasse" sein??? CMenu ist eine MFC Klasse!
    Zumindest ist sie in "afxwin.h" deklariert und von CObject abgeleitet... was schon verdammt nach MFC aussieht...



  • sie ist aber nicht unter den klassen die man unter MFC-Klassen auswählen kann das meinte ich damit



  • Hallo LowFly.
    "alles von hand machen die MESSAGE_MAP & OnMouseMove setzen"
    Das habe ich mir schon fast gedacht. Habe mich auch schon daran versucht aber leider ohne erfolg.

    Vielleicht einen Tipp was ich da machen muss und wie das aussieht?

    cebion


Anmelden zum Antworten