Buttons und Message Handler



  • Hi Forum,
    ich habe folgendes Problem: Ich habe in einem dialogfeld basierenden Projekt mehrere Buttons. Diese Buttons sollen alle ein und die gleich Methode OnClick bekommen. Das ist soweit klar wie es geht, aber meine Frage wäre: Wie kann ich in dieser OnClick feststellen von welchem Button sie gerufen wird ?

    MfG
    Ranja



  • Evtl. mit GetDlgCtrlID ?!



  • Habe es mal wie folgt getestet, aber es kommt immer nur WUFF in der AfxMessageBox und habe natürlich in der MessageMap, das but0Clicked auf IDC_BUTTON3 gelegt.

    void CMühleDlg::but0Clicked()
    {
          if(this->GetDlgCtrlID() == IDC_BUTTON3)
    	{
    		AfxMessageBox(_T("MIAU"));
    	}
    	else
    	{
    		AfxMessageBox(_T("WUFF"));	
    	}
    }
    

    Also vermute ich mal das es nicht des Rätsels Lösung war 😞

    Kommt man vielleicht schon irgendwie in die Methode die die Nachrichten abfängt, weil in der MessageMap steht ja sowas wie

    BEGIN_MESSAGE_MAP(CMühleDlg, CDialog)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    	ON_BN_CLICKED(IDC_BUTTON3, &CMühleDlg::but0Clicked)
    

    Dahin wird ja das IDC übergeben, komme ich da vielleicht irgendwie dran, weil das Ding muss ja irgendwie nen Switch Case besitzen wonach es die jeweiligen Methoden ruft ?



  • Ich habe das Problem gelöst 🙂
    Du hattest doch gar nicht so unrecht. Ich habe mir einfach den Focus geholt
    Das is nun meine Funktion

    void CMühleDlg::but0Clicked()
    {
          CWnd* pwndCtrl = GetFocus();
    	int ctrl_ID = pwndCtrl->GetDlgCtrlID();
    
    	switch (ctrl_ID) 
    	{
    	case IDC_BUTTON3:
    		AfxMessageBox(_T("But0"));
    	break;
    
    	case IDC_BUTTON4:
    		AfxMessageBox(_T("But1"));
    	break;
    
    	default:
    	break;
    	}
    }
    


  • Wenn die Buttons aufeinanderfolgende IDs haben, kannst du den Messge-Handler auch per ON_COMMAND_RANGE für den gesamten Block zuweisen (der bekommt dann die getroffene ID direkt mitgegeben).



  • Das habe ich gestern Abend noch erledigt 🙂


  • Mod

    Oder man verwendet ON_COMMAND_EX!


Anmelden zum Antworten