Übergabe von Parametern bei einer MFC Anwendung
-
Hallo an alle.
Ich habe leider niergendwo antwort auf mein Problem gefunden, daher schreibe ich hier.
Wenn ich bestimmte Datentüpen für meine Anwendung registriere, kann ich ja dann beim Doppelklick auf solche Datei meine Anwendung starten. Leider wird diese Datei aber nicht angezeigt, sondern nur das MainFrame der Anwendung. Frage wäre: wo kann ich innerhalb meiner CWinApp diese quasi per Maus ausgewählte Parameter auslesen, damit ich das richtige Kindfenster aufrufen kann?
In CCommandLineInfo ist es ja wie es aussieht nichtDanke
-
Das sollte in CCommandLineInfo::m_strFileName stehen.
Glaub aber bitte nicht, dass die automatisch geöffnet wird, das musst du einbauen.
-
In einer SDI sollte
CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); if (!ProcessShellCommand(cmdInfo)) return FALSE;
bereits drinstehen.
-
CCommandLineInfo::m_strFileName ist leer. Alle Membervariablen von CCommandLineInfo sind leer nach dem Aufruf von
ParseCommandLine(cmdInfo);
Ich habe sogar manuel die Übergabeparameter der main methode überprüft. Ausser des Applicationname ist sonst nichts belegt
Wenn ich zuerst das Programm öffne und dann per drag and drop die datei in das Fenster ziehe funktioniert alles einwandfrei. Nur beim Öffnen des Programms per doppelklick auf die datei läuft es nicht so wie es sein sollte.
Gibt es da vielleicht noch etwas anderes, als das, was in CCommandLineInfo steht?
-
Normalerweise ruft er bei Doc/View die OnOpenDocument Methode auf, wenn du auf eine Datei doppelklickst.
-
Läßt sich auch mit einem Debug herausfinden.
-
Läßt sich auch mit einem Debug herausfinden
Das schon, wenn ich dem Debugger parameter übergebe. Dann läuft es ja auch. Aus der Konsole läuft es auch wenn ich parameter übergebe. Es läuft halt nur nicht, wenn ich das programm beim doppelklick auf 'ne Datei starte.
Das ist die Methode, die aufgerufen wird, sobald ich eine Datei öffne (per draug & Drop oder normal).
CDocument* CSEDAVApp::OpenDocumentFile(LPCTSTR lpszFileName) { string strPath = lpszFileName; if(strPath == "") return NULL; try { nsSELMA::CSEDAPFactory oFactory(strPath); nsSELMA::CSEDAPFactory::ObjectType enOT = oFactory.GetType(); if(enOT == nsSELMA::CSEDAPFactory::SDP) return m_pSDPDocTemplate->OpenDocumentFile(lpszFileName, oFactory.GetObject()); else if(enOT == nsSELMA::CSEDAPFactory::SGD) return m_pSGDDocTemplate->OpenDocumentFile(lpszFileName, oFactory.GetObject()); else if(enOT == nsSELMA::CSEDAPFactory::SCO) return m_pSCODocTemplate->OpenDocumentFile(lpszFileName, oFactory.GetObject()); DoMessageBox("Bitte überprüfen Sie die Datei, die Sie öffnen wollen.\nDiese entspricht keinem unterstützten Datentyp!", 0, MB_ICONSTOP); } catch(nsSELMA::Exception& e) { stringstream streamMessage; e.PrintStackTrace(streamMessage); DoMessageBox(streamMessage.str().c_str() , 0, MB_ICONSTOP); } return NULL; }
Dieselbe wird auch aufgerufen, wenn ich auf die Datei doppelklicke. Aber da geht er nicht rein, da cmdInfo.m_strFileName leer ist (unterer listing)
Hier der Teil von InitInstance() wo die methode aufgerufen wird
[...] pMainFrame->ShowWindow(m_nCmdShow); pMainFrame->UpdateWindow(); if(cmdInfo.m_strFileName != "") OpenDocumentFile(cmdInfo.m_strFileName); return TRUE; }
-
Läßt sich auch mit einem Debug herausfinden
Kann man eine compillierte exe irgendwie debuggen? Wenn ja, könnte ich es auf diesem Weg versuchen
-
Du könntest dir z.B. zu Testzwecken ein paar MessageBoxen einbauen, die die entsprechenden Werte anzeigen.
-
habe ich. Und, wie gesagt, leider sind die entsprächende Einträge leer