Numéro d'article: 139828 - Dernière mise à jour: mardi 21 novembre 2006 - Version: 2.1

PRB : MFC ne rouvrez pas ouvrir le document

A noterCet article s'applique à un système d'exploitation différent de celui que vous utilisez. Le contenu de l'article qui ne vous concerne peut-être pas est désactivé.

Sommaire

Agrandir tout | Réduire tout

Symptômes

Dans une application MFC AppWizard par défaut, l'infrastructure se rouvrira pas un fichier de document à partir du disque qui est actuellement ouvert dans l'application.

Résolution

Ce comportement est voulu par la conception même du produit. Dans une application MFC classique, la commande Ouvrir le fichier est mappée à la fonction CWinApp::OnFileOpen(). Dans les versions antérieures de MFC, cette fonction appelle à son tour la fonction CWinApp::OpenDocumentFile(). Depuis MFC 4.0, il est maintenant une classe CDocManager intermédiaire, mais l'appel à OnFileOpen() entraîne finit toujours par un appel à CWinApp::OpenDocumentFile().

CWinApp::OpenDocumentFile() traite d'abord la chaîne contenant le nom de fichier demandé. Puis elle parcourt la liste des modèles de document qui ont été ajoutés pour l'application par des appels à AddDocTemplate afin de trouver la meilleure correspondance entre le nom du fichier et un modèle de document pour l'ouvrir avec. À ce stade, si OpenDocumentFile() détecte que ce fichier est déjà actuellement ouvert pour un des modèles, OpenDocumentFile() Active l'affichage de ce fichier, puis renvoie. Il ne pas rouvrir le fichier.

Si ce fichier de document n'est pas actuellement ouvert et OpenDocumentFile() a trouvé un modèle valide pour ouvrir le fichier, elle appelle OpenDocumentFile() fonction de ce modèle. Cette fonction est responsable de l'ouverture du fichier et en chargeant ses données dans un document approprié.

Dans certaines situations, vous souhaiterez peut-être rouvrir un document ouvert. Par exemple, le bloc-notes effectue cette opération. Sur un fichier ouvert demande, le bloc-notes affiche d'abord une boîte de dialogue d'invite pour permettre de l'utilisateur d'enregistrer un fichier modifié. Si l'utilisateur ne cliquez pas sur Annuler dans cette boîte de dialogue, le bloc-notes affiche ensuite la boîte de dialogue Ouvrir. Si l'utilisateur choisit de rouvrir le fichier en cours, le bloc-notes relit à partir du disque et ignore toutes les modifications non enregistrées.

Pour dupliquer ce comportement dans un programme MFC, le programmeur doit substituer la fonction membre OpenDocumentFile() de CWinApp. Ou, si le modèle approprié pour le fichier est facile de déterminer (par exemple, lorsque l'application a uniquement un type de modèle de document), il serait possible d'appeler OpenDocumentFile() du modèle directement à partir d'une substitution de CWinApp::OnFileOpen(). Cela est illustré dans la section «Exemple de code» de cet article.

Notez que MFC affichera la boîte de dialogue invite Enregistrer modifié après la boîte de dialogue Ouvrir un fichier ; c'est le compteur pour le comportement du bloc-notes.

Statut

Ce comportement est voulu par la conception même du produit.

Plus d'informations

Exemple de code

/* Compile options needed: none
*/ 

void CWinApp::OnFileOpen()
{
   // prompt the user (with all document templates)
   CString newName;
   if (!DoPromptFileName(newName, AFX_IDS_OPENFILE,
          OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, TRUE, NULL))
       return; // open cancelled

   // Process newName string if necessary

   // Get pTemplate, a pointer to one of the app's document templates

   pTemplate->OpenDocumentFile(newName);
} // end of CWinApp::OnFileOpen()
				

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Foundation Class Library 4.2 sur le système suivant
    • Microsoft Visual C++ 1.0 Édition Professionnelle
    • Microsoft Visual C++ 1.5 Édition Professionnelle
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 Édition Professionnelle
    • Microsoft Visual C++ 5.0 Édition Initiation
    • Microsoft Visual C++ 2.0 Édition Professionnelle
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 6.01 Professional Edition
    • Microsoft Visual C++ 4.0 Édition Professionnelle
Mots-clés : 
kbmt kbdocview kbfileio kbprb KB139828 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 139828  (http://support.microsoft.com/kb/139828/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Retired KB ArticleExclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.