Ouvrir plusieurs types de fichiers

Ouvrir plusieurs types de fichiers - C++ - Programmation

Marsh Posté le 09-08-2002 à 15:15:48    

Je suis en train de faire un petit prog en visual C++.
J'ai utilisé MFC appwizard.
Je voudrais pouvoir ouvrir plusieurs types de fichiers avec ce prog.  
J'ai déjà pas mal cherché, mais je n'ai pas encore trouvé de réponse.
Est-ce que l'un d'entre vous connait une solution?

Reply

Marsh Posté le 09-08-2002 à 15:15:48   

Reply

Marsh Posté le 09-08-2002 à 15:32:31    

olivier__ a écrit a écrit :

Je suis en train de faire un petit prog en visual C++.
J'ai utilisé MFC appwizard.
Je voudrais pouvoir ouvrir plusieurs types de fichiers avec ce prog.  
J'ai déjà pas mal cherché, mais je n'ai pas encore trouvé de réponse.
Est-ce que l'un d'entre vous connait une solution?




Ta question n'est pas très clair : qu'est ce que tu veux faire exactement ?
Ouvrir des fichiers ( n'importe lequel ) ?

Reply

Marsh Posté le 09-08-2002 à 15:40:04    

Bon,
Quand je créé mon application, je peux préciser l'extension des fichiers que va utiliser mon programme (par ex: .uuu). Seulement, je ne peux donner qu'une seule extension, or j'ai besoin d'ouvrir plusieurs types de fichiers (.uuu et .vvv)
Dans le prog quand je fais Fichier->Ouvrir je n'ai donc que deux possibilités : *.uuu et *.* mais je voudrais rajouter *.vvv et traiter les .vvv et les .uuu de façons différentes.
Je ne sais pas si je suis trés clair là...

Reply

Marsh Posté le 09-08-2002 à 15:55:53    

Dans le code de ton appli, cherches "CFileDialog"
une fois que tu l'as trouvé, cherche "m_ofn.lpstrFilter"
Une fois que t'as trouvé ça, fais moi signe, et dit nous à quoi c égale actuellement.

Reply

Marsh Posté le 09-08-2002 à 16:13:36    

En C "à la main", on définit une chaîne comme ça dans les ressources
 
STRINGTABLE
BEGIN
  519, "Fichier ASCII (*.DAT)\0*.DAT\0Fichier CSV (*.CSV)\0*.CSV\0Fichier JCAMP (*.DX)\0*.DX\0"
END
 
On a le type .DAT, le .CSV et le .DX qui sont séparés => traités à part chacun.
 
En C, on fait un LoadString(hInst, 519, (LPSTR)szFiltre, sizeof(szFiltre)) pour charger la ressource dans la chaîne qu'on passe à m_ofn.lpstrFilter.
 
Au retour, m_ofn.nFilterIndex doit donner l'indice (>= 1 je crois) de l'extension utilisée (1 pour DAT, 2 pour CSV, 3 pour DX dans mon exemple).
 
Pour le C++, voir el_gringo...

Reply

Marsh Posté le 09-08-2002 à 16:16:20    

carbon_14 a écrit a écrit :

En C "à la main", on définit une chaîne comme ça dans les ressources
 
STRINGTABLE
BEGIN
  519, "Fichier ASCII (*.DAT)\0*.DAT\0Fichier CSV (*.CSV)\0*.CSV\0Fichier JCAMP (*.DX)\0*.DX\0"
END
 
On a le type .DAT, le .CSV et le .DX qui sont séparés => traités à part chacun.
 
En C, on fait un LoadString(hInst, 519, (LPSTR)szFiltre, sizeof(szFiltre)) pour charger la ressource dans la chaîne qu'on passe à m_ofn.lpstrFilter.
 
Au retour, m_ofn.nFilterIndex doit donner l'indice (>= 1 je crois) de l'extension utilisée (1 pour DAT, 2 pour CSV, 3 pour DX dans mon exemple).
 
Pour le C++, voir el_gringo...




 
Oula, j'crois que tu te complique la vie...

Reply

Marsh Posté le 09-08-2002 à 16:20:20    

El_Gringo : tu vas rire
y pas de CFileDialog dans le bazar généré par appwizard.
Quand je fais Fichier->Ouvrir, il fait ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)...
Je précise que c'est mon premier prog en VC++...

