다음을 통해 공유


사용자 지정 사용자 인터페이스(소스 제어 VSPackage)

VSPackage는 Visual Studio 명령 테이블(.vsct) 파일을 통해 메뉴 항목 및 해당 기본 상태를 선언합니다. Visual Studio IDE(통합 개발 환경)는 VSPackage가 로드될 때까지 메뉴 항목을 기본 상태로 표시합니다. 그 후 메뉴 항목을 사용하거나 사용하지 않도록 설정하기 위해 QueryStatus 메서드가 호출됩니다.

일반적으로 소스 제어 VSPackage는 특정 UI 컨텍스트로 전환하는 대신 필요에 따라 로드해야 하지만 명령 UI(사용자 인터페이스) 컨텍스트에 따라 VSPackage를 자동으로 로드할 수 있도록 VSPackage는 레지스트리 키를 설정할 수 있습니다. AutoLoadPackages 레지스트리 키에 대한 자세한 내용은 VSPackages 관리를 참조하세요.

VSPackage UI

소스 제어 패키지는 VSPackage로 구현되며 Visual Studio의 UI를 사용하지 않습니다. 각 소스 제어 VSPackage는 소스 제어 VSPackage와 관련된 옵션을 설정하기 위해 메뉴 항목, 메뉴 그룹, 도구 창, 도구 모음 및 필요한 모든 UI와 같은 자체 UI 요소를 지정해야 합니다. 이러한 UI 요소는 정적으로 또는 동적으로 사용하도록 설정할 수 있습니다. 정적 UI 요소는 .vsct 파일에 정의되며 VSPackage가 로드되었는지 여부에 관계없이 표시됩니다. 동적 UI 요소는 특정 명령 UI 컨텍스트에 따라(예: vsContextNoSolution 또는 QueryStatus 메서드 호출의 결과로) 표시될 수 있습니다. 동적 UI 요소의 표시 유형은 VSPackage의 지연된 로드를 위한 전략을 준수합니다.

소스 제어 VSPackages에 대한 UI 제약 조건

VSPackage가 로드된 후에는 소스 제어 VSPackage를 IDE에서 제거할 수 없으므로 VSPackage는 비활성 상태를 시작할 수 있어야 합니다. VSPackage가 더 이상 활성화되지 않는다는 알림을 받으면 VSPackage는 UI를 사용하지 않도록 설정하고 외부 IDE 상호 작용을 무시합니다. VSPackage가 활성화되지 않은 경우 VSPackage의 QueryStatus 메서드 구현은 명령을 숨겨야 합니다.

모든 소스 제어 VSPackage는 IVsSccProvider 인터페이스를 구현해야 합니다. 인터페이스의 두 메서드 SetActiveSetInactive는 VSPackage에서 구현해야 합니다.

소스 제어 VSPackage는 IVsSolutionEvents3, IVsTrackProjectDocumentsEvents2 등에 의해 구현되는 다양한 IDE 이벤트를 구독했을 수 있습니다. 또한 VSPackage는 레지스트리 지원 콜백 인터페이스(예: IVsSolutionPersistence)를 구현했을 수 있습니다. 이러한 인터페이스는 모두 비활성 상태일 때 무시됩니다.

다음 목록에서는 소스 제어 VSPackage 활성 상태의 영향을 받는 인터페이스를 보여 줍니다.

  • 프로젝트 문서 추적 이벤트

  • 솔루션 이벤트

  • 솔루션 지속성 인터페이스. 비활성 상태인 경우 패키지는 .sln.suo 파일에 쓰지 않아야 합니다.

  • 속성 extender.

    소스 제어 VSPackage가 비활성 상태일 때 필수 IVsQueryEditQuerySave2IVsSccManager2와 소스 제어와 연결된 선택적 인터페이스도 호출되지 않습니다.

    Visual Studio IDE가 시작되면 Visual Studio는 명령 UI 컨텍스트를 현재 기본 소스 제어 VSPackage ID의 ID로 설정합니다. 이렇게 하면 실제로 VSPackage를 로드하지 않고 활성 소스 제어 VSPackage의 정적 UI가 IDE에 표시됩니다. Visual Studio는 VSPackage를 호출하기 전에 VSPackage가 IVsRegisterScciProvider를 통해 Visual Studio에 등록할 때까지 일시 중지됩니다.

    다음 표에서는 Visual Studio IDE가 다른 UI 항목을 숨기는 방법에 대한 구체적인 세부 정보를 설명합니다.

UI 항목 설명
메뉴 및 도구 모음 소스 제어 패키지는 초기 메뉴 및 도구 모음 표시 상태를 .vsct 파일의 VisibilityConstraints 섹션에 있는 소스 제어 패키지 ID로 설정해야 합니다. 이를 통해 Visual Studio IDE는 VSPackage를 로드하고 QueryStatus 메서드 구현을 호출하지 않고 메뉴 항목의 상태를 적절하게 설정할 수 있습니다.
도구 창 소스 제어 VSPackage는 비활성 상태일 때 소유하는 도구 창을 숨깁니다.
소스 제어 VSPackage 관련 옵션 페이지 레지스트리 키 HKLM\SOFTWARE\Microsoft\VisualStudio\X.Y\ToolsOptionsPages\VisibilityCmdUIContexts를 사용하면 VSPackage가 옵션 페이지를 표시해야만 하는 컨텍스트를 설정할 수 있습니다. 이 키 아래에 있는 레지스트리 항목은 소스 제어 서비스의 SID(서비스 ID)를 사용하고 DWORD 값 1을 할당하여 만들어야 합니다. 소스 제어 VSPackage가 등록된 컨텍스트에서 UI 이벤트가 발생할 때마다 VSPackage가 활성화된 경우 VSPackage가 호출됩니다.