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

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


Document Templates

Jonas =?iso-8859-1?Q?Andur=E9n?= -- jonas.anduren@mailbox.swipnet.se
Sunday, October 13, 1996

Environment : VC4.2 and Win95

Can I have multiple documenttemplates without getting the documenttype
selection dialogbox?

Background:
I have an application with a static splitterwindow. There is a different
CFormview class in each pane. I want both of these panes to access the
same document object so I created two documenttemplates that points to
the same documentclass. But here is my problem. When I have two document
templates I allways get the dialogbox where I am to select documenttype.
I have stepped through the code and I can't see that I can get around
this without messing with the MFC source code (I don't want that). Am on
the right track or should I consider an alternative?

Thanks in advance for any tip...

J.A



Randy Sales -- rsc@halcyon.com
Monday, October 14, 1996

[Mini-digest: 5 responses]

Jonas =?iso-8859-1?Q?Andur=E9n?= wrote:
> 
> Environment : VC4.2 and Win95
> 
> Can I have multiple documenttemplates without getting the documenttype
> selection dialogbox?

Yes, you can.  I had a similar problem in that I wanted to emulate how Developer 
Studio brings up the file type selection dialog _only_ when File::New is 
selected, not when Ctrl+N or the New File button is pressed.  The way I solved 
this was to create a different message ID for the Ctrl+N accelerator (and the New 
File Button), something like ID_FILE_NEW_TESTFILE.  I then just used Class Wizard 
to add a new COMMAND handler for this message ID in my CWinApp derived class.  
The command handler looks like this:

void CIdeApp::OnFileNewTestfile() 
{
    POSITION Pos = GetFirstDocTemplatePosition();
    GetNextDocTemplate(Pos)->OpenDocumentFile(NULL);
}

There's nothing special here, it just emulates what the MFC code does in 
CDocManager::OnFileNew() when you have more than one document template.  But 
instead of presenting the file type selection dialog, I just force the creation 
of an empty document using the first document template in the DocTemplate list.  
(This will be the first one you created in InitInstance by a call to 
AddDocTemplate.)  Hope this helps.

Randy Sales

-- 
RS Consulting
1521 1/2 Cedar Street
Everett, WA 98201

Phone   206-259-1056
Fax     206-259-1315
email   rsc@halcyon.com

> 
> Background:
> I have an application with a static splitterwindow. There is a different
> CFormview class in each pane. I want both of these panes to access the
> same document object so I created two documenttemplates that points to
> the same documentclass. But here is my problem. When I have two document
> templates I allways get the dialogbox where I am to select documenttype.
> I have stepped through the code and I can't see that I can get around
> this without messing with the MFC source code (I don't want that). Am on
> the right track or should I consider an alternative?
> 
> Thanks in advance for any tip...
> 
> J.A
-----From: ganeshs@nationwide.com

    What you  need is  just a _single_  (SDI) document  template object,
which has the CRuntimeClass * for any one of the views. Create the views
in  the   Splitter  (after  you   create  the  splitter   window)  using
CSplitterWnd::CreateView(),  in the  OnCreateClient()  override in  your
CFrameWnd-derived class...

/ ___|    / ___| __ _ _ __   ___  ___| |    I do not speak for
\___ \   | |  _ / _` | '_ \ / _ \/ __| '_ \ Tata   Unisys   or
 ___) |  | |_| | (_| | | | |  __/\__ \ | | |Nationwide    Ins.
|____(_)  \____|\__,_|_| |_|\___||___/_| |_|------------------
-----From: Hugh Robinson 


Make the second part of the string resource which is associated with the   
second view blank, i.e. instead of
 \nDoc\nDoc description\n.....

make it
 \nDoc\n\n...

This will stop the dialog box from appearing

-----From: "Manos D. Anastasiadis" 

There are a couple of solutions out of the top of my head:
1) *Don't* AddDocTemplate() your template after you create it
(you can still use it to create docs/views/frames on your own)
2) Write a handler for ID_FILE_NEW / ID_FILE_OPEN to popup
different dialog boxes (without the additional file types)

/*==================================*
 * Manos D. Anastasiadis            *
 * Computer Engineer                *
 * Technical University of Crete    *
 * Mu.S.I.C.                        *
 * manos@ced.tuc.gr                 *
 *==================================*/

-----From: "Michael J. Morel" 

The answer lies in your Document string resources.  Choose one view to =
be the one created by default when a new doc is created.  For this view, =
the document string looks something like this (this is from a sample =
program of mine, so don't mind the names):
=09
	IDR_FORUMTYPE: 	"\nForum\nForum\n\n\nForum.Document\nForum Document"

Then, for your other views, the doc string looks like:
	IDR_THREADTYPE	"ThreadView\nForum\n"

These strings are defined in the resource editor.  See the documentation =
for the GetDocString function for an explanation of the various parts of =
this string.

Mike Morel
Mushroom Software
Home of MFC For Yourself
http://www.mushroomsoft.com/mushroom




Shrikanth Swaminathan -- sshri@csi-gmbh.de
Monday, October 14, 1996

[Mini-digest: 5 responses]

have a look at the Checkbook sample. It does what u want.

> From: Jonas Andurйn 
> To: mfc-l@netcom.com
> Subject: Document Templates
> Date: Sunday, October 13, 1996 2:04 PM
> 
> Environment : VC4.2 and Win95
> 
> Can I have multiple documenttemplates without getting the documenttype
> selection dialogbox?
> [snip]
> J.A
-----From: kmg@gregcons.com (Kate Gregory)

You need to edit the string table. The prompt to be used in the File New
"what kind of file?"
routine is in the "caption" for your IDR_SOMETHINGTYPE resource. That is a
number
of small strings separated by \n, and they are (cutting and pasting from a
book file
here, excuse the formatting) :

*** begin bulleted list
	[1b]	Window Title: used by SDI apps in the title bar. 
	[1b]	Document Name: used as the root for default document names.
	[1b]	File New Name: prompt in the File New dialog for file type. 
	[1b]	Filter Name: an entry for the drop down box List File of Type 
in the File Open dialog. 
	[1b]	Filter Extension: the extension that matches the filter name.
	[1b]	Registry File Type ID: a short string to be stored in the registry. 
	[1b]	Registry File Type Name: a longer string to be shown in dialog boxes 
involving the registry. 
*** end bulleted list

Leave the "File New Name" blank, that is nothing between the \n and the next
\n, to
take away the name. The dialog only comes up when there are multiple names
to choose
among (or multiple views each associated with the same name), so taking the
names away 
from each resource prevents the dialog.

Kate
-- 
Kate Gregory, kate@gregcons.com    www.gregcons.com
Watch for my completely new edition of Using Visual C++ this fall...
Using Visual C++ 4.2 will be in stores by late October.

-----From: "Alexander Grigoriev" 

Yes, just don't call AddDocTemplate for the additional templates.

-----From: Joseph Jones 

I beleive you need to override the OnNewDocument function to get rid of
the multiple template selection dialog box. Look at the code for single
dialog template creation and use that.

joe

-----From: "PJ Durai" 


     Hi J.A.
     
     I had a similar requirement. Here is what you need to do to make it 
     work.
     
     Do NOT create a second doc template. Leave the InitInstance as it was. 
     ( I am presuming it is a SDI, generated by AppWizard)
     
     You will have to do something along these lines in your
     CMainFrame::OnCreateClient. 
     
     (I had 4 views. )
     
     BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, 
                CCreateContext* pContext) 
     {
        m_wndSplitter.CreateStatic (this, 2, 2);
     
        CRect rect;
        GetClientRect (rect);
        CSize size;
     
        ...
     
        m_wndSplitter.CreateView ( 0,0, RUNTIME_CLASS (CTestView), 
                size, pContext);  // this view is the default one generated 
                                  // by appwizard and in DocTemplate.       
     
        ...    calculate size etc..                                         
                            
        m_wndSplitter.CreateView ( 0,1, RUNTIME_CLASS (CImageView), 
                size , pContext);
     
        m_wndSplitter.CreateView ( 1,0, RUNTIME_CLASS (CTagView), 
                size , pContext);
        m_wndSplitter.CreateView ( 1,1, RUNTIME_CLASS (CLogView), 
                size , pContext);
                
        ...
     
        return TRUE; // dont call the superclass function.
     }
     
     Hope this helps.
     pj
        




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