Visual Studio에서 명령은 다양한 구성 요소에 의해 처리됩니다. 명령은 현재 선택을 기반으로 하는 가장 안쪽 컨텍스트에서 가장 바깥쪽(전역이라고도 함) 컨텍스트로 라우팅됩니다. 자세한 내용은 명령 가용성을 참조하세요.
명령 해결 순서
명령은 다음 수준의 명령 컨텍스트를 통해 전달됩니다.
추가 기능: 환경은 먼저 존재하는 모든 추가 기능에 명령을 제공합니다.
우선 순위 명령: 이러한 명령은 .를 사용하여 IVsRegisterPriorityCommandTarget등록됩니다. Visual Studio의 모든 명령에 대해 호출되며 등록된 순서대로 호출됩니다.
상황에 맞는 메뉴 명령: 상황에 맞는 메뉴에 있는 명령은 먼저 상황에 맞는 메뉴에 제공된 명령 대상에 제공되고 그 후에는 일반적인 라우팅으로 제공됩니다.
도구 모음 명령 대상 집합: 이러한 명령 대상은 SetupToolbar2을 호출할 때 등록됩니다. 매개 변수는
pCmdTarget일null수 있습니다. 그렇지 않은null경우 이 명령 대상은 설정한 도구 모음에 있는 명령을 업데이트하는 데 사용됩니다. 셸이 도구 모음을 설정 중인 경우, 도구 모음의 명령에 대한 모든 업데이트가 창 프레임을pCmdTarget으로 전달하여 포커스가 아닐 때도 창을 통해 흐르도록 합니다.도구 창: 일반적으로 IVsWindowPane 인터페이스를 구현하는 도구 창은, 도구 창이 활성 창일 때 Visual Studio가 명령 대상을 가져올 수 있도록 IOleCommandTarget 인터페이스도 구현해야 합니다. 그러나 포커스가 있는 도구 창이 프로젝트 창인 경우 명령은 선택한 항목의 공통 부모인 인터페이스로 라우팅 IVsUIHierarchy 됩니다. 이 선택 영역이 여러 프로젝트에 걸쳐 있는 경우 명령은 계층 구조로 IVsSolution 라우팅됩니다. IVsUIHierarchy 인터페이스는 QueryStatusCommand 및 ExecCommand 메서드를 포함하며, 이는 IOleCommandTarget 인터페이스의 해당 명령과 유사합니다.
문서 창: 명령에
RouteToDocs플래그가 .vsct 파일에 설정된 경우 Visual Studio는 문서 뷰 객체에서 명령 대상을 찾습니다. 이는 인터페이스의 인스턴스이거나 문서 객체의 인스턴스(일반적으로 IVsWindowPane 인터페이스 또는 IVsTextLines 인터페이스)입니다. 문서 뷰 개체가 명령을 지원하지 않는 경우 Visual Studio는 반환되는 인터페이스로 IOleCommandTarget 명령을 라우팅합니다. (문서 데이터 개체에 대한 선택적 인터페이스입니다.)현재 계층: 현재 계층 구조는 현재 문서 창을 소유하는 프로젝트 또는 솔루션 탐색기에서 선택된 계층 구조일 수 있습니다. Visual Studio는 현재 또는 활성 계층 구조에서 구현되는 인터페이스를 찾 IOleCommandTarget 습니다. 계층 구조는 프로젝트 항목의 문서 창에 포커스가 있는 경우에도 계층이 활성 상태일 때마다 유효한 명령을 지원해야 합니다. 그러나 솔루션 탐색기에 포커스가 있을 때만 적용되는 명령은 인터페이스와 해당 IVsUIHierarchyQueryStatusCommand 및 메서드를 ExecCommand 사용하여 지원되어야 합니다.
잘라내기, 복사, 붙여넣기, 삭제, 이름 바꾸기, Enter 및 DoubleClick 명령에는 특별한 처리가 필요합니다. 계층 구조에서 삭제 및 제거 명령을 처리하는 방법에 대한 자세한 내용은 인터페이스를 IVsHierarchyDeleteHandler 참조하세요.
전역: 이전에 언급한 컨텍스트에서 명령이 처리되지 않은 경우, Visual Studio는 해당 인터페이스를 구현하는 명령을 소유한 VSPackage로 라우팅을 시도합니다 IOleCommandTarget. VSPackage가 아직 로드되지 않은 경우 Visual Studio에서 메서드를 호출 QueryStatus 할 때 로드되지 않습니다. VSPackage는 Exec 메서드가 호출될 때만 로드됩니다.