방법: 파일 형식 편집기를 등록 합니다.
등록의 일부로 서 제공 된 특성을 사용 하 여 파일 형식 편집기를 등록 하는 가장 쉬운 방법은 되는 Visual Studio SDK 관리 패키지 (MPF) 프레임 워크 클래스입니다. 기본 패키지를 구현 하는 경우 Visual C++, 편집기와 연결 된 확장을 등록 하는 레지스트리 스크립트를 작성할 수도 있습니다.
MPF 클래스를 사용 하 여 등록
MPF 클래스를 사용 하 여 편집기 파일 형식을 등록 하려면
제공은 ProvideEditorExtensionAttribute 클래스를 편집기를 VSPackage 클래스에 대 한 적절 한 매개 변수를 사용 합니다.
[Microsoft.VisualStudio.Shell.ProvideEditorExtensionAttribute(typeof(EditorFactory), ".Sample", 32, ProjectGuid = "{A2FE74E1-B743-11d0-AE1A-00A0C90FFFC3}", TemplateDir = "..\\..\\Templates", NameResourceID = 106)]
여기서 ".샘플"등록 된이 편집기에 대 한 확장명입니다 및"32"우선 순위 수준입니다.
projectGuid 에 정의 된 기타 파일 형식에 대 한 guid와 CLSID_MiscellaneousFilesProject. 결과 파일은 빌드 프로세스의 일부로 될 것입니다 수 있도록 기타 파일 형식이 제공 됩니다.
TemplateDir관리 되는 기본 편집기 샘플에 포함 된 템플릿 파일을 포함 하는 폴더를 나타냅니다.
NameResourceIDBasicEditorUI 프로젝트의 Resources.h 파일에 정의 하 고 편집기 "내 편집기"로 식별 합니다.
Initialize 메서드를 재정의합니다.
구현에는 Initialize 메서드, 호출을 RegisterEditorFactory 메서드 및 가공 공장으로 편집기의 인스턴스를 보여 주는 아래.
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); }
이 이렇게 편집기 팩터리와 편집기 파일 확장명을 등록합니다.
편집기 팩터리를 등록 취소 합니다.
편집기 팩터리 있는 VSPackage 삭제 될 때 자동으로 등록 하지 않습니다. 편집기 팩터리 개체를 구현 하는 경우는 IDisposable 인터페이스의 Dispose 메서드 호출로 공장 등록 취소 했습니다 후 Visual Studio.
레지스트리 스크립트를 사용 하 여 등록
편집기 팩터리 및 파일 형식에 대 한 기본 등록 Visual C++ 수행 됩니다 windows 레지스트리에 쓰려고 하 여 다음 그림과 같이 레지스트리 스크립트를 사용 합니다.
레지스트리 스크립트를 사용 하 여 편집기 파일 형식을 등록 하려면
레지스트리 스크립트 편집기 팩터리와 GUID 문자열 편집기 팩터리와 같이 정의 GUID_BscEditorFactory 섹션에 다음과 같은 레지스트리 스크립트입니다. 또한, 확장 및 편집기 확장의 우선 순위를 정의 합니다.
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 } } }
이 예제에서 편집기 파일 확장명 ".rtf"로 식별 되 고 우선 순위를 "50"입니다. GUID 문자열은 BscEdit 예제 프로젝트의 Resource.h 파일에 정의 됩니다.
있는 Vspackage를 등록 합니다.
편집기 팩터리를 등록 합니다.
편집기 팩터리 등록 되는 RegisterEditor 구현 합니다.
// 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; }
GUID 문자열 BscEdit 프로젝트의 Resource.h 파일에 정의 됩니다.