Procédure pas - à - pas : ajouter des fonctionnalités à un éditeur personnalisé
Après avoir créé un éditeur personnalisé, vous pouvez ajouter des fonctionnalités à celui-ci.
pour créer un éditeur pour un VSPackage
Créez un éditeur personnalisé à l'aide de le modèle de projet de package Visual Studio.
Pour plus d'informations, consultez Procédure pas - à - pas : Créer une commande de menu à l'aide de le modèle de package Visual Studio.
Déterminez si vous souhaitez que votre éditeur pour prendre en charge une vue ou des vues unique sur plusieurs serveurs.
Un éditeur qui prend en charge la commande de Nouvelle fenêtre , ou un mode formulaire et le mode Code, requiert les objets de données du document et les objets de vue distincts de document. Dans un éditeur qui prend en charge une seule vue unique, l'objet de données du document et l'objet de vue du document peuvent être implémentés sur le même objet.
Pour obtenir un exemple de plusieurs vues, consultez le plusieurs vues de prise en charge de document.
implémentez une fabrique d'éditeur en implémentant l'interface d' IVsEditorFactory .
Pour plus d'informations, consultez fabriques d'éditeur.
Déterminez si vous souhaitez que votre éditeur pour utiliser l'activation sur place ou l'incorporation simplifiée pour gérer la fenêtre d'objet de vue du document.
Une fenêtre incorporante simple d'éditeur héberge une vue standard de document, tandis que une fenêtre d'éditeur d'activation sur place héberge un contrôle ActiveX ou d'un autre objet actif lorsque sa vue du document. Pour plus d'informations, consultez incorporation simplifiée et activation sur place.
Implémentez l'interface d' IOleCommandTarget pour gérer les commandes.
Fournissez la persistance et la réponse de document aux modifications externes de fichier en procédant comme suit :
Pour rendre le fichier, implémentez IVsPersistDocData2 et IPersistFileFormat sur l'objet de données du document de votre éditeur.
pour répondre aux modifications externes de fichier, implémentez IVsFileChangeEx et IVsDocDataFileChangeControl sur l'objet de données du document de votre éditeur.
Notes
Appelez QueryService sur SVsFileChangeEx pour obtenir un pointeur vers IVsFileChangeEx.
Événements de coordonnées de modification de document avec le contrôle de code source. Pour cela :
Obtenir un pointeur vers IVsQueryEditQuerySave2 en appelant QueryService sur SVsQueryEditQuerySave.
Lorsque le premier événement de modification se produit, appelez la méthode d' QueryEditFiles .
Cela invite l'utilisateur à extraire le fichier s'il n'est pas déjà extrait. Veillez à traiter un « fichier » n'a pas été extrait une condition pour éviter des erreurs
de même, avant d'enregistrer le fichier, appelez la méthode d' QuerySaveFile .
Cette méthode invite l'utilisateur à enregistrer le fichier si elle n'a pas été enregistrée ou si elle a changé depuis la dernière sauvegarde.
Activez la fenêtre de Propriétés aux propriétés d'affichage du texte sélectionné dans l'éditeur. Pour cela :
Appelez l' OnSelectChange texte à chaque fois les modifications de sélection, en passant de votre implémentation d' ISelectionContainer.
Appelez QueryService au service d' STrackSelection pour obtenir un pointeur vers ITrackSelection.
Vérifiez les utilisateurs aux éléments de glisser-déplacer entre l'éditeur et le boîte à outils, ou entre les éditeurs externes (tel que Microsoft Word) et boîte à outils. Pour cela :
Implémentez IDropTarget sur votre éditeur pour avertir l'IDE que votre éditeur est une cible de déplacement.
Implémentez l'interface d' IVsToolboxUser sur la vue pour votre éditeur peut activer et désactiver des éléments dans boîte à outils.
Implémentez ResetDefaults et appelez QueryService sur le service d' SVsToolbox pour obtenir un pointeur vers les interfaces d' IVsToolbox2 et d' IVsToolbox3 .
Cela permet à votre VSPackage pour ajouter des éléments à boîte à outils.
Déterminez si vous souhaitez toutes autres fonctionnalités facultatives de votre éditeur.
Si vous souhaitez que votre éditeur pour prendre en charge la recherche et remplacer des commandes, implémentez IVsFindTarget.
Si vous souhaitez que votre éditeur pour prendre en charge l'enregistrement, appelez QueryService pour qu' SVsMacroRecorder obtenir un pointeur vers IVsMacroRecorder.
Notes
L'IDE prend en charge l'enregistrement en cours lorsque l'éditeur prend en charge.
si vous souhaitez utiliser une fenêtre Outil de structure du document dans votre éditeur, implémentez IVsDocOutlineProvider.
Si vous souhaitez utiliser une barre d'état dans votre éditeur, implémentez IVsStatusbarUser et appelez QueryService pour qu' SVsStatusbar obtenir un pointeur vers IVsStatusBar.
Par exemple, un éditeur peut ligne d'affichage/informations sur la colonne, mode de sélection (flux de données/région), et le mode d'insertion (insertion/caractère chevauchement).
Si vous souhaitez que votre éditeur pour prendre en charge la commande d' Undo , il est recommandé d'utiliser le OLE modèle de gestionnaire d'annulation. Sinon, vous pouvez le gérer à l'éditeur la commande d' Undo directement.
Créez les informations de Registre, y compris les GUID pour le VSPackage, les menus, l'éditeur, et autres fonctionnalités.
Voici un exemple générique de code que vous placez dans votre script de fichier .rgs pour montrer comment stocker correctement un éditeur.
NoRemove Editors { ForceRemove {...guidEditor...} = s 'RTF Editor' { val Package = s '{...guidVsPackage...}' ForceRemove Extensions { val rtf = d 50 } } } NoRemove Menus { val {...guidVsPackage...} = s ',203,11' }
implémentez la prise en charge d'aide contextuelle.
Cela vous permet prise en charge pour fournir d'aide F1 et d'Aide dynamique fenêtre des éléments dans votre éditeur. Pour plus d'informations sur ce problème, consultez le Comment : Fournissez un contexte aux éditeurs.
Exposez un modèle objet Automation de votre éditeur en implémentant l'interface d' IDispatch .
Pour plus d'informations, consultez fournir au modèle Automation.
Programmation fiable
L'instance de l'éditeur est créée lorsque l'IDE appelle la méthode d' CreateEditorInstance . Si l'éditeur prend en charge plusieurs affichages, CreateEditorInstance crée les données du document et les objets de vue du document. Si l'objet de données du document est déjà ouvert, une valeur non null d' punkDocDataExisting est passée à IVsEditorFactory::CreateEditorInstance. Votre implémentation de fabrique d'éditeur doit déterminer si un objet de données existant de document est compatible en recherchant les interfaces appropriées sur celui-ci. Pour plus d'informations, consultez plusieurs vues de prise en charge de document.
Si vous utilisez la solution simplifiée d'incorporation, implémentez l'interface d' IVsWindowPane .
si vous décidez d'utiliser l'activation sur place, implémentez les interfaces suivantes :
Notes
L'interface d' IOleInPlaceComponent est utilisée pour éviter la fusion de menus OLE 2.
Votre implémentation d' IOleCommandTarget gère les commandes telles que Couper, Copier, et Coller. En implémentant IOleCommandTarget, déterminez si votre éditeur requiert que son propre fichier de .vsct définir sa propre structure de menu de commande ou s'il peut implémenter des commandes standard définies par Visual Studio. En général, l'utilisation d'éditeurs étendent les menus de l'IDE et définissez leurs propres barres d'outils. Toutefois, il est souvent nécessaire qu'un éditeur afin de définir ses propres commandes spécifiques en plus de utiliser le jeu de commandes standard de l'IDE. Pour ce faire, votre éditeur doit déclarer les commandes standard qu'il utilise puis définit toutes les nouvelles commandes, des menus contextuels, des menus du niveau supérieur et les barres d'outils dans un fichier de .vsct. Si vous créez un éditeur d'activation sur place, puis implémentez IOleInPlaceComponent et définissez les menus et les barres d'outils pour l'éditeur dans un fichier de .vsct au lieu d'utiliser la fusion de menus OLE 2.
Pour empêcher la commande de menu se renforcer dans l'interface utilisateur, vous devez utiliser les commandes existantes dans l'IDE avant d'inventer de nouvelles commandes. Les commandes partagées sont définies dans SharedCmdDef.vsct et ShellCmdDef.vsct. ces fichiers sont installés par défaut dans le sous-répertoire de VisualStudioIntegration \Common\Inc de votre installation de Kit de développement logiciel Visual Studio .
ISelectionContainer peut exprimer les deux choisissez et des sélections multiples. Chaque objet sélectionné est implémenté comme un objet d' IDispatch .
L'IDE implémente IOleUndoManager en tant que service accessible d'un CreateInstance ou d'un objet qui peut être instancié via l' CreateInstance. votre éditeur implémente l'interface d' IOleUndoUnit pour chaque action d' Undo .
Il existe deux emplacements qu'un éditeur personnalisé peut exposer des objets Automation :
Document.Object
Window.Object
Voir aussi
Tâches
Comment : Fournissez un contexte aux éditeurs