시각적 표현
컨트롤은 복합 문서 기술과 컨트롤과 컨테이너를 모두 포함하는 OLE 끌어서 놓기 기술을 통해 컨테이너 내에서 자신을 배치하고 표시할 수 있도록 지원합니다. 컨테이너가 컨트롤의 위치와 크기를 관리하는 동안 컨트롤은 자체적으로 그릴 수 있어야 합니다.
컨트롤은 OLE 문서에서 제공하는 기본 함수에 추가됩니다. 컨트롤은 클라이언트의 IOleClientSite::RequestNewObjectLayout 메서드를 호출하여 컨테이너의 크기를 변경하려고 합니다. 클라이언트는 컨트롤의 IOleObject::GetExtent 호출하여 새 크기를 가져와서 IOleInPlaceObject::SetObjectRects호출하여 컨트롤을 새 크기로 설정합니다.
IPersistStream 또는 IPersistStreamInit 지원하는 컨트롤은 캐시에 IPersistStorage대한 지원이 필요하기 때문에 IOleCache2 통해 캐싱을 지원하지 않습니다. 그러나 이러한 컨트롤은 클라이언트가 선택적으로 컨트롤에 대한 프레젠테이션 데이터의 자체 캐시를 만들고 관리할 수 있도록 IDataObject::GetData 통해 컨트롤을 렌더링하는 방법을 제공해야 합니다.
컨트롤은 좌표에 HIMETRIC 형식을 사용합니다. 그러나 다른 컨테이너는 서로 다른 좌표계를 사용할 수 있습니다. 컨테이너는 자체 시스템에서 좌표를 수신하려고 하지만 컨트롤에서 컨테이너가 사용하는 좌표를 반드시 알 수는 없습니다. 성공적으로 통신하려면 컨트롤에서 값을 컨테이너의 좌표로 변환하는 방법이 필요합니다. 컨테이너는 IOleControlSite::TransformCoords 메서드를 사용하여 사이트 개체를 제공합니다. 컨트롤은 먼저 컨테이너의 클라이언트 사이트에서 이 메서드를 호출하여 해당 좌표를 컨테이너에 대한 적절한 좌표로 변환합니다. 그런 다음 변환된 좌표를 컨테이너에 전달할 수 있습니다.
컨트롤은 컨테이너의 사이트 개체에서 IOleControlSite::LockInPlaceActive 호출하여 컨테이너가 현재 위치 활성 상태에서 컨트롤을 강등하지 못하도록 할 수 있습니다. 이러한 방식으로 컨트롤을 강등하면 컨트롤이 비활성화되고 해당 창이 제거되므로 컨트롤이 알려진 기간 동안 창을 유지해야 하는 경우 LockInPlaceActive 호출하여 상태를 보장할 수 있습니다.
관련 항목