Auswahlmenü beim Start von SDI Anwendung anzeigen
-
Moin Bub!
Jetzt denkste bestimmt ach ne der schon wieder! Mir aber egal!Also ich würd nen Splashscreen machen und dann wenn er alles geladen hat anstatt mit dem Timer dann schließen, deine Abfrage rein machen.
Hab es noch nicht probiert hab aber auch im Moment leider absolut nicht die Zeit dafür!
Sag deiner besseren Hälfte mal Grüße!
-
@estartu_de: Das führt leider zu folgendem Fehler:
error C2227: Der linke Teil von '->SendMessageA' muss auf Klasse/Struktur/Union zeigen
@Polofreak:
Ne, ne, ne, schmutzig schmutzig wäe das
Danke, sag deiner Kurzen ebenfalls liebe Grüße! Hab heut und morgen Urlaub
-
Dann mach noch die fehlenden Klammern hin...
-
Ja gut, und welche??
-
Okay, bemerkt, bei
AfxGetMainWnd()
Nur leider stürtzt das Programm auch dann sofort beim Ausführen ab!
-
Das findest du bestimmt auch selbst raus
-
Sorry, das kommt davon, wenn man die Lösungen nur teilweise kopiert und nicht komplett.
Wie sieht der Absturz denn aus?
-
Der Absturz tritt immer dann auf, wenn ich
cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing;
einfüge. Laß ich das weg stürtzt das Programm nicht ab, fängt aber mit einem leeren neuen Dokument an. Das möchste ich aber nicht, weil in OnNewDokument() ein "Wizzard" aufgerufen wird, welcher dann zwei mal erscheint (also Programm startet, Wizzard erscheint, wenn man Abbrechen wählt erscheint das Datei öffnen/neu Menü, wählt man Neu erscheint der Wizzard wieder.) Ich möchte nicht dass er sofort beim Programmstart erscheint.
-
Damit weiß ich leider immer noch nicht, wie der Absturz aussieht.
Ist es einfach nur ein "Debug Assertion failed"? Dann drück wiederholen und schau dich mal um, wo du bist und zeig Code und schau dir den Callstack an.
Ist es ein echter Absturz? Dann versuch herauszufinden, wann der passiert (also welche Codestelle) und zeig es.
Wenn du völlig verzweifelst:
Mach eine bool-Variable in der App, wo du dir merkst, ob der Assistent angezeigt werden soll oder nicht.
Die setzt du im InitInstance auf false und wenn der durch die OnFileNew durch ist einfach auf true.
Vielleicht nicht die schönste Lösung, sollte aber funktionieren.
-
Der Absturz sieht folgendermaßen aus:
Die Anweisung in "0x00481abc" verweist auf Speicher in "0x00000001c" Der Vorgang "read" konnte nicht auf dem Speicher durchgeführt werden.Er tritt an genau dieser Stelle auf:
cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing;
Das mit der Variable werde ich machen falls es keine andere Lösung mehr gibt! THX!
-
ja dann mach doch mal was estartu sagt, setz mal einen Breakpoint auf die von dir genannte Zeile und schau dann mal wo callstack hinzeigt!
Und debugg dich vielleicht auch mal mit F11 in die Zeile rein und schau bei welchem Command genau der Absturz erfollgt.
-
Kein Prob, biddeschön:
ASSERT(::IsWindow(m_hWnd));
genau da hauts ihn wech!
Hab mich vorher um eine Zeile vertan, tritt beim_pMainWnd->ShowWindow(SW_SHOW);
auf; allerdings NUR bei vorangestelltem
cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing;
-
Schranzfreak schrieb:
Kein Prob, biddeschön:
ASSERT(::IsWindow(m_hWnd));
genau da hauts ihn wech!
Aha, damit kann ich was anfangen. Du versuchst, was mit dem Fenster zu machen (anzeigen), aber das existiert noch nicht.
Hast du bei den ganzen Versuchen den Quellcode so verbogen, dass da jetzt nix mehr geht?
Zeig bitte nochmal den Code der InitInstance. Vielleicht kann man was erkennen.
PS: Dein Nick ist ja "fürchterlich", ich verlese mich dauernd...
-
@estartu: vielleicht schreibt er ja für dich jetzt wieder unter Christian 1372 *gg*
Aber weißt ein WE nur schranz hören da muss man so plempe werden, dass man auf so merkwürdigen Nicks kommt!
-
*g* ich wurde nicht plempe durch das Woend!!! Hier mal den Code der InitInstance:
BOOL CPlanProgApp::InitInstance() { // OLE-Bibliotheken initialisieren if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; } AfxEnableControlContainer(); // Standardinitialisierung // Wenn Sie diese Funktionen nicht nutzen und die Größe Ihrer fertigen // ausführbaren Datei reduzieren wollen, sollten Sie die nachfolgenden // spezifischen Initialisierungsroutinen, die Sie nicht benötigen, entfernen. #ifdef _AFXDLL Enable3dControls(); // Diese Funktion bei Verwendung von MFC in gemeinsam genutzten DLLs aufrufen #else Enable3dControlsStatic(); // Diese Funktion bei statischen MFC-Anbindungen aufrufen #endif // Ändern des Registrierungsschlüssels, unter dem unsere Einstellungen gespeichert sind. // ZU ERLEDIGEN: Sie sollten dieser Zeichenfolge einen geeigneten Inhalt geben // wie z.B. den Namen Ihrer Firma oder Organisation. SetRegistryKey(_T("Local AppWizard-Generated Applications")); LoadStdProfileSettings(); // Standard INI-Dateioptionen laden (einschließlich MRU) // Dokumentvorlagen der Anwendung registrieren. Dokumentvorlagen // dienen als Verbindung zwischen Dokumenten, Rahmenfenstern und Ansichten. CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CPlanProgDoc), RUNTIME_CLASS(CMainFrame), // Haupt-SDI-Rahmenfenster RUNTIME_CLASS(CPlanProgView)); AddDocTemplate(pDocTemplate); // Verbinden des COleTemplateServer mit der Dokumentvorlage. // Der COleTemplateServer legt auf Basis der Informationen in der // Dokumentvorlage bei der Anforderung von OLE-Containern // neue Dokumente an. m_server.ConnectTemplate(clsid, pDocTemplate, TRUE); // Hinweis: SDI-Anwendungen registrieren Server-Objekte nur dann, wenn /Embedding // oder /Automation in der Befehlszeile enthalten ist. CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // Testen, ob Ausführung als OLE-Server if (cmdInfo.m_bRunEmbedded || cmdInfo.m_bRunAutomated) { // Alle OLE-Server (-fabriken) als aktiv registrieren. Dies aktiviert die // OLE-Bibliotheken, um Objekte von anderen Anwendungen zu erstellen. COleTemplateServer::RegisterAll(); // Anwendung mit /Embedding oder /Automation gestartet. In diesem Fall // kein Hauptfenster anzeigen. return TRUE; } m_server.UpdateRegistry(OAT_DISPATCH_OBJECT); COleObjectFactory::UpdateRegistryAll(); cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing; if(!ProcessShellCommand(cmdInfo)) return FALSE; m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); if(StartDlg.DoModal()==IDOK) AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_OPEN); else AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_NEW); return TRUE; }
-
Das sieht soweit okay aus. Tja, dann wirst du wohl mal die Variable versuchen müssen.
-
Also ich denke das Problem ist dass es eine SDI Anwendung ist und
cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing;
für MDI gedacht ist. Da er kein neues Dokument anlegt findet er auch das Window nicht...
Ich werds mit der Variablen machen! THX!