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

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


Documents with the same file name extension

Olivier Courtois -- Olivier.Courtois@di.epfl.ch
Tuesday, June 04, 1996

Environment VC++ 4.0 Windows 95

	I am trying to merge two different SDI into one general MDI 
application.
	One of my problem is that some of the images I am trying to read, were 
readen in one app as 2D images and as 3D images in the other, and that they 
use the file extension ".mdfs".
	In order to cope with that,I have defined two different strings in the 
ressource String table:

IDR_MAPIMAMDFSTYPE 130 \nPC Viewer 2D\nPC Viewer 2D\nImages Smdfs 2D 	
			(*.mdfs)\n.MDFS\nMap2D.mdfs\nSmdfs 2D Document 
IDR_SMDFS3D	   147 \nPC Viewer 3D\nPC Viewer 3D\nImages Smdfs 3D 	
			(*.mdfs)\n.MDFS\nMap3D.mdfs\nSmdfs 3D Document 

and then declared in my initinstance

///////////// Format de visualisation  des images Smdfs 2D
AddDocTemplate(new CMultiDocTemplate(IDR_MAPIMAMDFSTYPE,
		RUNTIME_CLASS(CMapImageDoc),
		RUNTIME_CLASS(CMDIChildWnd),   
		RUNTIME_CLASS(CMapImageView)));
///////////// Format de visualisation  des images Smdfs 3D
AddDocTemplate(new CMultiDocTemplate(IDR_SMDFS3D,
		RUNTIME_CLASS(CSmdfs3DDoc),
		RUNTIME_CLASS(CMDISmdfs3DChildFrame), // MDI child frame
		RUNTIME_CLASS(CSmdfs3DView)));


Unfortunately when I try to open an .mdfs file it always uses the first 
solution (here:IDR_MAPIMAMDFSTYPE) even if I have choosen the second  in the 
"Files of type" combo box in the Open dialog box.
	I think that the problem may come from the code of the 
"CDocManager::OpenDocumentFile" function in Docmgr.cpp where it tests the best 
match for the different templates. I think it uses only the extension to choose 
the best match.
	Does anyone know how it works exactly, and how to force it to choose 
the way it opens not only with the extension of the file but also with the  
parameter defined in the "Files of type" combo box, and finally how to 
implement it easily (if possible) ?
	Any comment will be helpful.
		Thanks
			 
-- 
OO=======================OO=============================OO==================OO
||    _ /_/_/ _/_/_/     || Olivier Courtois            ||                  ||
||   _ /   / _/          || EPFL-LSP  (CH)		||   L'optimisme    ||
||  _ /  _/ _/      _/\  || Olivier.Courtois@di.epfl.ch || est le desespoir ||
|| _ /_/_/ _/_ /_/ _/ _\ || Tel: ++41 21 693-3944       ||   de la raison   ||
||                _/     || Fax: ++41 21 693-6680       ||                  ||
OO=======================OO=============================OO==================OO



Sheir Rahman Ali -- al930088@omega.scs.carleton.ca
Sunday, June 09, 1996

At 08:15 AM 6/4/96 +0200, you wrote:
>Environment VC++ 4.0 Windows 95
>
>	I am trying to merge two different SDI into one general MDI 
>application.
>	One of my problem is that some of the images I am trying to read, were 
>readen in one app as 2D images and as 3D images in the other, and that they 
>use the file extension ".mdfs".
>	In order to cope with that,I have defined two different strings in the 
>ressource String table:
>
>IDR_MAPIMAMDFSTYPE 130 \nPC Viewer 2D\nPC Viewer 2D\nImages Smdfs 2D 	
>			(*.mdfs)\n.MDFS\nMap2D.mdfs\nSmdfs 2D Document 
>IDR_SMDFS3D	   147 \nPC Viewer 3D\nPC Viewer 3D\nImages Smdfs 3D 	
>			(*.mdfs)\n.MDFS\nMap3D.mdfs\nSmdfs 3D Document 
>
>and then declared in my initinstance
>
>///////////// Format de visualisation  des images Smdfs 2D
>AddDocTemplate(new CMultiDocTemplate(IDR_MAPIMAMDFSTYPE,
>		RUNTIME_CLASS(CMapImageDoc),
>		RUNTIME_CLASS(CMDIChildWnd),   
>		RUNTIME_CLASS(CMapImageView)));
>///////////// Format de visualisation  des images Smdfs 3D
>AddDocTemplate(new CMultiDocTemplate(IDR_SMDFS3D,
>		RUNTIME_CLASS(CSmdfs3DDoc),
>		RUNTIME_CLASS(CMDISmdfs3DChildFrame), // MDI child frame
>		RUNTIME_CLASS(CSmdfs3DView)));
>
>
>Unfortunately when I try to open an .mdfs file it always uses the first 
>solution (here:IDR_MAPIMAMDFSTYPE) even if I have choosen the second  in the 
>"Files of type" combo box in the Open dialog box.
>	I think that the problem may come from the code of the 
>"CDocManager::OpenDocumentFile" function in Docmgr.cpp where it tests the best 
>match for the different templates. I think it uses only the extension to
choose 
>the best match.
>	Does anyone know how it works exactly, and how to force it to choose 
>the way it opens not only with the extension of the file but also with the  
>parameter defined in the "Files of type" combo box, and finally how to 
>implement it easily (if possible) ?
>	Any comment will be helpful.
>		Thanks
>

