[ Djuki @ 29.07.2004. 10:50 ] @
Treba mi pomoc za klase CMDIFrameWnd, i CMDIChildWnd.
U initInstance kreira se i pokaze glavni Frame, i to je ok. Ono sto ja zelim jeste da imam vise razlicitih naslednika klase CMDIChildWnd koji bi bili u vezi sa CDocument i CFrameView. Povezao sam ih u InitInstance na sledeci nacin:
Code:

    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(IDR_DvaTYPE,
        RUNTIME_CLASS(CDokument),
        RUNTIME_CLASS(CChildFrame), // custom MDI child frame
        RUNTIME_CLASS(CPogled)); // Naslednik klase CFrameView
    CChildFrame * Cfrm= new CChildFrame();

Dalje kada zelim da komandom iz menija napravim frame, tj Child Prozor
ako to uradim ovako:
Code:

    CChildFrame * frame= new CChildFrame();
    frame->Create(NULL, "Imedd", WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, CMDIChildWnd::rectDefault, this;    
    frame->ShowWindow(SW_SHOW);


Problem je sto na taj nacin se otvra standardni frame koji nije u vezi sa CFrameView klasom, u mom slicaju CPogled. Tako da mi je onaj kod sa DocTemplate-om koji povezuje ove tri klase bezznacajan.
Sta da radim da stvorim MDIChilfFrame koji ce da prikaze CFrameView klasu u sebi ??
[ Djuki @ 29.07.2004. 19:18 ] @
Da budem malo prezizniji:
Ukoliko u aplikaciji imam vise setova dokument/prikaz, i ako koristim f-ju AddDocTemplate() u listi Doctepmplate-a imacu vise pokazivaca na dokument/prikaz prozore. i u tom slucaju ako koristim f-ju OnFileNew() korisnic ce morati da bura iz liste FileNew koji prikaz zeli da vidi.
Ja zelim da izbegnem da korisnik bira iz liste prikaza, vec da mu se automatski otvaraju prikazi u zavisnosti sta je iz menija odabrao. Sad se pitam da li je moguce to raditi bez AddDocTeplate() i OnFileNew(). Stecicu utisak da niko na ovom forumu ne koristi MFC ;) Dosta mi je hitno da resim ovaj problem.
[ milanche @ 30.07.2004. 05:08 ] @
Ima nas dosta koji koristimo MFC (pa nam ni Document/View arhitektura uopste nije
tudja), ali si tako nemusto opisao problem da smo odprilike shvatili da je bolje ne
upustati se u nagadjanja sta si hteo da kazes.
[ Djuki @ 30.07.2004. 10:37 ] @
Citat:
Ima nas dosta koji koristimo MFC (pa nam ni Document/View arhitektura uopste nije
tudja), ali si tako nemusto opisao problem da smo odprilike shvatili da je bolje ne
upustati se u nagadjanja sta si hteo da kazes.


Ok, sigurno si u pravu.
Ajde da probam ponovo:
Ja hocu da napravim MDI Aplikaciju naravno koristeci klase CMDIFrameWnd za glavni okvir Aplikacije, i CMDIChildWnd. Ako klasu CMDIChildWnd povezem sa nekim dokumentom i prikazom na sledeci nacin:
Code:

pDocTemplate = new CMultiDocTemplate(IDR_DvaTYPE,
    RUNTIME_CLASS(CFirstDoc),
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame
    RUNTIME_CLASS(CFirstView));
  AddDocTemplate(pDocTemplate);
  pDocTemplate = new CMultiDocTemplate (
    IDR_DvaTYPE,
    RUNTIME_CLASS(CSeconDoc),
    RUNTIME_CLASS(CChildFrame),
    RUNTIME_CLASS(CSecondViewi)
    );
  AddDocTemplate(pDocTemplate);

Sada u listi templejta imam dva dokumenta prikaza i kada korisnik zeli da vidi jedan od ta dva koristeci f-ju OnFileNew() on mora da bira iz liste Templejta koji dokument ili bolje da kazem prozor zeli da otvori. Moje pitanje je kako to da izbegnem, da bi korisnik direktno otvori ili jedan ili drugi prozor(dokument/prikaz).
[ Djuki @ 30.07.2004. 10:42 ] @
Nasao san na Code Guru da moze ovako:
Code:

  POSITION pos = GetFirstDocTemplatePosition();
  CDocTemplate* pTemplate = GetNextDocTemplate(pos);
  pTemplate->OpenDocumentFile(NULL);  // creates the first document

  pTemplate = GetNextDocTemplate(pos);
  pTemplate->OpenDocumentFile(NULL);  // creates the second document

  // etc...


Ako neko ima neko drugo, mozda elegantnije resenje neka napise.
I izvinjavam se ako u bilo kom delu tread-a nisam bio dovoljno jasan i koncizan.
Hvala