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