연습: 사용자 지정 편집기에 기능 추가
사용자 지정 편집기를 만든 후 추가 기능을 추가할 수 있습니다.
VSPackage에 대한 편집기를 만들려면
Visual Studio 패키지 프로젝트 템플릿을 사용하여 사용자 지정 편집기를 만듭니다.
자세한 내용은 연습: 사용자 지정 편집기 만들기를 참조하세요.
편집기에서 단일 보기 또는 다중 보기를 지원할지 여부를 결정합니다.
새 창 명령을 지원하거나 양식 보기 및 코드 보기가 있는 편집기에서는 별도의 문서 데이터 개체와 문서 보기 개체가 필요합니다. 단일 보기만 지원하는 편집기에서는 문서 데이터 개체와 문서 보기 개체를 동일한 개체에 구현할 수 있습니다.
여러 보기의 예제는 여러 문서 보기 지원을 참조하세요.
IVsEditorFactory 인터페이스를 설정하여 편집기 팩터리를 구현합니다.
자세한 내용은 편집기 팩터리를 참조하세요.
편집기에서 현재 위치 활성화를 사용할지 또는 간소화된 포함을 사용하여 문서 보기 개체 창을 관리할지 여부를 결정합니다.
간소화된 포함 편집기 창은 표준 문서 보기를 호스트하고, 현재 위치 정품 인증 편집기 창은 ActiveX 컨트롤 또는 기타 활성 개체를 문서 보기로 호스트합니다. 자세한 내용은 간소화된 포함 및 현재 위치 활성화를 참조하세요.
명령을 처리하기 위해 IOleCommandTarget 인터페이스를 구현합니다.
외부 파일 변경에 대한 문서 지속성 및 응답을 제공합니다.
파일을 유지하려면 편집기의 문서 데이터 개체에 IVsPersistDocData2 및 IPersistFileFormat을 구현합니다.
외부 파일 변경에 응답하려면 편집기의 문서 데이터 개체에 IVsFileChangeEx 및 IVsDocDataFileChangeControl을 구현합니다.
참고 항목
SVsFileChangeEx에서
QueryService
을 호출하여IVsFileChangeEx
에 대한 포인터를 가져옵니다.
소스 코드 제어를 사용하여 문서 편집 이벤트를 조정합니다. 다음 단계를 수행합니다.
SVsQueryEditQuerySave에서
QueryService
를 호출하여IVsQueryEditQuerySave2
에 대한 포인터를 가져옵니다.첫 번째 편집 이벤트가 발생하면 QueryEditFiles 메서드를 호출합니다.
이 메서드는 파일을 체크 아웃하지 않은 경우 사용자에게 체크 아웃하라는 메시지를 표시합니다. 오류를 방지하려면 “체크 아웃되지 않은 파일” 조건을 처리해야 합니다.
마찬가지로 파일을 저장하기 전에 QuerySaveFile 메서드를 호출합니다.
이 방법은 파일이 저장되지 않았거나 마지막 저장 이후 변경된 경우 사용자에게 파일을 저장하라는 메시지를 표시합니다.
편집기에서 선택한 텍스트의 속성을 표시하려면 속성 창을 사용하도록 설정합니다. 다음 단계를 수행합니다.
텍스트 선택이 변경될 때마다 OnSelectChange를 호출하여 ISelectionContainer 구현을 전달합니다.
STrackSelection 서비스에서
QueryService
를 호출하여 ITrackSelection에 대한 포인터를 가져옵니다.
사용자가 편집기와 도구 상자 간에 또는 외부 편집기(예: Microsoft Word)와 도구 상자 간에 항목을 끌어서 놓을 수 있습니다. 다음 단계를 수행합니다.
편집기에서
IDropTarget
을 구현하여 편집기가 놓기 대상임을 IDE에 알립니다.편집기가 도구 상자에서 항목을 사용하거나 사용하지 않도록 설정할 수 있도록 보기에 IVsToolboxUser 인터페이스를 구현합니다.
ResetDefaults를 구현하고 SVsToolbox 서비스에서
QueryService
를 호출하여 IVsToolbox2 및 IVsToolbox3 인터페이스에 대한 포인터를 가져옵니다.이 단계를 통해 VSPackage에서 도구 상자에 새 항목을 추가할 수 있습니다.
편집기에서 다른 선택적 기능을 사용할지 여부를 결정합니다.
편집기에서 찾기 및 바꾸기 명령을 지원하려면 IVsFindTarget을 구현하세요.
편집기에서 문서 개요 도구 창을 사용하려면
IVsDocOutlineProvider
를 구현하세요.편집기에서 상태 표시줄을 사용하려면 IVsStatusbarUser를 구현하고 SVsStatusbar에 대해
QueryService
를 호출하여IVsStatusBar
에 대한 포인터를 가져옵니다.예를 들어, 편집기는 줄/열 정보, 선택 모드(스트림/박스), 삽입 모드(삽입/오버스트라이크)를 표시할 수 있습니다.
편집기가
Undo
명령을 지원하도록 하려면 OLE 실행 취소 관리자 모델을 사용하는 것이 좋습니다. 또는 편집기가Undo
명령을 직접 처리하도록 할 수 있습니다.
VSPackage, 메뉴, 편집기, 기타 기능에 대한 GUID를 포함하여 레지스트리 정보를 만듭니다.
다음은 편집기를 올바르게 등록하는 방법을 보여 주기 위해 .rgs 파일 스크립트에 넣는 코드의 일반적인 예제입니다.
NoRemove Editors { ForceRemove {...guidEditor...} = s 'RTF Editor' { val Package = s '{...guidVsPackage...}' ForceRemove Extensions { val rtf = d 50 } } } NoRemove Menus { val {...guidVsPackage...} = s ',203,11' }
상황에 맞는 도움말 지원을 구현합니다.
이 단계를 사용하면 편집기에서 항목에 대한 F1 도움말 및 동적 도움말 창 지원을 제공할 수 있습니다. 자세한 내용은 방법: 편집기를 위한 컨텍스트 제공을 참조하세요.
IDispatch
인터페이스를 구현하여 편집기에서 자동화 개체 모델을 노출합니다.자세한 내용은 자동화 모델 개요를 참조하십시오.
강력한 프로그래밍
편집기 인스턴스는 IDE가 CreateEditorInstance 메서드를 호출할 때 만들어집니다. 편집기가 여러 보기를 지원하는 경우
CreateEditorInstance
는 문서 데이터와 문서 보기 개체를 모두 만듭니다. 문서 데이터 개체가 이미 열려 있으면 null이 아닌punkDocDataExisting
값이IVsEditorFactory::CreateEditorInstance
에 전달됩니다. 편집기 팩터리 구현은 기존 문서 데이터 개체가 적절한 인터페이스를 쿼리하여 호환되는지 여부를 결정해야 합니다. 자세한 내용은 여러 문서 보기 지원을 참조하세요.간소화된 포함 방법을 사용하는 경우 IVsWindowPane 인터페이스를 구현합니다.
현재 위치 활성화를 사용하기로 결정한 경우 다음 인터페이스를 구현합니다.
참고 항목
IOleInPlaceComponent
인터페이스는 OLE 2 메뉴 병합을 방지하는 데 사용됩니다.IOleCommandTarget
구현은 잘라내기, 복사, 붙여넣기와 같은 명령을 처리합니다. 구현할 때 편집기IOleCommandTarget
에서 자체 명령 메뉴 구조를 정의하기 위해 자체 .vsct 파일이 필요한지 또는 Visual Studio에서 정의한 표준 명령을 구현할 수 있는지 여부를 결정합니다. 일반적으로 편집기에서는 IDE의 메뉴를 사용 및 확장하고 고유한 도구 모음을 정의합니다. 그러나 IDE의 표준 명령 집합을 사용하는 것 외에도 편집기에서 고유한 특정 명령을 정의해야 하는 경우가 많습니다. 편집기에서 사용하는 표준 명령을 선언한 다음 .vsct 파일에서 새 명령, 상황에 맞는 메뉴, 최상위 메뉴, 도구 모음을 정의해야 합니다. 현재 위치 활성화 편집기를 만드는 경우 IOleInPlaceComponent는 구현하고 OLE 2 메뉴 병합을 사용하는 대신 .vsct 파일에서 편집기의 메뉴와 도구 모음을 정의합니다.UI에서 메뉴 명령이 혼잡하지 않도록 하려면 새 명령을 만들기 전에 IDE의 기존 명령을 사용해야 합니다. 공유 명령은 SharedCmdDef.vsct 및 ShellCmdDef.vsct에 정의됩니다. 이러한 파일은 기본적으로 Visual Studio SDK 설치의 VisualStudioIntegration\Common\Inc 하위 디렉터리에 설치됩니다.
ISelectionContainer
는 단일 선택과 다중 선택을 모두 표현할 수 있습니다. 선택한 각 개체는IDispatch
개체로 구현됩니다.IDE는 CreateInstance에서 액세스할 수 있는 서비스로 또는 CreateInstance를 통해 인스턴스화할 수 있는 개체로
IOleUndoManager
를 구현합니다. 편집기는 각Undo
작업에 대해IOleUndoUnit
인터페이스를 구현합니다.사용자 지정 편집기에서 자동화 개체를 노출할 수 있는 위치는 두 가지입니다.
Document.Object
Window.Object