Button zur Laufzeit <-- auf Events reagieren?!



  • hallo,

    ich erstelle einen Button zur Laufzeit:

    CButton Explore_Back;
    Explore_Back.Create("Test",NULL,CRect(260, 120, 330, 150),this,11);
    

    der Button hat halt die ID 11.
    mit welcher Methode kann ich nun überprüfen ob dieser Button gedrückt wurde?!

    danke euch!

    babel



  • Brauchst ja nur dein View um die Methode

    CMyView::OnClickedButton()

    zur erweitern und die Massage-Map um den Eintrag

    ON_BN_CLICKED(IDC_BUTTON1,OnClickedButton)

    zu ergänzen. Dann solltest Du in der OnClickedButton reagieren können.



  • Oder wenn Du *eine* Methode für alle (dynamisch erstellten) Buttons haben willst, kannst Du

    ON_CONTROL_RANGE
    

    verwenden



  • hey danke für die schnellen antworten!

    hab mich doof ausgedrückt :-| ich habe eine Dialog-Anwendung
    und somit keine View-Klasse der ich die Methode OnClickedButton hinzufügen kann!

    Wie handle ich das gleiche denn in einem Dialog-basierten Projekt?

    danke!



  • babelduo schrieb:

    Wie handle ich das gleiche denn in einem Dialog-basierten Projekt?

    Da sollte es auch einen Bereich geben mit:

    BEGIN_MESSAGE_MAP(CMFCApp1Dlg, CDialog)
      ON_WM_SYSCOMMAND()
      ON_WM_PAINT()
      ON_WM_QUERYDRAGICON()
      //}}AFX_MSG_MAP
      ON_BN_CLICKED(IDOK, OnBnClickedOk)
    END_MESSAGE_MAP()
    


  • hmm ja danke aber ich verstehe das leider nicht richtig :-|
    ich muss doch einen Event-Handler hinzufügen um auf die Messages
    von diesem Button zu reagieren?

    allein:

    BEGIN_MESSAGE_MAP(CMFCApp1Dlg, CDialog)
      ON_WM_SYSCOMMAND()
      ON_WM_PAINT()
      ON_WM_QUERYDRAGICON()
      //}}AFX_MSG_MAP
      ON_BN_CLICKED(IDOK, OnBnClickedOk)
    END_MESSAGE_MAP()
    

    bringt doch nichts oder? sorry aber ich hab sowas noch net gemacht
    und kann mir grad net vorstellen wir das realisiert wird!

    danke euch schonmal 🙂



  • jetzt macht noch in die header :

    afx_msg void OnBnClicktOk();
    

    und in die cpp:

    void MyDlg::OnBnClickedOk(){
    
      BUTTON WURDE GEDRÜCKT
    
    }
    

    weis aber nich ob die funktion noch übergabe parameter hat



  • Wenn Du nur einen Button hast, musst Du in der MAP.

    ON_BN_CLICKED(ID_des_Buttons, OnMyButtonFunc)
    

    eintragen.
    Der Prototyp der Methode kann man in der Hilfe zu ON_BN_CLICKED nachlesen:

    afx_msg void OnMyButtonFunc();
    

    Wenn Du mehrere Buttons mit einer Methode abhandeln willst, kannst Du

    ON_CONTROL_RANGE(BN_CLICKED, start_id, end_id, OnMyButtonsFunc)
    

    verwenden.
    Der Prototyp der Methode sieht dann wie folgt aus:

    afx_msg void OnMyButtonsFunc(UINT id);
    


  • danke euch 🙂
    klappt prima!!

    😃


Anmelden zum Antworten