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 FunktionsformatDa 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 öffnenPS :
wenn ich stattBOOL 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...