Reply

Marsh Posté le 09-08-2002 à 16:22:05    

correction :

Code :
  1. ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)

Reply

Marsh Posté le 09-08-2002 à 16:25:21    

ça c pas pareil :
OnFileOpen, c'est le nom de la méthode appelée quand on ouvre un fichier. Mais à mon avis, cette méthode, elle est appelée une fois qu'on a validé le fichier à ouvrir, pas avant d'ouvrir la boite de dialogue de choix de fichier.
Va qd même voir ce qu'il y a ds cette méthode OnFileDialog...

Reply

Marsh Posté le 09-08-2002 à 16:34:04    

Ben justement y pas de méthode OnFileOpen dans le code.
Je pense que le programme utilise la méthode par défaut de la classe CWinApp...
D'ailleurs j'ai trouvé ça dans MSDN :

Code :
  1. // The following message map, produced by AppWizard, binds the
  2. // File New, Open, and Print Setup menu commands to default
  3. // framework implementations of these commands.
  4. BEGIN_MESSAGE_MAP(CMyApp, CWinApp)
  5.    //{{AFX_MSG_MAP(CMyApp)
  6.    ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  7.       // NOTE - the ClassWizard will add and remove mapping macros here.
  8.       //    DO NOT EDIT what you see in these blocks of generated code!
  9.    //}}AFX_MSG_MAP
  10.    // Standard file based document commands
  11.    ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
  12.    ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
  13.    // Standard print setup command
  14.    ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
  15. END_MESSAGE_MAP()


C'est exactement ce qu'il y a dans mon code.


Message édité par olivier__ le 09-08-2002 à 16:34:43
Reply

Marsh Posté le 09-08-2002 à 16:34:04   

Reply

Marsh Posté le 09-08-2002 à 16:37:50    

Ms en fait y a une truc qui est pas possible :
t'as forcément, qq part dans le code qu'il t'a généré, une endroit ou est écrit :"uuu"
cherche cet endroit !
 
Menu "edit" --> "Find in files"


Message édité par El_gringo le 09-08-2002 à 16:38:31
Reply

Marsh Posté le 09-08-2002 à 16:45:37    

Oui,
Dans la "string table", il y a la chaine nommée IDR_UUUTYPE:

Code :
  1. \nUUU\nUUU\nFichiers UUU (*.uuu)\n.uuu\nUUU\nUUU Image


Et dans un fichier cpp, il y a :

Code :
  1. pDocTemplate = new CMultiDocTemplate(
  2.  IDR_UUUTYPE,
  3.  RUNTIME_CLASS(CImageViewerDoc),
  4.  RUNTIME_CLASS(CChildFrame), // custom MDI child frame
  5.  RUNTIME_CLASS(CImageViewerView));


Et dans le fichier ressource.h il y a :

Code :
  1. #define IDR_UUUTYPE                     129


Message édité par olivier__ le 09-08-2002 à 16:46:23
Reply

Marsh Posté le 09-08-2002 à 16:59:36    

Je crois que j'ai trouvé :
Oui,
Dans la "string table", j'ai rajouté la chaine nommée IDR_VVVTYPE définie comme IDR_UUUTYPE  
 
Et dans le fichier cpp, j'ai mis :
 

Code :
  1. pDocTemplate = new CMultiDocTemplate(
  2.     IDR_VVVTYPE,
  3.     RUNTIME_CLASS(CImageViewerDoc),
  4.     RUNTIME_CLASS(CChildFrame),// custom MDI child frame
  5.     RUNTIME_CLASS(CImageViewerView));

 
 
Le seul truc c'est qu'au démarrage y a une boite de dialogue qui s'ouvre pour me demander si le nouveau document qui est créé automatiquement au démarrage doit être un uuu ou un vvv...
 
Merci pour ta patience el_gringo :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed