Enregistrement d’un Document StandardSaving a Standard Document

L’environnement gère l’enregistrer, enregistrer sous, puis enregistrer toutes les commandes.The environment handles the Save, Save As, and Save All commands. Lorsqu’un utilisateur sélectionne enregistrer, enregistrer en tant que, ou Enregistrer tout à partir de la fichier menu ou de la fermeture de la solution, ce qui entraîne un Enregistrer tous les, le processus suivant se produit.When a user selects Save, Save As, or Save All from the File menu or closes the solution, resulting in a Save All, the following process occurs.

Éditeur standardStandard Editor
Enregistrer, enregistrer sous, puis enregistrer tout gestion des commandes pour un éditeur standardSave, Save As, and Save All command handling for a standard editor

Ce processus est détaillé dans les étapes suivantes :This process is detailed in the following steps:

  1. Lorsque le enregistrer et enregistrer en tant que des commandes sont sélectionnées, l’environnement utilise le SVsShellMonitorSelection pour déterminer la fenêtre du document de service et par conséquent, les éléments doivent être enregistrés.When the Save and Save As commands are selected, the environment uses the SVsShellMonitorSelection service to determine the active document window and thus what items should be saved. Une fois que la fenêtre de document actif est connue, l’environnement de recherche le pointeur de la hiérarchie et l’identificateur de l’élément (itemID) pour le document dans la table de document en cours d’exécution.Once the active document window is known, the environment finds the hierarchy pointer and item identifier (itemID) for the document in the running document table. Pour plus d’informations, consultez Table de documents en cours d’exécution.For more information, see Running Document Table.

    Lorsque le Enregistrer tout commande est activée, l’environnement utilise les informations dans la table de document en cours d’exécution pour compiler la liste de tous les éléments à enregistrer.When the Save All command is selected, the environment uses the information in the running document table to compile the list of all items to save.

  2. Lorsque la solution reçoit un QueryStatus appel, il itère au sein du jeu d’éléments sélectionnés (autrement dit, les sélections multiples exposées par le SVsShellMonitorSelection service).When the solution receives an QueryStatus call, it iterates through the set of selected items (that is, the multiple selections exposed by the SVsShellMonitorSelection service).

  3. Sur chaque élément de la sélection, la solution utilise le pointeur de la hiérarchie pour appeler le IsItemDirty méthode pour déterminer si le enregistrer commande de menu doit être activé.On each item in the selection, the solution uses the hierarchy pointer to call the IsItemDirty method to determine whether the Save menu command should be enabled. Si un ou plusieurs éléments sont modifiés, le enregistrer commande est activée.If one or more items are dirty, then the Save command is enabled. Si la hiérarchie utilise un éditeur standard, les délégués de la hiérarchie recherchant dirty état à l’éditeur en appelant le IsDocDataDirty (méthode).If the hierarchy uses a standard editor, then the hierarchy delegates querying for dirty status to the editor by calling the IsDocDataDirty method.

  4. Sur chaque élément sélectionné n’est pas intègre, la solution utilise le pointeur de la hiérarchie pour appeler le SaveItem méthode sur les hiérarchies appropriés.On each selected item that is dirty, the solution uses the hierarchy pointer to call the SaveItem method on the appropriate hierarchies.

    Il est courant pour la hiérarchie afin d’utiliser un éditeur standard pour modifier le document.It is common for the hierarchy to use a standard editor to edit the document. Dans ce cas, les données du document d’objet pour l’éditeur doit prendre en charge la IVsPersistDocData2 interface.In this case, the document data object for that editor should support the IVsPersistDocData2 interface. À la réception du SaveItem appel de méthode, le projet doit informer l’éditeur que le document est enregistré en appelant le SaveDocData méthode sur l’objet de données du document.Upon receiving the SaveItem method call, the project should inform the editor that the document is being saved by calling the SaveDocData method on the document data object. L’éditeur peut permettre à l’environnement gérer les enregistrer en tant que boîte de dialogue, en appelant Query Service pour la SVsUIShell interface.The editor can allow the environment to handle the Save As dialog box, by calling Query Service for the SVsUIShell interface. Cela retourne un pointeur vers le IVsUIShell interface.This returns a pointer to the IVsUIShell interface. L’éditeur doit ensuite appeler la SaveDocDataToFile méthode, en passant un pointeur vers l’éditeur IPersistFileFormat mise en œuvre à l’aide de le pPersistFile paramètre.The editor must then call the SaveDocDataToFile method, passing a pointer to the editor's IPersistFileFormat implementation by means of the pPersistFile parameter. L’environnement, puis effectue l’opération d’enregistrement et fournit le Enregistrer sous boîte de dialogue de l’éditeur.The environment then performs the Save operation and provides the Save As dialog box for the editor. L’environnement puis rappelle à l’éditeur avec IPersistFileFormat.The environment then calls back to the editor with IPersistFileFormat.

  5. Si l’utilisateur tente d’enregistrer un document sans titre (autrement dit, un document non enregistré précédemment), puis une commande Enregistrer sous est effectivement effectuée.If the user is attempting to save an untitled document (that is, a previously unsaved document), then a Save As command is actually performed.

  6. Pour la commande Enregistrer sous, l’environnement affiche la boîte de dialogue Enregistrer sous, inviter l’utilisateur à un nom de fichier.For the Save As command, the environment displays the Save As dialog box, prompting the user for a file name.

    Si le nom du fichier a changé, la hiérarchie est responsable de la mise à jour le frame de document informations mises en cache en appelant SetProperty(VSFPROPID_MkDocument).If the name of the file has changed, then the hierarchy is responsible for updating the document frame's cached information by calling SetProperty(VSFPROPID_MkDocument).

    Si le Enregistrer sous commande déplace l’emplacement du document, la hiérarchie est sensible à l’emplacement du document, puis la hiérarchie est responsable de la remise de la propriété de la fenêtre de document vers une autre hiérarchie.If the Save As command moves the location of the document, and the hierarchy is sensitive to the document location, then the hierarchy is responsible for handing off the ownership of the open document window to another hierarchy. Par exemple, cela se produit si le projet effectue le suivi si le fichier est un fichier interne ou externe (fichier divers) pour le projet.For example, this occurs if the project tracks whether the file is an internal or external file (Miscellaneous File) in relation to the project. Utilisez la procédure suivante pour modifier le propriétaire d’un fichier pour le projet fichiers divers.Use the following procedure to change ownership of a file to the Miscellaneous Files project.

Modification de la propriété de fichierChanging File Ownership

Pour modifier la propriété de fichier pour le projet fichiers diversTo change file ownership to the Miscellaneous Files project

  1. Requête de Service pour le SVsExternalFilesManager interface.Query Service for the SVsExternalFilesManager interface.

    Un pointeur vers IVsExternalFilesManager2 est retourné.A pointer to IVsExternalFilesManager2 is returned.

  2. Appelez le TransferDocument (pszMkDocumentNew, punkWindowFrame) méthode pour transférer le document à la nouvelle hiérarchie.Call the TransferDocument (pszMkDocumentNew, punkWindowFrame) method to transfer the document to the new hierarchy. La hiérarchie de l’exécution de la commande Enregistrer sous appelle cette méthode.The hierarchy performing the Save As command calls this method.

Voir aussiSee Also

IOleCommandTarget
Ouverture et enregistrement d’éléments de projetOpening and Saving Project Items