MDI-Formview und Dialogfenster



  • Ich arbeite mich gerade in MFC ein. Dialogboxen hab ich nun schon gelernt und mach mich jetzt an SDI/MDI ran. Ich blick da nur noch nicht ganz durch.
    Ich hab ein MDI Projekt erstellt . Wenn ich im Menue auf New klicke kommt ein neues Child-Fenster.
    Kann mir jemand erklären wie und wo nun OnFileNew ausgeführt wird und wie ich ein selbst erstelltes Dialogfenster aufrufen kann ?

    Alternativ wäre ein gutes Tut auch hilfreich
    Danke





  • Vielen Dank.
    Das hat mir schon mal etwas weitergeholfen.
    Ich weis jetzt mit Menues umzugehen und auch wie man ein neues Fenster
    öffnen kann( CTestWnd->Create(...usw))
    Was ich noch nicht verstehe ist wie man das mit den Dialogen macht .
    Mit doModal erscheienn diese immer über der Anwendung aber nicht als Child.
    Wie mach ich das denn ?



  • Hi,

    such mal bei google nach: non-modale dialog

    dein dialog bracuht ne klasse. von diesem typ brauchst du nen zeiger,
    mit dem erzeugst du ne neue instanz mit new. Dann erzeugst du mit create
    dein dialog und zeigst den an:

    #include "Dialogklasse.h"
    Dialogklassentyp *Zeiger auf Dialogklasse;
    Zeiger auf Dialogklasse = NULL;

    if( !Zeiger auf Dialogklasse )
    {
    Zeiger auf Dialogklasse = new Konstructor Dialogklasse
    BOOL ret = Zeiger auf Dialogklasse->Create(IDD_DIALOG, CWnd vom Fenster das den Dlg öffnet zb. this);
    Zeiger auf Dialogklasse->MoveWindow(30,30,610,440,TRUE);
    Zeiger auf Dialogklasse->ShowWindow(SW_SHOW);
    }
    else
    nur anzeigen ...

    Ist Standardkram



  • Danke für die schnelle Antwort.
    Ich versuch das mal zu verstehen. Standardkram kann am Anfang auch unüberwindlich sein. Ich möchte es halt nur richtig verstehen.
    Also hab ich s folgendermaßen versucht:

    #include "TestDialog.h"
    .
    .
    .
    void Chs_verein04App::OnAnsichtDialog()
    {
    	CTestDialog *m_tDialog;
    	m_tDialog=NULL;
    
    	if(!m_tDialog)
    	{
    		m_tDialog = new CTestDialog::CTestDialog();
    		m_tDialog->Create(IDD_DIALOG1,this);
    		m_tDialog->MoveWindow(10,10,100,100,TRUE);
    		m_tDialog->ShowWindow(SW_SHOW);
    	}
    }
    

    Das gibt mir jedoch folgende Fehlermeldung:

    : error C2061: Syntaxfehler: Bezeichner '__ctor'
    : error C2664: 'BOOL CDialog::Create(LPCTSTR,CWnd *)': Konvertierung des Parameters 2 von 'Chs_test04App *const ' in 'LPCTSTR' nicht möglich
    Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein
    reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    Da kann ich nun gar nichts mit anfangen 😕
    was hab ich denn falsch gemacht ?



  • m_tDialog = new CTestDialog::CTestDialog();

    m_tDialog = new CTestDialog();



  • *m_tDialog sollte besser member von Chs_verein04App sein
    m_tDialog=NULL in den Konstruktor von Chs_verein04App



  • Danke für die Hilfe .
    Nach mehreren Versuchen produziert folgender Code keine Fehler mehr:
    (s. Msdn)

    m_tDialog = new CTestDialog();
    	if(m_tDialog != NULL)
    	{
    		BOOL ret=m_tDialog->Create(IDD_DIALOG1,NULL);
    		if(!ret)   //Create failed.
             AfxMessageBox("Error creating Dialog");
    		m_tDialog->ShowWindow(SW_SHOW);
    
    	}
    	else
    		AfxMessageBox("Error Creating Dialog Object");
    

    Dann bekomme ich jedoch wieder ein normales Dialogfenster 😕
    Ich möchte aber ein neues Fenster als CHild öffnen

    PS :
    wenn ich statt

    BOOL ret=m_tDialog->Create(IDD_DIALOG1,NULL);
    
    BOOL ret=m_tDialog->Create(IDD_DIALOG1,NULL);
    

    eingebe kommt folgender Fehler:
    error C2664: 'BOOL CDialog::Create(LPCTSTR,CWnd *)': Konvertierung des Parameters 2 von 'Chs_verein04App *const ' in 'LPCTSTR' nicht möglich



  • MFC_dummie schrieb:

    wenn ich statt

    BOOL ret=m_tDialog->Create(IDD_DIALOG1,NULL);
    
    BOOL ret=m_tDialog->Create(IDD_DIALOG1,NULL);
    

    eingebe..

    meinte natürlich:

    wenn ich statt

    BOOL ret=m_tDialog->Create(IDD_DIALOG1,NULL);
    
    BOOL ret=m_tDialog->Create(IDD_DIALOG1,this);
    

    eingebe...


Anmelden zum Antworten