MDI - Wie kann ich ohne Datei-Neu die Anwendung starten bzw. Child-Frame öffnen
-
Hallo,
ich versuche mal das Problem was ich habe zu schildern...
Zunächst soll sich meine Anwendung ohne ein geöffnetes Child-Frame öffnen. Das tut es schonmal. Jetzt möchte ich gerne selbst einen Dialog über das Menü aufrufen, im dem ich erstmal einen Datenbestand auswählen kann (A la Datei-Neu, aber mit anzeige eines Dialog-Fensters). Den Dialog habe ich auch soweit schon.
Jetzt möchte ich aus dem Dialog heraus die eigentliche MDI-Fenster öffnen (also das was normalerweise über datei-neu geschieht). Gleichzeitig will ich die Referenz zum Datenbestand aus meinem eigenen Dialog bei der Erzeugung des CDocument (Doc-View-Arc.) mit übergeben.
Ich habe leider keine Ahnung wie zb. auch das Datei-Neu implementiert ist. Kann ich mich daran irgendwie orientieren um mein Problem zu lösen?
-
Du brauchst in deiner Applikation einen Message Map:
... BEGIN_MESSAGE_MAP(CMyApp, CWinApp) ... ON_COMMAND( ID_FILE_NEW, OnMyFileNew ) ... END_MESSAGE_MAP() .... void CMyApp::OnMyFileNew() { CMultiDocTemplate* pMyDocTemplate = NULL; CMyDocument* pNewDoc = NULL; CMyFileNewDialog dlgSelect; if( dlgSelect.DoModal() == IDOK ) { // GetSelectedDocTemplate() musst Du natürlich entsprechend implementieren pMyDocTemplate = dlgSelect.GetSelectedDocTemplate(); } if( pMyDocTemplate != NULL ) { // neues Dokument erzeugen pNewDoc = dynamic_cast<CMyDocument*>(pMyDocTemplate->OpenDocumentFile( NULL )); // ist es gültig ?? if( pNewDoc != NULL ) { // so füttere es mit Deinen Daten ... } } }Ist es in etwa das, wonach Du suchst? Du kannst den Message Map natürlich auch in den Mainframe legen, so habe ich das z.B. bei mir implementiert. Da fange ich auch Importfunktionen etc. ab, die die Doc/View im Grunde gemäß dem einfachen Beispiel von oben erzeugt.
Gruss, Gio
-
Wenn das Dokument schon existiert, Du also ein bestehendes Dok mit einem neuen Frame versehen möchtest genügt
pTemplate->CreateNewFrame(pDoc,NULL);Ansatzpunkt ist hier die CMultiDocTemplate Klasse. Am besten debuggst Du mal in die MFC, da lernst Du am meisten.