Try using your own File ---> NEW menu.  Have the NEW as a popup item.
For the popups have one menu item for MAPIMAMDFSTYLE (whatever) and another
for SMDFS3D.
IE.     FILE
                NEW
                        DOC1
                        DOC2

Map DOC1 & DOC2 to a handler of your CWinApp.  Of course you have have to
have 2 pointer
object of CMultiDocTemplate (one for each doc type).  
In the handler just call
        pDOC1->OpenDocumentFile(NULL);  // I think thats what its called
                                        // look up members of CMultiDocTemplate

ie
void myApp::OnNewDoc1()
{       pDoc1->OpenDocumentFile(NULL);
}


Hope that helps
rahman

*******************************************
*   Sheir Rahman Ali                      *
*   "Licensed Remote Controll Operator"   *
*******************************************




Roger Onslow -- Roger_Onslow@compsys.com.au
Tuesday, June 11, 1996

[Mini-digest: 2 responses]

>Environment VC++ 4.0 Windows 95
>
> I am trying to merge two different SDI into one general MDI 
>application.
> One of my problem is that some of the images I am trying to read, were 
>readen in one app as 2D images and as 3D images in the other, and that they 
>use the file extension ".mdfs".
> In order to cope with that,I have defined two different strings in the 
>ressource String table:
>
>IDR_MAPIMAMDFSTYPE 130 \nPC Viewer 2D\nPC Viewer 2D\nImages Smdfs 2D  
>   (*.mdfs)\n.MDFS\nMap2D.mdfs\nSmdfs 2D Document 
>IDR_SMDFS3D    147 \nPC Viewer 3D\nPC Viewer 3D\nImages Smdfs 3D  
>   (*.mdfs)\n.MDFS\nMap3D.mdfs\nSmdfs 3D Document 
>
>and then declared in my initinstance
>
>///////////// Format de visualisation  des images Smdfs 2D
>AddDocTemplate(new CMultiDocTemplate(IDR_MAPIMAMDFSTYPE,
>  RUNTIME_CLASS(CMapImageDoc),
>  RUNTIME_CLASS(CMDIChildWnd),   
>  RUNTIME_CLASS(CMapImageView)));
>///////////// Format de visualisation  des images Smdfs 3D
>AddDocTemplate(new CMultiDocTemplate(IDR_SMDFS3D,
>  RUNTIME_CLASS(CSmdfs3DDoc),
>  RUNTIME_CLASS(CMDISmdfs3DChildFrame), // MDI child frame
>  RUNTIME_CLASS(CSmdfs3DView)));
>
>
>Unfortunately when I try to open an .mdfs file it always uses the first 
>solution (here:IDR_MAPIMAMDFSTYPE) even if I have choosen the second  in the 
>"Files of type" combo box in the Open dialog box.

The "File of type" only specifies a pattern match
for file names to appear in the dialog box.  It has no
bearing on what how the file is opened, or what type
of CDocument is created.

Only place where you get a choice is in the FileNew,
where you are asked what type of document you want,
and then selected correct doc template.

> I think that the problem may come from the code of the 
>"CDocManager::OpenDocumentFile" function in Docmgr.cpp where it tests the best 
>match for the different templates. I think it uses only the extension to 
choose 
>the best match.
> Does anyone know how it works exactly, and how to force it to choose 
>the way it opens not only with the extension of the file but also with the  
>parameter defined in the "Files of type" combo box, and finally how to 
>implement it easily (if possible) ?

Yes (more of less).

> Any comment will be helpful.

OpenDocumentFile calls the "MatchDocType" virtual function of
the CDocTemplate document template.  Define your own template
class (derived from CMultiDocTemplate) which overrides this.

Unfortunately, this is only given the file name to work from.
But if it is possible to determine the file type by looking at
some kind of file header, then you could open and read
the header part and determine the type from there.

Alternatively, if you "know" what type to expect, you
can return an appropriately.

Or perhaps pop up a message box asking the user what type
to file it is?

Roger Onslow


-----From: George Voronoff 

If you have MSDN, there is an article called:
        "How to Create New Documents Without CWinApp::OnFileNew"
You might find some help there.

G





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