지속성

컨트롤은 상태의 지속성을 지원하기 위해 하나 이상의 여러 지속성 인터페이스를 구현합니다. 예를 들어 IPersistStreamInit 인터페이스는 컨트롤 상태의 스트림 기반 지속성을 지원합니다. IPersistStreamInitIPersistStream 을 대체하며 초기화 메서드 InitNew를 추가합니다. 다른 메서드는 두 인터페이스에서 동일합니다. IPersistStreamInitIPersistStream에서 파생되지 않습니다. 개체는 자체의 새 인스턴스를 초기화하는 기능이 필요한지 여부에 따라 두 인터페이스 중 하나만 지원합니다.

컨트롤에서 제공할 수 있는 다른 지속성 인터페이스는 IPersistStorage, IPersistMemory, IPersistPropertyBag, IPersistMoniker입니다. 컨트롤 구현자는 가장 중요한 지속성 종류를 결정하고 적절한 지속성 인터페이스를 구현해야 합니다. 또한 컨트롤 구현자는 저장할 항목도 결정합니다. 예를 들어 컨트롤은 해당 속성의 현재 값이나 해당 위치 및 크기를 컨테이너 내에 저장할 수 있습니다. 클라이언트는 사용하려는 인터페이스를 결정합니다.

영구 상태에서 컨트롤을 로드하기 전에 클라이언트는 OLEMISC_SETCLIENTSITEFIRST 플래그를 검사 컨트롤이 영구 상태를 로드하기 전에 해당 클라이언트 사이트 및 앰비언트 속성 가져오기를 지원하는지 확인할 수 있습니다. 이 최적화는 컨트롤이 클라이언트에서 제공하는 앰비언트 속성에 의해 재정의되도록만 로드하는 대신 해당 영구 값을 무시할 수 있으므로 컨트롤을 인스턴스화할 때 시간을 절약할 수 있습니다.

컨트롤은 지정된 형식의 식별자 및 값 집합인 OLE 속성 집합에서 상태를 저장하고 복원할 수도 있습니다. 이 기능은 Visual Basic과 같은 컨테이너에서 유용할 수 있으며, 이 컨테이너는 해당 프로그램을 텍스트 형식으로 저장합니다. 이 기능을 지원하려는 컨트롤은 IDataObject::GetDataIDataObject::SetData 를 구현하여 해당 속성 값을 각각 컨테이너와 주고 받습니다. 이 정보를 텍스트로 변환하고 저장하는 것은 컨테이너의 작업입니다. 컨트롤에서 사용하는 식별자는 컨트롤의 속성 이름 및 값에 해당합니다. 이 속성 집합의 정의는 OLE CDK를 참조하세요.

ActiveX 컨트롤