다음을 통해 공유


명령 라우팅 알고리즘

Visual Studio 명령 일련의 다양 한 구성 요소에 의해 처리 됩니다. 명령은 현재 선택 영역을 기반으로 하는 가장 안쪽의 컨텍스트에서 (글로벌 라고도 하는) 가장 바깥쪽 컨텍스트를 라우팅됩니다. 자세한 내용은 명령 사용 가능성를 참조하십시오.

명령 확인 순서는

명령에서 다음 명령 컨텍스트 수준의 전달 됩니다.

  1. 추가 기능: 환경을 먼저 명령에 있는 모든 추가 기능을 제공 합니다.

  2. 우선 명령: 이러한 명령을 사용 하 여 등록 된 IVsRegisterPriorityCommandTarget. Visual Studio 모든 명령에 대 한 호출 하 고 등록 된 순서 대로 호출 됩니다.

  3. 상황에 맞는 메뉴 명령: 컨텍스트 메뉴에 있는 명령을 먼저 상황에 맞는 메뉴는 일반적인 라우팅 제공 되 고 있는 명령 대상으로 제공 됩니다.

  4. 도구 모음 설정 명령 대상: 전화를 할 경우 이러한 명령을 대상 등록 된 SetupToolbar2. pCmdTarget 매개 변수는 null일 수 있습니다. 그렇지 않은 경우 null,이 명령은 대상 업데이트 설정 하 여 도구 모음에 있는 모든 명령에 사용 됩니다. 셸 도구 모음을 설정 하는 것 다음이 창 프레임으로 전달 하는 경우는 pCmdTarget 는 모든 업데이트를 통해 창 프레임 도구 모음 흐름의 명령에도 아닐 때 포커스를 합니다.

  5. 도구 창: 일반적으로 구현 하는 windows 도구는 IVsWindowPane 인터페이스를 구현 해야 합니다 또한는 IOleCommandTarget 인터페이스 도구 창이 활성 창이 될 때 Visual Studio 명령 대상을 가져올 수 있도록 합니다. 그러나 도구 창이 있는 경우 포커스는의 프로젝트 창에서 다음 명령의 전달 하는 IVsUIHierarchy 공통 상위 선택된 된 항목의 인터페이스입니다. 명령이이 선택한 여러 프로젝트에 걸쳐 있는 경우 라우팅된는 IVsSolution 계층 구조입니다. IVsUIHierarchy 인터페이스를 포함는 QueryStatusCommandExecCommand 해당 명령에 유사 하는 메서드는 IOleCommandTarget 인터페이스입니다.

  6. 문서 윈도우: 명령 RouteToDocs 플래그는.vsct 파일에 설정 되어 있으면 Visual Studio 명령 대상이 하나는 문서의 뷰 개체에 대 한 인스턴스를 찾습니다는 IVsWindowPane 인터페이스 또는 문서 개체의 인스턴스 (일반적으로 IVsTextLines 인터페이스 또는 IVsTextBuffer 인터페이스)입니다. 명령을 문서 뷰 개체를 지원 하지 않습니다 경우 Visual Studio 명령에 경로 IOleCommandTarget 반환 되는 인터페이스입니다. (문서 데이터 개체에 대 한 선택적인 인터페이스입니다.)

  7. 현재 계층: 현재 계층 구조는 현재 문서 창 또는 선택 되어 있는 계층 구조를 소유한 프로젝트 수 있습니다 솔루션 탐색기. Visual Studio 찾습니다는 IOleCommandTarget 현재, 또는 활성을 계층 구조에서 구현 되는 인터페이스입니다. 계층 구조에서 프로젝트 항목의 문서 창에 포커스가 있는 경우에 계층 활성화 될 때마다 잘못 된 명령을 지원 해야 합니다. 그러나, 경우에만 적용 명령을 솔루션 탐색기 가 포커스를 사용 하 여 지원 해야를 IVsUIHierarchy 인터페이스 및 해당 QueryStatusCommandExecCommand메서드.

    잘라내기, 복사, 붙여넣기, 삭제, 이름 바꾸기, Enter, 및 DoubleClick 명령은 특수 처리가 필요 합니다. 처리 하는 방법에 대 한 내용은 삭제제거 명령에 계층 구조를 참조 하십시오은 IVsHierarchyDeleteHandler 인터페이스입니다.

  8. 전체: 앞에서 설명한 컨텍스트에서 명령을 처리 하지 않으면 Visual Studio 구현 명령 소유한 Vspackage를 라우팅할 수 시도 IOleCommandTarget 인터페이스입니다. 이미 있는 VSPackage 로드 되지 않은 경우 Visual Studio 호출 하 여 로드 되지 않은 QueryStatus 메서드가 있습니다. 있는 Vspackage만 로드할의 Exec 메서드가 호출 됩니다.

참고 항목

기타 리소스

Command Routing in VSPackages

명령 디자인