Ich brauche eine eigene CMenu Klasse



  • 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