Methode OnClick bei CButton (eVC4) fehlt! Wie dynamischen Buttons Aktion zuweisen???



  • Hallo.

    Ich bastel gerade an einer Applikation im embeddedVisualC++4.
    Diese baut ein formular auf und generiert darauf Buttons und EditFelder.
    Wie kann ich den Buttons jetzt eine funktion zuweisen.
    Pointer auf die buttons habe ich.
    Allerdings scheint es keine OnClick Methode zu geben. 😞

    Weiß hier vielleicht jemand bescheid wie ich da jetzt weiter komme?

    Danke schon mal im voraus. 🙂

    greetz
    sorka



  • Du musst erstmal eine Funktion basteln

    void CTestDlg::OnMessage()
    {
       AfxMessageBox("Yep!");
    }
    

    Danach eine WM_COMMAND Nachricht erstellen

    WM_COMMAND(OnMessage, Hier die ID des Buttons)
    

    Hoffe konnte dir helfen...

    Gruß
    :: NoName ::



  • Ich glaube schon. 😉

    Das klingt jetzt vielleicht bisschen blöd,...
    aber wo genau muss ich denn die "WM_COMMAND(...)"-Zeile eintragen?
    In die Class oder die Funktion oder in die Funktion in der ich den Button generiere? 😕

    danke noch mal
    sorka 🙂



  • Hey

    Also ich denke das du dieses suchst!
    [cpp]
    BEGIN_MESSAGE_MAP(CBlaBla, CDialog)
    //{{AFX_MSG_MAP(CBlaBla)
    ON_BN_CLICKED(IDC_NEU, OnNeu)
    ON_BN_CLICKED(ID_NEXT, OnNext)
    ON_BN_CLICKED(IDC_EXIT, OnExit)
    ON_WM_PAINT()
    ON_WM_LBUTTONDOWN()
    ON_WM_MOUSEMOVE()

    ON_WM_COMMAND(IDC_DEINE,OnMessage) // deine
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    [/cpp]

    finden solltest du dies im oberen drittel deiner .cpp
    (unter evc3.0 ist es dort) 😃

    Aber sicherer ist es doch wenn du dies über deinen KlassenAssi machst!
    finde ich zumindestens!

    Sven



  • Besser ist es, das außerhalb des Assistentenbereichs zu machen, der löscht das sonst gerne.
    [cpp]BEGIN_MESSAGE_MAP(CBlaBla, CDialog)
    //{{AFX_MSG_MAP(CBlaBla)
    ON_BN_CLICKED(IDC_NEU, OnNeu)
    ON_BN_CLICKED(ID_NEXT, OnNext)
    ON_BN_CLICKED(IDC_EXIT, OnExit)
    ON_WM_PAINT()
    ON_WM_LBUTTONDOWN()
    ON_WM_MOUSEMOVE()

    //}}AFX_MSG_MAP
    ON_WM_COMMAND(IDC_DEINE,OnMessage) // deine
    END_MESSAGE_MAP()[/cpp]



  • Hier nochmal..

    Button erstellen

    CButton button;
    button.Create( "", WS_VISIBLE, CRect (...) , this, 101 /* ID */ ) ;
    

    Eine Message erstellen

    void CTestDlg::ButtonClick()
    {
       AfxMessageBox("Yeah");
    }
    

    Und eine Command Nachricht in der MessageMap erstellen

    BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
    //{{AFX_MSG_MAP(CTestDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_COMMAND ( 101 /* ID des Buttons */, ButtonClick /* Message */)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    

    Gruß
    :: NoName ::



  • Danke leute 🙂
    Hatte mich durch zufall auch schon auf die Message Map eingeschossen.
    Allerdings hatte ich es mit BN_CLICK(ID,Funktion) probiert.
    Und oh wunder das hatte sogar den erwünschten effekt.
    Aber geändert auf eure Variante hab ich es doch und es funktioniert
    jetzt auch genauso wie ich es haben wollte.

    Danke an alle für eure tolle hilfe 👍

    ciao
    sorka


Anmelden zum Antworten