Technician Geschrieben 7. Januar 2003 Geschrieben 7. Januar 2003 Hallo, ich suche nach einer Möglichkeit, ein Dokument zu laden und anzuzeigen - praktisch wie der "Öffnen"-Dialog, nur dass ich den Pfadnamen nicht per Öffnen-Dialog sondern mittels eines selbst erstellten Dialogs auswählen möchte. Konstruktionen der Art CMyApplicationDoc doc; BOOL boolwert = doc.OnOpenDocument("d:\\dat\\test.dat"); führen logischerweise nur dazu, dass das Dokument in den Speicher geladen, aber nicht angezeigt wird, da ja keine View angelegt wird Ich komm da einfach nicht weiter :confused: Wer kann mir weiterhelfen? (Es ist ein MDI-Programm.) Grüße, Technician Zitieren
Guybrush Threepwood Geschrieben 7. Januar 2003 Geschrieben 7. Januar 2003 Hi, also ich kenn mich mit den MFC nicht sonderlich gut aus, es gibt also bestimmt auch ne einfachere Lösung. Wenn es sich bei deinen Dokumenten um Textdateien handelt kann man doch ein EditView nehmen und den Text dort selber ausgeben. Wenn du Bilddateien darstellen willst brauchst du kannst du sie einfach selber per GDI in eine "normale" CView malen. Gruß Guybrush Zitieren
Technician Geschrieben 7. Januar 2003 Autor Geschrieben 7. Januar 2003 Originally posted by Guybrush Threepwood Hi, also ich kenn mich mit den MFC nicht sonderlich gut aus, es gibt also bestimmt auch ne einfachere Lösung. Wenn es sich bei deinen Dokumenten um Textdateien handelt kann man doch ein EditView nehmen und den Text dort selber ausgeben. Wenn du Bilddateien darstellen willst brauchst du kannst du sie einfach selber per GDI in eine "normale" CView malen. Gruß Guybrush Hi Guybrush; das Öffnen der Dokumente (per "Datei öffnen"-Dialog) funktioniert ja bereits. (Es handelt sich auch nicht um einfach ein Text- oder Bilddokument, sondern ich arbeite mit CFormView und stelle den Inhalt einer Textdatei dort in einem TreeView dar; is aber hierfür nicht weiter wichtig, wie das genau abläuft.) Nur möchte ich jetzt über einen Button eine Datei eines ganz bestimmten Pfades (also nicht auswählbar) öffnen. Wenn ich nun schreibe CMyApplicationDoc doc; BOOL boolwert = doc.OnOpenDocument("d:\\dat\\test.dat"); wird das Dokument in den Speicher geladen, aber nicht angezeigt wird, da ja keine View angelegt wird. Ich bräuchte also eine View, die mit dem Dokument verknüpft ist... Zitieren
Klotzkopp Geschrieben 7. Januar 2003 Geschrieben 7. Januar 2003 Eigentlich sollte sich CDocTemplate::CreateNewDocument um alles kümmern. Zitieren
Technician Geschrieben 7. Januar 2003 Autor Geschrieben 7. Januar 2003 Originally posted by Klotzkopp Eigentlich sollte sich CDocTemplate::CreateNewDocument um alles kümmern. Ich möchte aber kein neues Dokument anlegen, sondern eines öffnen. Und dazu müsste ich logischerweise einen Pfad übergeben. CDocTemplate scheint mir aber keine derartige Methode zur Verfügung zu stellen... Zitieren
Guybrush Threepwood Geschrieben 7. Januar 2003 Geschrieben 7. Januar 2003 Was ist mit CDocTemplate::OpenDocumentFile? Zitieren
Technician Geschrieben 7. Januar 2003 Autor Geschrieben 7. Januar 2003 Originally posted by Guybrush Threepwood Was ist mit CDocTemplate::OpenDocumentFile? ich habe jetzt einen Menüpunkt ins Programm aufgenommen, der die Datei d:\dat\test.txt öffnen soll: void CMainFrame::OnMenOpen() { CDocTemplate::OpenDocumentFile("d:\\dat\\test.txt"); } hierbei bekomme ich die Compiler-Fehlermeldung: error C2352: 'CDocTemplate::OpenDocumentFile' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion Zitieren
Guybrush Threepwood Geschrieben 7. Januar 2003 Geschrieben 7. Januar 2003 Mußt du nicht erst ein CDocTemplate Objekt deklarieren und das dann für den Aufruf von OpenDocumentFile() benutzen? Zitieren
Klotzkopp Geschrieben 7. Januar 2003 Geschrieben 7. Januar 2003 OpenDocumentFile ist nicht statisch. Du musst eine deiner Template-Instanzen für den Aufruf verwenden. Die App-Klasse hat üblicherweise Zeiger auf alle Templates als Member. Zitieren
Technician Geschrieben 7. Januar 2003 Autor Geschrieben 7. Januar 2003 Originally posted by Klotzkopp OpenDocumentFile ist nicht statisch. Du musst eine deiner Template-Instanzen für den Aufruf verwenden. Die App-Klasse hat üblicherweise Zeiger auf alle Templates als Member. ich finde hier allerdings keine Membervariablen, sondern alles nur im cpp-File: BOOL CMyApp::InitInstance() { ... // Dokumentvorlagen der Anwendung registrieren. Dokumentvorlagen // dienen als Verbindung zwischen Dokumenten, Rahmenfenstern und Ansichten. CMultiDocTemplate* pDocTemplate; pDocTemplate = new CMultiDocTemplate( IDR_BACKSLTYPE, RUNTIME_CLASS(CBackslashDoc), RUNTIME_CLASS(CChildFrame), // Benutzerspezifischer MDI-Child-Rahmen RUNTIME_CLASS(CBackslashView)); AddDocTemplate(pDocTemplate); } wie kann ich darauf von void CMainFrame::OnMenOpen() { //hier soll geöffnet werden } zugreifen?! :confused: :confused: Zitieren
Klotzkopp Geschrieben 7. Januar 2003 Geschrieben 7. Januar 2003 Mach aus pDocTemplate ein Member von CMyApp. Alternativ kannst du dich mit CWinApp::GetFirstDocTemplatePosition und GetNextDocTemplate durch die Templates hangeln. Mit AfxGetApp() kommst Du von überall her an einen Zeiger auf deine App-Instanz, den musst du nur noch nach CMyApp* casten. Zitieren
Technician Geschrieben 7. Januar 2003 Autor Geschrieben 7. Januar 2003 Originally posted by Klotzkopp Mach aus pDocTemplate ein Member von CMyApp. Alternativ kannst du dich mit CWinApp::GetFirstDocTemplatePosition und GetNextDocTemplate durch die Templates hangeln. Mit AfxGetApp() kommst Du von überall her an einen Zeiger auf deine App-Instanz, den musst du nur noch nach CMyApp* casten. Danke! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.