Interface do usuário de propriedades do projeto
Um subtipo de projeto pode usar os itens na caixa de diálogo Páginas de Propriedades do projeto conforme eles são fornecidos pelo projeto base, ocultar ou tornar controles somente leitura e páginas inteiras conforme fornecido, ou adicionar páginas específicas do subtipo do projeto à caixa de diálogo Páginas de Propriedades.
Estendendo a caixa de diálogo Propriedade do projeto
Um subtipo de projeto implementa extensores de automação e objetos de navegação de configuração de projeto. Esses extensores implementam a IFilterProperties interface para tornar determinadas propriedades ocultas ou somente leitura. A caixa de diálogo Páginas de Propriedades do projeto base, implementada pelo projeto base, honra a filtragem executada pelos Extensores de Automação.
O processo de extensão de uma caixa de diálogo Propriedade do Projeto é descrito abaixo:
O projeto base recupera os extensores do subtipo de projeto implementando a IInternalExtenderProvider interface. Os objetos de navegação, automação de projeto e configuração de projeto do projeto base implementam essa interface.
A implementação do objeto de navegação do projeto e do objeto de automação do projeto delegam à IInternalExtenderProvider implementação do agregador de subtipos do projeto (ou seja, eles
QueryInterface
para IInternalExtenderProvider no objeto do IInternalExtenderProvider IVsHierarchy projeto).O objeto de navegação de configuração do projeto base também implementa IInternalExtenderProvider para conectar diretamente o Extensor de Automação a partir do objeto de configuração do subtipo do projeto. Sua implementação delega à IInternalExtenderProvider interface implementada pelo agregador de subtipos do projeto.
GetProjectItem, implementado pelo objeto de navegação de configuração do projeto, retorna o IVsHierarchy objeto.
GetCfg, também implementado pelo objeto de navegação de configuração do projeto, retorna o IVsCfg objeto.
Um subtipo de projeto pode determinar os CATIDs apropriados para os vários objetos extensíveis do projeto base em tempo de execução, recuperando os seguintes __VSHPROPID2 valores:
Para determinar os CATIDs para o escopo do projeto, o subtipo de projeto recupera as propriedades acima para VSITEMID. Raiz do VSITEMID typedef
. Um subtipo de projeto também pode querer controlar quais páginas de caixa de diálogo Páginas de propriedades são exibidas para o projeto, dependendo da configuração e independente da configuração. Alguns subtipos de projeto podem precisar remover páginas internas e adicionar páginas específicas de subtipo de projeto. Para habilitar isso, o projeto de cliente gerenciado chama o GetProperty método para as seguintes propriedades:
VSHPROPID_PropertyPagesCLSIDList
— uma lista delimitada por ponto-e-vírgula de CLSIDs de páginas de propriedades independentes de configuração.VSHPROPID_CfgPropertyPagesCLSIDList —
uma lista delimitada por ponto-e-vírgula de CLSIDs de páginas de propriedades dependentes de configuração.
Como o subtipo de projeto agrega o IVsHierarchy objeto, ele pode substituir a definição dessas propriedades para controlar quais caixas de diálogo Páginas de Propriedades são exibidas. O subtipo de projeto pode recuperar essas propriedades do projeto base interno e, em seguida, adicionar ou remover CLSIDs conforme necessário.
Novas páginas de propriedades adicionadas por um subtipo de projeto recebem um objeto de navegação de configuração de projeto da implementação do projeto base. Este objeto de navegação de configuração de projeto oferece suporte a extensores de automação. Para obter mais informações sobre AutomationExtenders, consulte Implementando e usando extensores de automação. As páginas de propriedades implementadas pela chamada Extender[] de subtipo de projeto para recuperar seu próprio objeto de navegação de configuração de subtipo de projeto que estende o objeto de navegação de configuração do projeto base.