beim SDI---Maske mit Menüs löschen



  • hi
    also ich hätte da nochmal ne Frage...
    Wenn man ein neues Projekt erstellt und " Dialogbasierend " auswählt und
    dann das Programm ausführen möchte, sieht man "nur" die Marke die man erstellt hat.

    Wenn man jetzt aber "SDI"auswähltund eine Maske erstellt muss man die ja erst in die Maske "Unbekannt...die mit den Menüs" einbringen, hat auch geklappt
    Jetzt die Frage, kann man dann eigentlich die andere Maske("Unbekant.. die mit den Menüs") irgendwie löschen, so dass es aussieht wie beim "Dialogbasierend".?
    DANKE



  • Guck in die InitInstance. Irgendwo wird ShowWindow aufgerufen - auskommentieren.
    Und statt TRUE gibst du FALSE zurück.

    Ansonsten vergleich doch mal die InitInstance Funktionen beider Varianten.

    (PS: Sorry, Datenbank angucken hab ich wieder nicht geschafft, dauert länger...)



  • hi estartu_de
    yup,ist okay, bin überhaupt froh dass du's dir anschauen möchtest 🙂

    mmmh ne hat leider net geklappt, wenn ich beide vergleich, seh ich auch nicht was ich ändern sollt.



  • Das klingt so wie das Projekt, was ich von dir hier habe - ich zeig dir mal was ich meine anhand der InitInstance davon:

    BOOL CAdoDatabaseApp::InitInstance()
    {
    	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)
    
    // Das hier kann raus, du brauchst es nicht, wenn du nur einen Dialog nutzen willst.
    	// Dokumentvorlagen der Anwendung registrieren. Dokumentvorlagen
    	//  dienen als Verbindung zwischen Dokumenten, Rahmenfenstern und Ansichten.
    
    	//CSingleDocTemplate* pDocTemplate;
    //	pDocTemplate = new CSingleDocTemplate(
    //		IDR_MAINFRAME,
    //		RUNTIME_CLASS(CAdoDatabaseDoc),
    //		RUNTIME_CLASS(CMainFrame),       // Haupt-SDI-Rahmenfenster
    //		RUNTIME_CLASS(CAdoDatabaseView));
    //	AddDocTemplate(pDocTemplate);
    
    	// Befehlszeile parsen, um zu prüfen auf Standard-Umgebungsbefehle DDE, Datei offen
    	CCommandLineInfo cmdInfo;
    	ParseCommandLine(cmdInfo);
    
    	// Verteilung der in der Befehlszeile angegebenen Befehle
    	if (!ProcessShellCommand(cmdInfo))
    		return FALSE;
    
    // Hier wird das Fenster angezeigt, brauchst du auch nicht.
    	// Das einzige Fenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden.
    //	m_pMainWnd->ShowWindow(SW_SHOW);
    //	m_pMainWnd->UpdateWindow();
    
    // Hier kannst du nun deinen Dialog aufrufen. (Der steht ja noch im View, ich hol ihn mal.)
    // Willst du den Dialog wirklich Nicht-modal haben? Das würde so jetzt keinen Sinn mehr machen, deswegen...
    	Dilog dlg;
    	dlg.DoModal();
    
    	return FALSE;// Hier gibst du FALSE zurück damit das Programm beendet wird.
    }
    

    Wenn das noch nicht das gewünschte Ergebnis ist, zeig bitte mal beide InitInstance Funktionen komplett. Die sind in der App-Klasse.



  • guten morgen

    habs so gemacht,aber dann zeigts mir gar nichts an..

    also die Funktion mit Dialogbasierend(Projetname einfach nur "r")

    /////////////////////////////////////////////////////////////////////////////
    // CRApp Initialisierung
    
    BOOL CRApp::InitInstance()
    {
    	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
    
    	CRDlg dlg;
    	m_pMainWnd = &dlg;
    	int nResponse = dlg.DoModal();
    	if (nResponse == IDOK)
    	{
    		// ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
    		//  Dialogfelds über OK zu steuern
    	}
    	else if (nResponse == IDCANCEL)
    	{
    		// ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
    		//  Dialogfelds über "Abbrechen" zu steuern
    	}
    
    	// Da das Dialogfeld geschlossen wurde, FALSE zurückliefern, so dass wir die
    	//  Anwendung verlassen, anstatt das Nachrichtensystem der Anwendung zu starten.
    	return FALSE;
    }
    

    und nun von SDI

    /////////////////////////////////////////////////////////////////////////////
    // CAdoDatabaseApp Initialisierung
    
    BOOL CAdoDatabaseApp::InitInstance()
    {
    	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(CAdoDatabaseDoc),
    		RUNTIME_CLASS(CMainFrame),       // Haupt-SDI-Rahmenfenster
    		RUNTIME_CLASS(CAdoDatabaseView));
    	AddDocTemplate(pDocTemplate);
    
    	// Befehlszeile parsen, um zu prüfen auf Standard-Umgebungsbefehle DDE, Datei offen
    	CCommandLineInfo cmdInfo;
    	ParseCommandLine(cmdInfo);
    
    	// Verteilung der in der Befehlszeile angegebenen Befehle
    	if (!ProcessShellCommand(cmdInfo))
    		return FALSE;
    
    	// Das einzige Fenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden.
    	m_pMainWnd->ShowWindow(SW_SHOW);
    	m_pMainWnd->UpdateWindow();
    
        return TRUE;
    
    }
    

    ..aber wenns nicht klappt ist au net schlimm, 😉



  • Okay, ich lösch jetzt mal die Funktionen so zusammen, dass du besser erkennen kannst, welche Codeteile ich meinte. (Das heißt NICHT, dass du das löschen sollst - das dient nur der Übersicht.)

    /////////////////////////////////////////////////////////////////////////////
    // CRApp Initialisierung
    
    BOOL CRApp::InitInstance()
    {
    // [...]
    
        CRDlg dlg;
        m_pMainWnd = &dlg;
        int nResponse = dlg.DoModal();
        if (nResponse == IDOK)
        {
            // ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
            //  Dialogfelds über OK zu steuern
        }
        else if (nResponse == IDCANCEL)
        {
            // ZU ERLEDIGEN: Fügen Sie hier Code ein, um ein Schließen des
            //  Dialogfelds über "Abbrechen" zu steuern
        }
    
        // Da das Dialogfeld geschlossen wurde, FALSE zurückliefern, so dass wir die
        //  Anwendung verlassen, anstatt das Nachrichtensystem der Anwendung zu starten.
        return FALSE;
    }
    
    BOOL CAdoDatabaseApp::InitInstance()
    {
    // Hier stand das Selbe wie oben...
    
        // Ä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(CAdoDatabaseDoc),
            RUNTIME_CLASS(CMainFrame),       // Haupt-SDI-Rahmenfenster
            RUNTIME_CLASS(CAdoDatabaseView));
        AddDocTemplate(pDocTemplate);
    
        // Befehlszeile parsen, um zu prüfen auf Standard-Umgebungsbefehle DDE, Datei offen
        CCommandLineInfo cmdInfo;
        ParseCommandLine(cmdInfo);
    
        // Verteilung der in der Befehlszeile angegebenen Befehle
        if (!ProcessShellCommand(cmdInfo))
            return FALSE;
    
        // Das einzige Fenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden.
        m_pMainWnd->ShowWindow(SW_SHOW);
        m_pMainWnd->UpdateWindow();
    
        return TRUE;
    }
    

    Siehst du nun, wo der Dialog aufgerufen werden muss und welche Zeilen du löschen kannst?
    Du kannst im Prinzip alles, was unten noch da steht löschen und das, was oben steht auf das Projekt angepasst da rein schreiben. 🙂

    Wenn du immer noch nicht weiter weißt, beantworte mal folgende Fragen:
    Wie heißt die Dialogklasse?
    Wie heißt die Headerdatei dazu?
    Du willst wirklich nur den Dialog?

    Sollte es das Projekt sein, was ich hier habe, dann kann ich mir die Fragen selber beantworten - ist es das? 😕



  • hey super danke estartu_de, endlich klappt mal was (hast mir ja auch alles gezeigt wie's geht 🙂 )
    das sieht dann so aus...muss nur noch deine Kommentare übernehmen

    ...
    	// Ä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(CAdoDatabaseDoc),
    //		RUNTIME_CLASS(CMainFrame),       // Haupt-SDI-Rahmenfenster
    //		RUNTIME_CLASS(CAdoDatabaseView));
    //	AddDocTemplate(pDocTemplate);
    
    	// Befehlszeile parsen, um zu prüfen auf Standard-Umgebungsbefehle DDE, Datei offen
    	//CCommandLineInfo cmdInfo;
    	//ParseCommandLine(cmdInfo);
    
    	// Verteilung der in der Befehlszeile angegebenen Befehle
    	//if (!ProcessShellCommand(cmdInfo))
    	//	return FALSE;
    	Dilog dlg;
        dlg.DoModal();
    
    	// Das einzige Fenster ist initialisiert und kann jetzt angezeigt und aktualisiert werden.
    //	m_pMainWnd->ShowWindow(SW_SHOW);
    //	m_pMainWnd->UpdateWindow();
    
        return FALSE;
    
    }
    


  • // Willst du den Dialog wirklich Nicht-modal haben? Das würde so jetzt keinen Sinn mehr machen, deswegen

    was hast du da eigentlich gemeint?
    Hab ich jetzt eigentlich zuviel auskommentiert?



  • 😕 Das ist doch das aus dem Beitrag von heute morgen...

    Naja, Hauptsache, es geht. 😃
    Die Kommentare sind übrigens nicht von mir (bis auf zwei Zeilen), sondern vom Assistenten. Und meine musst du nicht übernehmen, die waren nur zum Zeigen.



  • ne nicht ganz

    if (!ProcessShellCommand(cmdInfo)) 
            return FALSE;
    

    das muss man auch noch streichen....aber egal

    Aber gehen tuts jetzt nicht mehr, oh je, ich lass es jetzt lieber...
    sobald ich auf "erster"klick wird dass Programm beendet und meine Daten aus der Datenbank (die schon drin sind) werden auch nicht angezeigt



  • Same Procedure as last time...

    ... Bereinigen, einpacken, herschicken. 😉

    Ich guck dann mal schnell - das geht wirklich schneller, denn dafür muss ich mich nicht in was einlesen. 🙂



  • yup hast post



  • Hast Rückmail. 🙂



  • hallo estartu_de
    besten Dank für deine Mail 🙂 Hast mir sehr weitergeholfen
    Das mit dem Abbrechen klappt, aber es ist glaub besser wennn ichs so lasse wie ichs vorher hatte, sonst muss ich ja alles ändern (Hinzufügen,Aktuellen Datensatz anzeigen usw, geht nämlich noch nicht)

    Das mit dem Datum hat wunderbar geklappt.
    Allerdings geht das nur wenn ich die Dialog-Maske anzeigen lass, wenn ichs wie vorher (MaskeMenü+Dialog) wieder haben funktioniert es net. 😕


Anmelden zum Antworten