MultiDocTemplate per code auswählen?



  • Hai doofer titel aber besser gings net 😉

    Also ich erzeuge verschiedene MultidocTemplate in meiner InitInstance und wenn ich nun in meiner MDI anwendung auf neu Gehe kommt dann natürlich ein kleines window wo eben die Template drinn stehen und ich eine auswählen muss und dann die entsprechenden views usw geöffnet werden. Ich möchte nun aber net dieses doofe fenster haben sondern die Template per code auswählen um eben wenn ich auf neu gehe gleich eine template gestartet bekomme. Geht das irgendwie?????

    thx im voraus für jede antwort 😉



  • Hallo!

    Also, meine Lösung funktioniert, aber so richtig zufrieden bin ich mit ihr nicht - hatte nur noch keine Idee zum Verbessern.

    Du must einen eigenen Templatemanager machen:

    Also: Eine Klasse von CDocManager ableiten und da drin die Funktionen OnFileNew und OnFileOpen überscheiben. Die werden von CWinApp automatisch aufgerufen, also wunder dich nicht über den fehlenden Aufruf.

    In den Funktionen legst du dann fest, was du machen willst. Ich wähle mal das erste und mal das zweite Template (das ist die Stelle, wo ich meine Lösung nicht mag).

    /*********************************************************************
      OnFileNew
      Es wird das erste DocTemplate in der internen Liste genutzt.
    *********************************************************************/
    void CMyDocManager::OnFileNew()
    {
    	CloseAllDocuments(FALSE);
    
    	if (!m_templateList.IsEmpty())
    	{
    		CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetHead();
    
    		ASSERT(pTemplate != NULL);
    		ASSERT_KINDOF(CDocTemplate, pTemplate);
    
    		pTemplate->OpenDocumentFile(NULL);
    	}
    }
    
    /*********************************************************************
      OnFileOpen
      Es wird das zweite DocTemplate in der internen Liste genutzt.
    *********************************************************************/
    void CMyDocManager::OnFileOpen()
    {
    	CloseAllDocuments(FALSE);
    
    	if (!m_templateList.IsEmpty())
    	{
    		POSITION pos = m_templateList.GetHeadPosition();
    		m_templateList.GetNext(pos);
    
    		CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos);
    
    		ASSERT(pTemplate != NULL);
    		ASSERT_KINDOF(CDocTemplate, pTemplate);
    
    		pTemplate->OpenDocumentFile(NULL);
    	}
    }
    

    Jetzt must du nur noch m_pDocManager von deiner App-Klasse auf deine eigene Klasse umbiegen.

    m_pDocManager = new CMyDocManager;
    

    Das sollte es gewesen sein.

    PS.: Sollte dir eine bessere Lösung einfallen, wie man ein bestimmtes DocTemplate auswählt, dann sag Bescheid.
    Ich habe versucht, eine Klasse von CMultiDocTemplate abzuleiten, um dann per cast herauszufinden, was ich denn da in der Liste gefunden habe - aber das ging irgendwie schief. 😞



  • hey, also naja ich habs jetzt so gemacht:

    MyDocTemplate2 = new CMultiDocTemplate(
    		IDR_SK_REPTYPE,
    		RUNTIME_CLASS(CDoc),
    		RUNTIME_CLASS(CChildFrame), // Benutzerspezifischer MDI-Child-Rahmen
    		RUNTIME_CLASS(CView));
    	//AddDocTemplate(MyDocTemplate2);
    	MyDocTemplate2->OpenDocumentFile(NULL);
    

    dieser code ist net von mir er war hier schpn in forum. Habe den tread jetzt net gefunden.
    Also damit kannst du ein neue Template mit window einfach erzeugen 😉


Anmelden zum Antworten