mfc hauptappl



  • estartu_de schrieb:

    Also, wenn du Next die ID IDOK gibst und Cancel die IDCANCEL, dann wären die Rückgabewerte geklärt.
    Aber mit den selbstdefinierten, ich glaube das geht so nicht, wäre mir wirklich neu.

    Grundlagen:
    Beende den Dialog mit CDialog::OnOK() -> der Rückgabewert ist IDOK.
    Beende den Dialog mit CDialog::OnCancel() -> der Rückgabewert ist IDCANCEL.

    Ansonsten guck doch mal per Debugger, was du in welchem Fall zurückbekommst. 🙂

    also, weil ich will bei ID IDOK einen anderen dialog aufmachen...und macht das nichts wenn ich 2 gleiche dialog mit ID OK und ID Chancel habe? das war eigentlich der grund warum ich das geändert habe..

    cu



  • Nein, so lange die IDs pro Dialog eindeutig sind, ist das okay. 🙂 (Und sonst würdest du ja vom Editor auch angemeckert werden.)

    Die einzige ID, die sogar pro Dialog mehrfach vorkommen darf ist IDC_STATIC.

    Achja: Resource-IDs schreibt man eigentlich komplett groß, das ist Standard.
    Also ID_BUTTON_NEXT_REG2 statt ID_Button_Next_Reg2.
    So erkennt auch jemand, der den Code zum ersten Mal liest gleich, was das ist. 🙂



  • hi,
    ich hab jetzt das problem das er bei dlg_reg2.DoModal(); nicht blockiert;-( läuft einfach drüber...hm
    aber das erste IDOK wird schon mal erkannt...

    cu

    Client_Registration1Dlg dlg_reg1;
    	m_pMainWnd = &dlg_reg1;
    	INT_PTR nResponse = dlg_reg1.DoModal();
    	if (nResponse == IDOK)
    	{
    		// TODO: Fügen Sie hier Code ein, um das Schließen des
    		//  Dialogfelds über "Next" zu steuern
    		Client_Registration2Dlg dlg_reg2;
    		m_pMainWnd = &dlg_reg2;
    		INT_PTR nResponse = dlg_reg2.DoModal();
    
    		if (nResponse == IDOK)
    		{
    			// TODO: Fügen Sie hier Code ein, um das Schließen des
    			//  Dialogfelds über "Next" zu steuern
    
    		}
    		else if (nResponse == IDCANCEL)
    		{
    			// TODO: Fügen Sie hier Code ein, um das Schließen des
    			//  Dialogfelds über "Abbrechen" zu steuern
    		}
    	}
    	else if (nResponse == IDCANCEL)
    	{
    		// TODO: Fügen Sie hier Code ein, um das Schließen des
    		//  Dialogfelds über "Abbrechen" zu steuern
    	}
    


  • Er läuft einfach drüber? 😮

    Hmm, drück mal "Alles neu erstellen" - nur damit DIE Fehlerquelle ausgeschlossen ist. (VC hat manchmal ne Macke...)

    Dann setz mal einen Breakpoint in die Client_Registration2Dlg::OnInitDialog.
    Wenn er DA schon nicht hinkommt, wirds schwierig. 😞

    Und benenn mal die Variable um, mich wundert eh, dass der Compiler nicht wegen einer Neudeklaration meckert.
    [cpp]INT_PTR nResponse2 = dlg_reg2.DoModal();[/cpp]



  • estartu_de schrieb:

    Aber mit den selbstdefinierten, ich glaube das geht so nicht, wäre mir wirklich neu.

    Und ob das geht.

    Grundlagen:
    Beende den Dialog mit CDialog::OnOK() -> der Rückgabewert ist IDOK.
    Beende den Dialog mit CDialog::OnCancel() -> der Rückgabewert ist IDCANCEL.

    Beende den Dialog mit EndDialog(x) -> der Rückgabewert ist x.



  • Okay, danke! 👍
    Ehrlich gesagt, hatten mir die beiden Möglichkeiten noch immer gereicht. 😉



  • hi, ich hab keine OnInitDialog! beim Client_Registration1Dlg ist auch das gleiche...den hab ich auch selber mit add dialog hinzugefügt... muss ich die selber hinzufügen? komisch sonst ging das doch automatisch?

    cu

    // Client_Registration2Dlg.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "Client_Hauptdialog.h"
    #include "Client_Registration2Dlg.h"
    #include ".\client_registration2dlg.h"
    
    // Client_Registration2Dlg dialog
    
    IMPLEMENT_DYNAMIC(Client_Registration2Dlg, CDialog)
    Client_Registration2Dlg::Client_Registration2Dlg(CWnd* pParent /*=NULL*/)
    	: CDialog(Client_Registration2Dlg::IDD, pParent)
    {
    }
    
    Client_Registration2Dlg::~Client_Registration2Dlg()
    {
    }
    
    void Client_Registration2Dlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(Client_Registration2Dlg, CDialog)
    	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
    	ON_BN_CLICKED(IDOK, OnBnClickedOk)
    END_MESSAGE_MAP()
    
    // Client_Registration2Dlg message handlers
    
    void Client_Registration2Dlg::OnBnClickedCancel()
    {
    	// TODO: Add your control notification handler code here
    	OnCancel();
    }
    
    void Client_Registration2Dlg::OnBnClickedOk()
    {
    	// TODO: Add your control notification handler code here
    	OnOK();
    }
    


  • Da ist ja noch gar nix drin, was Fehler machen kann. 😕

    Tja, da fallen mir jetzt zwei Sachen ein:
    1. Anderen Dialog erstellen und versuchen aufzurufen. Wenns geht rüberbauen.
    2. Mit F11 in DoModal reindebuggen und gucken, ob man findet, wo der Fehler ist.



  • hi,
    jetzt läuft es...

    ich hab

    //m_pMainWnd = &dlg_reg1; 
    //m_pMainWnd = &dlg_reg2;
    

    auskommentiert jetzt läuft es....was ist dieses m_pMainWnd???

    cu



  • Übersetz es doch mal stumpf. 😃

    Es ist ein Zeiger auf das Hauptfenster der Anwendung. Falls du den mal von irgendwo brauchst, kommst du mit AfxGetMainWnd wieder dran (musst nur noch casten). 🙂


Anmelden zum Antworten