In-Place 활성화 구현

현재 위치 활성화를 사용하면 컨테이너 문서를 벗어나지 않고도 포함된 개체와 상호 작용할 수 있습니다. 사용자가 개체를 활성화하면 컨테이너 애플리케이션 및 서버 애플리케이션의 메뉴 모음 의 요소로 구성된 복합 메뉴 모음이 컨테이너의 주 메뉴 모음을 대체합니다. 따라서 활성 개체에 대한 컨텍스트에 민감한 도움말을 포함하여 두 애플리케이션의 명령 및 기능을 사용자가 사용할 수 있습니다. 사용자가 문서의 일부 개체가 아닌 부분으로 작업을 시작하면 개체가 비활성화되어 컨테이너 문서의 원래 메뉴가 복합 메뉴를 대체합니다.

이 기능은 원래 바로 편집의 이름으로 진행되었습니다. 편집은 사용자가 실행 중인 개체와 상호 작용하는 한 가지 방법일 뿐이므로 이름이 변경되었습니다. 예를 들어 사운드 클립은 편집하는 대신 들을 수 있습니다. 비디오 클립은 편집하는 대신 볼 수 있습니다. 비디오 클립의 경우 별도의 창을 호출하지 않고 바로 실행할 수 있기 때문에 현재 위치 활성화는 특히 적절합니다. 컨테이너 문서의 인접한 텍스트 데이터와 함께 비디오를 볼 경우 중요할 수 있습니다.

컨테이너 및 서버 애플리케이션 모두에 대해 현재 위치 활성화를 구현하는 것은 엄격히 선택 사항입니다. OLE는 개체를 활성화하면 서버 애플리케이션이 별도의 창을 열 수 있는 모델을 계속 지원합니다. 연결된 개체는 항상 별도의 창에서 열리므로 별도의 문서에 상주한다는 점을 강조합니다.

현재 위치 활성화는 컨테이너에서 IOleObject::D oVerb 호출에 대한 응답으로 개체로 시작합니다. 이 호출은 일반적으로 개체를 두 번 클릭하거나 컨테이너 애플리케이션의 편집 메뉴에서 명령(동사)을 선택하는 사용자에 대한 응답으로 발생합니다.

포함된 개체가 활성 상태인 동안 현재 위치 창에서 키보드 및 마우스 입력을 받습니다. 사용자가 복합 메뉴 모음에서 명령을 선택하면 선택한 특정 드롭다운 메뉴를 소유하는 사용자에 따라 명령 및 관련 메뉴 메시지가 컨테이너 또는 개체 애플리케이션으로 전송됩니다. 개체의 눈금자, 도구 모음 또는 프레임 장식을 통해 입력하면 이러한 창을 소유하는 포함된 개체로 직접 이동합니다.

예를 들어, 컨테이너가 사용자 입력에 대한 응답으로 비활성화하거나 개체가 비디오 클립처럼 활성 상태를 자발적으로 포기할 때까지 현재 위치에서 활성화된 포함된 개체는 활성 상태로 유지됩니다. 사용자는 컨테이너 문서 내부를 클릭하거나 개체의 현재 위치 활성화 창 바깥쪽을 클릭하거나 다른 개체를 클릭하여 개체를 비활성화할 수 있습니다. 그러나 사용자가 컨테이너의 제목 표시줄, 스크롤 막대 또는 특히 메뉴 모음을 클릭하면 현재 위치에서 활성화된 개체가 활성 상태로 유지됩니다.

In-place-activation-object 서버를 In-Process 서버(DLL) 또는 로컬 서버(EXE)로 구현할 수 있습니다. 두 경우 모두 복합 메뉴 모음에는 서버 및 컨테이너 프로세스의 항목(일반적으로 드롭다운 메뉴)이 포함됩니다. In-process 서버의 경우 현재 위치 활성화 창은 컨테이너의 창 계층 구조에 있는 다른 자식 창일 뿐이며 컨테이너 애플리케이션의 메시지 펌프를 통해 입력을 받습니다.

로컬 서버의 경우 현재 위치 활성화 창은 포함된 개체의 서버 애플리케이션 프로세스에 속하지만 부모 창은 컨테이너에 속합니다. 현재 위치 활성화 창에 대한 입력은 서버의 메시지 큐에 나타나고 서버의 메시지 루프에 의해 디스패치됩니다. OLE 라이브러리는 메뉴 명령과 메시지가 올바르게 디스패치되는 것을 볼 책임이 있습니다.

복합 문서