15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Multidoc templates

Janardan R. Sethi -- sethijr@logic.clarkson.edu
Monday, December 02, 1996

Hi, 
    Environment: VC++4.0 MFC 4.0 WindowsNT 4.0
 
My application requires 2 documents of different types with just one
object each created when the application is run. I am using
CMultidoctemplate to create the 2 documents but i am not able to construct
them on initialization of the application. How can i create the two
objects on initialization of the application.
 
I would also like the two document objects to communicate on occurence of
an event in one of the documents, without calling the member function of
the other document. Is there any way in which i could generate some sort
of window message that could be handled by the other document. 

Thanking you in advance,
Sethi J
sethijr@craft.clarkson.edu








Doug Brubacher -- Doug_Brubacher@compuware.com
Thursday, December 05, 1996

[Mini-digest: 3 responses]

     Sethi,
     
     Your CMultiDocTemplate instance, which you use in 
     CYourApp::InitInstance to add your document templates, inherits from 
     CDocTemplate.
     
     To construct your two documents on application initialization use the 
     function CDocTemplate::OpenDocumentFile();
     
     Here's a sample InitInstance with only one document template that 
     demonstrates this:
     
     BOOL CMyApp::InitInstance()
     {
     
     
     
        // Register the application's document templates.  Document 
     templates
        //  serve as the connection between documents, frame windows and 
     views.
     
        CMultiDocTemplate* pDocTemplate;
        pDocTemplate = new CMultiDocTemplate(
                IDR_MFCLTYPE,
                RUNTIME_CLASS(CMyDoc),
                RUNTIME_CLASS(CChildFrame), // custom MDI child frame
                RUNTIME_CLASS(CMyView));
        AddDocTemplate(pDocTemplate);
     
     
     
        pDocTemplate->OpenDocumentFile(NULL);  // HERE'S THE LINE TO 
     CONSTRUCT A DOCUMENT.
     // NOTE YOU HAVE TO WAIT TILL THE MAINFRAME HAS BEEN CREATED BEFORE 
     MKAING THIS CALL.
     
     
        return TRUE;
     }
     
     As for your second question, only the active document is part of the 
     standard MFC command routing.  The best solution is probably to route 
     it directly your self by trapping it in the MainFrame and then 
     manually routing it to the documents you desire.  Unfortunately that 
     sounds like exactly what you did not want to do.
     CWinApp provides GetFirstDocTemplatePosition and GetNextDocTemplate 
     which makes it more convenient to walk the document templates and 
     documents in your application, but it is still a bit of a pain.
     
     Regards,
     
     Doug Brubacher
     DouglasB@msn.com

-----From: "Janardan R. Sethi" 


Hi, 
    Environment: VC++4.0 MFC 4.0 WindowsNT 4.0
 
My application requires 2 documents of different types with just one
object each created when the application is run. I am using
CMultidoctemplate to create the 2 documents but i am not able to construct
them on initialization of the application. How can i create the two
objects on initialization of the application.
 
I would also like the two document objects to communicate on occurence of
an event in one of the documents, without calling the member function of
the other document. Is there any way in which i could generate some sort
of window message that could be handled by the other document. 

Thanking you in advance,
Sethi J
sethijr@craft.clarkson.edu






-----From: "P. Senthil" 

Janardan R. Sethi wrote:
> 
> Hi,
>     Environment: VC++4.0 MFC 4.0 WindowsNT 4.0
> 
> My application requires 2 documents of different types with just one
> object each created when the application is run. I am using
> CMultidoctemplate to create the 2 documents but i am not able to construct
> them on initialization of the application. How can i create the two
> objects on initialization of the application.
> 
> I would also like the two document objects to communicate on occurence of
> an event in one of the documents, without calling the member function of
> the other document. Is there any way in which i could generate some sort
> of window message that could be handled by the other document.
> 
> Thanking you in advance,
> Sethi J
> sethijr@craft.clarkson.edu

1. You can't create two different documents on the same template. Use
different templates for the documents.
2. Documents can't handle messages as they are not derived from CWnd.
You can communicate (through member functions) through the template. You
can iterate through the document list use GetFirstDocPosition and
GetNextDoc which are members of the template.

P. Senthil
mail:senthilp@geocities.com
www :www.geocities.com/SiliconValley/Heights/6504/




| Вернуться в корень Архива |