Tableau en cours de exécution de document
L'IDE contient la liste de tous actuellement les documents ouverts dans une structure interne appelée le tableau en cours de exécution de document (RDT). Cette liste inclut tous les documents ouverts en mémoire, que ces documents sont actuellement modifiés. Un document est tout élément qui est rendu persistant, y compris les procédures stockées ouvertes dans un éditeur ainsi que les fichiers dans un projet ou le fichier projet principal (par exemple, les fichiers de *.vcproj).
Éléments du Tableau en cours de exécution de document
Le tableau en cours de exécution de document contient les entrées suivantes.
Élément |
Description |
---|---|
Moniker du document |
Une chaîne qui identifie l'objet de données du document. Il s'agirait du chemin d'accès de fichier absolu pour un système de projet qui gère des fichiers (par exemple, C : \MyProject\MyFile). Cette chaîne est également utilisée pour les projets stockés dans les magasins autres que les systèmes de fichiers, tels que des procédures stockées dans une base de données. Dans ce cas, le système de projet peut inventer une chaîne unique qu'il peut reconnaître et éventuellement analyse pour déterminer comment stocker le document. |
Propriétaire de la hiérarchie |
L'objet de la hiérarchie qui possède le document, comme représenté par une interface d' IVsHierarchy . |
ID d'élément |
identificateur d'élément pour un élément spécifique dans la hiérarchie. Cette valeur est unique parmi tous les documents de la hiérarchie qui possède ce document mais cette valeur n'est pas garanti être unique dans diverses hiérarchies. |
Objet de données du document |
au minimum, c'est IUnknown actif. L'IDE ne requiert aucune interface particulière au delà de l'interface d' IUnknown pour l'objet de données personnalisé de le document d'un éditeur. Toutefois, pour un éditeur standard, l'implémentation de l'éditeur de l'interface d' IVsPersistDocData2 est requise pour traiter les appels de persistance de fichier du projet. Pour plus d'informations, consultez Enregistrement d'un document standard. |
Flags |
Les balises qui contrôlent si le document est enregistré, si un verrou d'indiquer ou de modification est appliqué, et ainsi de suite, peuvent être spécifiées lorsque les entrées sont ajoutées au transformer rotatif. Pour plus d'informations, consultez l'énumération _VSRDTFLAGS. |
nombre de verrous de modification |
nombre de verrous de modification. Un verrou de modification indique qu'un certain éditeur contient le document ouvert pour modifier. Lorsque le nombre de modification verrouille les transitions à zéro, l'utilisateur est invité à enregistrer le document, s'il a été modifié. Par exemple, chaque fois que vous ouvrez un document dans un éditeur à l'aide de la commande de Nouvelle fenêtre , un verrou de modification est ajouté pour ce document dans le transformateur rotatif. Pour qu'un verrou de modification est défini, le document doit avoir un ID de hiérarchie ou d'élément |
nombre de verrous de lecture |
nombre de verrous de lecture. Un verrou d'indiquer indique que le document est lu via mécanisme tel qu'un Assistant. Un verrou d'indiquer contient un document actif dans le transformateur rotatif tout en indiquant que le document ne peut pas être modifié. Vous pouvez définir un verrou de lecture même si le document n'a pas un ID de hiérarchie ou d'élément Cette fonctionnalité permet d'ouvrir un document en mémoire et l'écrire dans le transformateur rotatif sans document appartenant à une hiérarchie. cette fonctionnalité est rarement utilisée. |
Conteneur de verrouillage |
une instance d'une interface d' IVsDocumentLockHolder . Le conteneur de verrou est implémenté par des fonctionnalités telles que les assistants il est ouvert et la modification documente l'extérieur d'un éditeur. Un conteneur de verrou permet à la fonctionnalité pour ajouter un verrou de modification au document pour empêcher le document d'être fermé alors qu'on remplace toujours. Normalement, les verrous de modification sont uniquement ajoutés par des fenêtres de document (autrement dit, l'éditeur). |
Chaque entrée dans le transformateur rotatif a une hiérarchie unique ou ID d'élément qui lui est associé, qui correspond en général à un nœud dans le projet. Tout documente disponible pour la modification est généralement appartenant à une hiérarchie. Entrées effectuées dans le contrôle de transformer rotatif qui projet, ou-plus précis-que la hiérarchie, possède actuellement l'objet de données du document sont modifiés. En utilisant les informations de le transformateur rotatif, l'IDE peut empêcher un document d'être ouvert par plusieurs projets à la fois.
La hiérarchie également contrôle la persistance des données et utilise les informations de le transformateur rotatif pour mettre à jour les boîtes de dialogue d' Enregistrer et d' Enregistrer sous . Lorsque les utilisateurs modifient un document puis sélectionnez la commande de Quitter dans le menu de Fichier , l'IDE vous invite à la boîte de dialogue d' Enregistrer les modifications à leur afficher tous les projets et les éléments de projet qui sont actuellement modifiés. Cela permet aux utilisateurs de choisir les documents à enregistrer. La liste de documents à enregistrer (autrement dit, ces documents qui ont des modifications) est générée de transformer rotatif. Tous les éléments que vous attendez à voir dans la boîte de dialogue d' Enregistrer les modifications en quittant l'application doivent avoir des enregistrements dans le transformateur rotatif. Les coordonnées de transformer rotatif que les documents sont stockées et si l'utilisateur est invité à propos d'une opération de sauvegarde à l'aide de les valeurs spécifiées dans les balises d'entrée pour chaque document. Pour plus d'informations sur les balises de transformer rotatif, consultez l'énumération d' _VSRDTFLAGS .
Verrous de modification et les verrous de lecture
La modification verrous et les verrous d'indiquer résident dans le transformateur rotatif. la fenêtre de document incrémente et décrémente le verrou de modification. Ainsi, lorsqu'un utilisateur ouvre une nouvelle fenêtre de document, le nombre de verrous de modification incrémente par un. Lorsque le nombre de modification verrouille les portées zéro, la hiérarchie est signalé pour rendre ou enregistrer les données du document associé. La hiérarchie peut ensuite rendre les données d'une manière, notamment rendre en tant que fichier ou élément dans un référentiel. Vous pouvez utiliser la méthode d' LockDocument dans l'interface d' IVsRunningDocumentTable pour ajouter des verrous de modification et pour lire des verrous, et la méthode d' UnlockDocument pour supprimer ces verrous.
Normalement, lorsque la fenêtre de document pour un éditeur est instanciée, le frame de fenêtre ajoute automatiquement un verrou de modification du document de le transformateur rotatif. Toutefois, si vous créez une vue personnalisée d'un document qui n'utilise pas une fenêtre de document standard (autrement dit, elle n'implémente pas l'interface d' IVsWindowFrame ), vous devez définir votre propre verrou de modification. par exemple, dans un Assistant, un document est modifié sans être ouvert dans un éditeur. Pour que les verrous de documents sont ouverts par des assistants et des entités semblables, ces entités doivent implémenter l'interface d' IVsDocumentLockHolder . Pour enregistrer votre conteneur de verrouillage du document, appelez la méthode d' RegisterDocumentLockHolder , et passez votre implémentation d' IVsDocumentLockHolder . Le ajoute votre conteneur de verrouillage du document dans le transformateur rotatif. Un autre scénario pour implémenter un conteneur de verrouillage du document est si vous ouvrez un document dans une fenêtre Outil personnalisée. dans ce cas, vous ne pouvez pas faire fermer la fenêtre Outil le document. Toutefois, l'enregistrement comme un conteneur de verrouillage du document dans le transformateur rotatif, l'IDE peut appeler votre implémentation de la méthode de CloseDocumentHolder pour demander une fin de le document.
D'autres utilisations de la table en cours de exécution de document
D'autres entités dans l'IDE utilisent le transformateur rotatif pour obtenir des informations sur les documents. Par exemple, le gestionnaire de contrôle de code source utilise le transformateur rotatif pour demander au système de recharger un document dans l'éditeur, une fois qu'il puisse obtenir la version la plus récente du fichier. Pour ce faire, recherche du gestionnaire de contrôle de code source les fichiers dans le transformateur rotatif pour voir si l'un d'eux est ouvert. Si tel est le cas, le gestionnaire de contrôle de code source vérifie d'abord vérifier que la hiérarchie implémente la méthode d' ReloadItem . Si le projet n'implémente pas la méthode d' ReloadItem , le gestionnaire de contrôle de code source vérifie une implémentation de la méthode de ReloadDocData sur l'objet de données du document directement.
L'IDE utilise également le transformateur rotatif pour reblanchir (apportez à l'avant) un document ouvert, si l'utilisateur qui documentent. Pour plus d'informations, consultez Afficher les fichiers à l'aide de la commande de fichier ouvert. pour déterminer si un fichier est ouvert dans le transformateur rotatif, faites un le suivant.
Interrogez pour le moniker du document (autrement dit, le chemin d'accès du document entier) pour vérifier si l'élément est ouvert.
Utilisez la hiérarchie ou l'ID de l'élément pour demander le système de projet le chemin d'accès du document entier, puis examinez l'élément dans le transformateur rotatif.