Messagebox bei OK Button



  • Hallo!
    Ich möchte eine MessageBox einfügen die sich öffnet wenn ich auf den OK-Button klicke öffnet(Mit Ja und Nein Feld). Das erstellen der Box ist nicht das Problem aber sie wird immer sofort mit dem Programm sofort mitbeendet. Ich möchte aber wenn ich auf "Ja" in der Messagebox klicke Daten speichern und wenn ich auf Nein klicke in das Eingabefeld zurückkehren(ist übrigens ein Dialog). Meine Frage ist jetzt also konkret wie verhindere ich das die Messagebox und das Programm sofort ausgehen und wie kann ich wenn ich auf "Nein" klicke wieder in das Programm zurückkehren.
    Vielen Dank für eure Hilfe Buddy



  • Servus,

    wenn du den OK von VS generierten Button meinst dann machste das am besten so:

    in .h

    public:
      void OnOK();
    

    in .cpp

    void CDeinDlg::OnOK()
    {
       if(MessageBox("blabla", 0, MB_YESNO | MB_ICONQUESTION) == IDYES)
       {
          //Speichern
          //Dann beenden
          CDialog::OnOK();
       }
       else
       {
           //Zieh der Katze am Schwanz
       }
    }
    

    und dann sollte das eigentlich funzen 😃

    Viel Spaß

    *winke*
    Hellsgore



  • Hi!
    Das geht leider nicht. Bekomme die Fehlermeldung "OnOk cannot access protected member declaared in class CDialog" und "CDialog::OnOK' : illegal call of non-static member function". Beziehen sich beide auf die Zeile die du mier gesagt hast. Ich schreib mal einfach die ganze Source hierrein.

    if (nResponse == IDOK)
    	{
    		int iReturnMessageBox;
    		CString MessageBoxFrage = "Beenden und speichern?";
    		CString MessageBoxText = "Beenden";
    
    		iReturnMessageBox = MessageBox(NULL,MessageBoxFrage,MessageBoxText,MB_YESNO | MB_ICONQUESTION | MB_SETFOREGROUND);
    		if(iReturnMessageBox == IDYES)
    		{	
    			CString Menge;
    			CString Preis;
    			CString Auto;
    			CString Name;
    			CString Tankstelle;
    			CString Datum;
    			CString Time;
    
    			Name = dlg.GetName();
    			Auto = dlg.GetAuto();
    			Menge = dlg.GetMenge();
    			Preis = dlg.GetPreis();	
    			Tankstelle = dlg.GetTankstelle();
    			Datum = dlg.GetDatum();
    			Time = dlg.GetTime();
    
    			FILE *pfDatei;	
    
    			pfDatei = fopen("Fahrtenbuch.txt","a+");	  
    			fputws(_T("0"),pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Name,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Auto,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Menge,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Preis,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Tankstelle,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Datum,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Time,pfDatei);
    			fputws(_T(":"),pfDatei);
    			fputws(_T("\n"),pfDatei);
    			fclose(pfDatei);
    			exit(0);
    			CDialog::OnOK(); 
    		}
    		else 
    		{
    		}	
    
    		// TODO: Place code here to handle when the dialog is
    		//  dismissed with OK
    	}
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    	else if (nResponse == IDCANCEL)
    	{
    		// TODO: Place code here to handle when the dialog is
    		//  dismissed with Cancel
    	}
    


  • In der .h

    public:
       void OnOK();
    

    eingefügt?

    Hast du eigentlich einen DLG oder ein SDI MDI?



  • Ich benutz DLG MDI. Öhm das DIng geht übrigens immer noch nicht. Hab immer noch die gleichen Fehler.



  • Wenn du MDI nutzt dann kannste das haken. Sorry wusste ich nicht. Wie das jetzt geht.......Keine Ahnung...

    Sry
    Hellsgore



  • OK Danke



  • Ich bins nochmal. Habs jetzt doch hingekriegt. Nur das die Daten jetzt nicht mehr gespeicher werden. Weiß jemand wodrand das liegt? Das Ganze sieht jetzt so aus.

    void CTankstelleDlg::OnOK() 
    {
    		int iReturnMessageBox;
    		CString MessageBoxFrage = "Beenden und speichern?";
    		CString MessageBoxText = "Beenden";
    
    		iReturnMessageBox = MessageBox(MessageBoxFrage,MessageBoxText,MB_YESNO | MB_ICONQUESTION | MB_SETFOREGROUND);
    		if(iReturnMessageBox == IDYES)
    		{	
    			CString Menge;
    			CString Preis;
    			CString Auto;
    			CString Name;
    			CString Tankstelle;
    			CString Datum;
    			CString Time;
    
    			Name = GetName();
    			Auto = GetAuto();
    			Menge = GetMenge();
    			Preis = GetPreis();	
    			Tankstelle = GetTankstelle();
    			Datum = GetDatum();
    			Time = GetTime();
    
    			FILE *pfDatei;	
    
    			pfDatei = fopen("Fahrtenbuch.txt","a+");	  
    			fputws(_T("0"),pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Name,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Auto,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Menge,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Preis,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Tankstelle,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Datum,pfDatei);
    			fputws(_T(";"),pfDatei);
    			fputws(Time,pfDatei);
    			fputws(_T(":"),pfDatei);
    			fputws(_T("\n"),pfDatei);
    			fclose(pfDatei);
    			exit(0);
    			// TODO: Add extra validation here
    
    		 CDialog::OnOK();
    		}
    		else{}
    

Anmelden zum Antworten