Geklickter Button bestimmen??



  • Hallo,
    ich habe in meinem Programm 20 Button´s die von 1 - 20 durchnummeriert sind. Die Button´s eigentlich alle die selbe Funktion haben bis auf das, dass sie eine Funktion mit mit Ihrer Nummer aufrufen. Ist es irgendwie möglich, dass ich alle Button´s die selbe Funktion aufrufen lasse, dann bestimme welcher Button es war, und dann die Funktion mit dem Wert für den Button aufrufe.

    Vom Prinzip her, habe ich mir folgendes gedacht:

    void Test::OnButton()
    {
    // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung
    // hier einfügen

    //Bestimmen welcher Button betätigt wurde, aber wie??
    // GetButtonBeschriftung oder so
    Funktion(Beschriftung);

    }

    Wie gesagt, ich weis nicht wie ich bestimmen soll welcher Buttton betätigt wird. Ich könnte natürlich auch 20 Funktionen schreiben, jeweils 1 für jeden Button, aber das will ich mir ersparen.

    Danke
    Walter



  • du kannst über die Pretranslatemessage abfangen, ob ein Button gedrückt wird und mit
    char buff[128];
    ::GetWindowText( pMsg->hwnd, buff, 128 );
    bekommst du schließlich die Beschriftung von deinem Button raus.
    Probier es einfach mal aus. Ich will hoffen, es funktioniert so.



  • Noch eine Möglichkeit (jetzt habe ich es schon geschrieben, da wird es auch gepostet, 😃 auch wenn da schon eine Lösung steht):
    - im Header brauchst du

    afx_msg void OnButton();
    

    - in der cpp verknüpfst du die eine Funktion mit allen Buttons:

    ON_BN_CLICKED(IDC_BUTTON1, OnButton)
    ON_BN_CLICKED(IDC_BUTTON2, OnButton)
    ON_BN_CLICKED(IDC_BUTTON3, OnButton)usw.
    

    - und dann noch die Funktion selbst:

    void CTestDlg::OnButton() 
    {
    	CWnd* w = GetFocus();
    	CString cTxt;
    	w->GetWindowText(cTxt);
    	AfxMessageBox(cTxt);
    }
    


  • Danke!
    Habe mich für die zweite Variante entschieden.

    Ade
    Walter


Anmelden zum Antworten