Compartilhar via


Como: registrar o Editor de tipos de arquivo

A maneira mais fácil de registrar os tipos de arquivo do editor está usando os atributos de Registro fornecidos como parte do SDK do Visual Studio gerenciado classes do framework (MPF) de pacote. Se você estiver implementando seu pacote no formato nativo Visual C++, você também pode escrever um script de registro que registra o seu editor e aos ramais associados.

Registro usando Classes do MPF

Para registrar os tipos de arquivo do editor usando classes do MPF

  1. Fornecer o ProvideEditorExtensionAttribute classe com os parâmetros apropriados para o seu editor na classe de seu VSPackage.

    [Microsoft.VisualStudio.Shell.ProvideEditorExtensionAttribute(typeof(EditorFactory), ".Sample", 32, 
         ProjectGuid = "{A2FE74E1-B743-11d0-AE1A-00A0C90FFFC3}", 
         TemplateDir = "..\\..\\Templates", 
         NameResourceID = 106)]
    

    Onde ".Sample"é a extensão que está registrada para este editor e"32"é o seu nível de prioridade.

    O projectGuid é o GUID para diversos tipos de arquivos, definido em CLSID_MiscellaneousFilesProject. O tipo de arquivo diversos é fornecido para que o arquivo resultante não irá fazer parte do processo de compilação.

    TemplateDirrepresenta a pasta que contém os arquivos de modelo que estão incluídos com o editor de basic gerenciado de exemplo.

    NameResourceIDé definido no arquivo Resources.h do projeto BasicEditorUI e identifica o editor como "Meu Editor".

  2. Substitua o método Initialize.

    Na sua implementação da Initialize método, chamada a RegisterEditorFactory método e passar a instância de sua fábrica de editor, como demonstrada abaixo.

    protected override void Initialize()
    {
        Trace.WriteLine (string.Format(CultureInfo.CurrentCulture, 
        "Entering Initialize() of: {0}", this.ToString()));
        base.Initialize();
           //Create Editor Factory
        editorFactory = new EditorFactory(this);
        base.RegisterEditorFactory(editorFactory);
    }
    

    Esta etapa registra a fábrica de editor e as extensões de arquivo do editor.

  3. Cancelar o registro as fábricas de editor.

    As fábricas de editor não são automaticamente registradas quando o VSPackage é descartado. Se o objeto de fábrica do editor implementa o IDisposable interface, sua Dispose método é chamado depois que a fábrica foi não registrada com Visual Studio.

Registro usando um Script de registro

Registrando as fábricas de editor e tipos de arquivo no formato nativo Visual C++ é feito usando um script de registro para gravar no registro do windows, como ilustrado pelos seguintes motivos.

Para registrar os tipos de arquivo do editor usando um script de registro

  1. No seu script de registro, definir a fábrica de editor e a seqüência de caracteres GUID da fábrica de editor conforme mostra a GUID_BscEditorFactory seção do script de registro a seguir. Além disso, defina a extensão e a prioridade da extensão do editor:

    NoRemove Editors 
        { 
            %GUID_BscEditorFactory% = s 'RTF Editor' 
            { 
                val Package = s '%CLSID_Package%' 
                val DisplayName = s 'An RTF Editor' 
                val ExcludeDefTextEditor = d 1 
                val AcceptBinaryFiles = d 0
    
                LogicalViews
                {
                    val %LOGVIEWID_TextView% = s ''
                }
    
                OpenWithEntries
                {
                }
    
                Extensions 
                { 
                    val rtf = d 50 
                }
            }
        }
    

    A extensão de arquivo do editor neste exemplo é identificada como ". rtf" e sua prioridade é "50". As seqüências de caracteres do GUID são definidas no arquivo Resource.h do projeto de exemplo BscEdit.

  2. Registre o VSPackage.

  3. Registre-se a fábrica de editor.

    A fábrica de editor está registrada na RegisterEditor implementação.

    // create editor factory.
    if (m_srpEdFact == NULL) 
    {
        CComObject<CBscEditorFactory> *pEdFact = new CComObject<CBscEditorFactory>;
        if (NULL == pEdFact)
          return E_OUTOFMEMORY;
    
        if (!pEdFact->FInit(this))
          return E_UNEXPECTED;
    
        m_srpEdFact = (IVsEditorFactory *) pEdFact;    // Note: assignment to a smart pointer does an AddRef()
    }
    // Query service for IVsRegisterEditors, register the editor factory
    CComPtr<IVsRegisterEditors> srpRegEd;
    if ((SUCCEEDED(m_srpPkgSiteSP->QueryService(SID_SVsRegisterEditors, IID_IVsRegisterEditors,(void **)&srpRegEd ))) && (srpRegEd != NULL))
      {
        ATLTRACE(TEXT(">> CVsPackage, registering editor factory.\n"));
          if (FAILED(srpRegEd->RegisterEditor(GUID_BscEditorFactory,
                      m_srpEdFact, &m_dwEditorCookie))) 
          {
             ATLTRACE(TEXT(">> CVsPackage, RegisterEditor() failed.\n"));
            return E_FAIL;
          }
      }
        return S_OK;
    }
    

    As seqüências de caracteres do GUID são definidas no arquivo Resource.h do projeto BscEdit.