Über Dialog Aktionen in Doc auslösen ?



  • Hi Leute,

    ich hab hier folgendes Problem.
    Es wurde ein SDI Projekt erstellt, bei einer bestimmten Aktion erscheint ein Dialog mit 2 Buttons (m_DlgLaden / m_DlgAbbruch).
    Wie der Name schon sagt soll bei Druck auf Button 1 eine Datei geladen werden, bei Druch auf Button 2 soll nichts passieren(Dialog verschwindet).
    Im Dialog hab ich die beiden Button angelegt und als Control deklariert. Die Dialog.h wurde auch ins SDI includiert.

    Im Dialog sieht die Sache so aus :

    void CDateiFehlerDlg::OnLaden() 
    {
    	CDialog::OnOK();
    	UpdateData(FALSE);
    }
    
    void CDateiFehlerDlg::OnCancel() 
    {
    
    	UpdateData(TRUE);
    	CDialog::OnCancel();
    }
    

    Die Funktion im SDI lautet wie folgt :

    CDateiFehlerDlg datFehlDlg;
    
    	iZaehler++;									// iZaehler (FileZaehler) erhöhen
     	for (int i = iStoreIndexOfName; i <= (iAnzahlFiles - 2); i++)
    	{		
    			m_bButtonNext = FALSE;
    			m_bButtonBack = FALSE;
    			datFehlDlg.m_cstrStaticPath	= cstrSearchString + arrFileNames[0];
    			datFehlDlg.m_cstrEditPath	= cstrCompletePath;
    			datFehlDlg.DoModal();
    			mlf.loadmyfile (cstrSearchString + arrFileNames[0],m_strFileExtension);
    			cstrAusgabe = mlf.cstrAusgabe;
    			UpdateAllViews (NULL);
    
    			m_bButtonNext = TRUE;
    			m_bButtonBack = TRUE;
     	 		iZaehler = (0/*iAnzahlFiles - 2*/);
    
    			break;
    		}	
    		if (arrFileNames[i] == m_strDateiname)
    		{
    		// 	m_bButtonBack = TRUE;
     			mlf.loadmyfile (cstrSearchString + arrFileNames[iZaehler],m_strFileExtension);
     			cstrAusgabe = mlf.cstrAusgabe;
    			UpdateAllViews (NULL);
     		}
     	}
    

    Ich weiss nicht wie ich die Abfrage der Buttons des Dialogs im SDI gestalten muss ! 😕 😕 😕 😕

    Könnt Ihr mir da helfen ?
    Vielen Dank Vorab 😉
    ShadowEater



  • Schau dir mal den Rückgabewert von DoModal an 😉



  • Danke für die schnelle Antwort MFK.

    Ich habs jetzt so gemacht im Dialog :

    void CDateiFehlerDlg::OnCancel() 
    {
    	CDialog::OnCancel();
    	UpdateData(FALSE);
    }
    
    void CDateiFehlerDlg::OnLaden() 
    {
    	CDialog::OnOK();
    	UpdateData(FALSE);	
    }
    

    Im SDI :

    CDateiFehlerDlg datFehlDlg;
    	iZaehler++; // iZaehler (FileZaehler) erhöhen
     	for (int i = iStoreIndexOfName; i <= (iAnzahlFiles - 2); i++)
    	{		
    		if (iZaehler >= (iAnzahlFiles - 1))
    		{	
    			m_bButtonNext = FALSE;
    			m_bButtonBack = FALSE;
    			datFehlDlg.m_cstrStaticPath	= cstrSearchString + arrFileNames[0];
    			datFehlDlg.m_cstrEditPath	= cstrCompletePath;
    			if (datFehlDlg.DoModal() != IDLADEN)
    			{
    				mlf.loadmyfile (cstrSearchString + arrFileNames[0],m_strFileExtension);
    				cstrAusgabe = mlf.cstrAusgabe;
    				UpdateAllViews (NULL);
    			}
    			m_bButtonNext = TRUE;
    			m_bButtonBack = TRUE;
     	 		iZaehler = (0);
    
    			break;
    		}	
    		if (arrFileNames[i] == m_strDateiname)
    		{
    
     			mlf.loadmyfile (cstrSearchString + arrFileNames[iZaehler],m_strFileExtension);
     			cstrAusgabe = mlf.cstrAusgabe;
    			UpdateAllViews (NULL);
     		}
     	}
    

    Wenn ich DoModal auf ungleich (!=) prüfe dann wird die Datei geladen wenn ich auf (==) prüfe nicht ??? 😕

    Wenn ich dann auf Abbrechen drücke wird die Datei immer geladen ??? 😕

    Was mach ich denn falsch ?

    Danke für eure Mühe !
    😉
    ShadowEater



  • Wenn ich im Dialog OnOK() aufrufe klappr das OnLaden() geht nicht !

    void CDateiFehlerDlg::OnLaden() 
    {
     	CDialog::OnOK();
    	UpdateData(FALSE);	
    }
    

    Kann mir das jemand erklären ?

    Danke für die Mühe
    Gruß
    ShadowEater



  • Ersetz mal

    if (datFehlDlg.DoModal() != IDLADEN)
    

    durch

    if (datFehlDlg.DoModal() != IDOK)
    

    Dann sollte es eher was werden. 🙂



  • Hi,

    danke estartu, das funktioniert 😉 !
    Ich versteh nur nicht was dahinter steckt, ich will doch prüfen ob IDLADEN gedrückt und nicht ob IDOK nicht gedrückt wurde ???

    Gruß
    ShadowEater



  • OnOK gibt IDOK zurück.
    OnCancel gibt IDCANCEL zurück.

    Du kannst natürlich auch irgendwo:

    #define IDLADEN IDOK
    

    schreiben, dann geht das auch. 😃
    Oder irgendwie ganz kompliziert das Verhalten des Dialoges modifizieren... :p



  • Hi ;

    Oder irgendwie ganz kompliziert das Verhalten des Dialoges modifizieren...

    Aso, 🙂 da mach ich lieber das was Du am Anfang gesagt hast, das funzt echt gut ! 😉 😃 👍

    Gruß
    ShadowEater 🙂



  • estartu schrieb:

    Oder irgendwie ganz kompliziert das Verhalten des Dialoges modifizieren... :p

    Oder einfach nicht OnOk, sondern EndDialog mit der ID aufrufen, auf die man hinterher prüfen will.



  • ShadowEater schrieb:

    Hi,

    danke estartu, das funktioniert 😉 !
    Ich versteh nur nicht was dahinter steckt, ich will doch prüfen ob IDLADEN gedrückt und nicht ob IDOK nicht gedrückt wurde ???

    Gruß
    ShadowEater

    Das kann auch nicht funktionieren. Beim Druck auf Ok oder Cancel wird wie estartu schon sagte die OnOk oder die OnCancel aufgerufen. Beide Funktionen bewirken das Schließen des Dialogs und somit das Rückkehren der DoModal.
    Der Druck auf einen anderen Button (hier der IDLaden) bewirkt den Sprung in die OnLaden (denke das die dann so heißen müsste) und die ist per default leer, d.h. es passiert gar nichts und der Dialog müsste noch stehenbleiben.


Anmelden zum Antworten