永続化
コントロールは、その状態の永続化をサポートするために、いくつかの永続化インターフェイスの 1 つ以上を実装できます。 たとえば、IPersistStreamInit インターフェイスは、コントロールの状態のストリーム ベースの永続化をサポートします。 IPersistStreamInit は IPersistStream の代わりであり、初期化メソッド InitNew を追加します。 他のメソッドは、両方のインターフェイスで同じです。 IPersistStreamInit は IPersistStream から派生していません。オブジェクトは、それ自体の新しいインスタンスを初期化する機能が必要かどうかに基づいて、2 つのインターフェイスのうち 1 つだけをサポートします。
コントロールが提供できるその他の永続化インターフェイスには、IPersistStorage、IPersistMemory、IPersistPropertyBag、IPersistMoniker などがあります。 コントロールの実装者は、最も重要な永続化の種類を決定し、適切な永続化インターフェイスを実装する必要があります。 コントロールの実装者は、保存する内容も決定します。 たとえば、コントロールは、そのプロパティの現在の値、またはそのコンテナー内の場所とサイズを保存できます。 クライアントは、使用するインターフェイスを決定します。
コントロールを永続状態からロードする前に、クライアントは OLEMISC_SETCLIENTSITEFIRST フラグをチェックして、永続状態を読み込む前にコントロールがクライアント サイトおよびアンビエント プロパティの取得をサポートしているかどうかを判断できます。 この最適化により、コントロールは永続値を読み込んでクライアントから提供されるアンビエント プロパティによってオーバーライドされるのではなく、自由に無視できるようになるため、コントロールをインスタンス化するときに時間を節約できます。
コントロールは、指定された形式の識別子と値のセットである OLE プロパティ セットでの状態の保存と復元もサポートできます。 この機能は、プログラムをテキスト形式で保存する Visual Basic などのコンテナーで役立ちます。 この機能をサポートするコントロールは、それぞれ IDataObject::GetData と IDataObject::SetData を実装して、コンテナーとの間でプロパティ値を渡します。 この情報をテキストに変換して保存するのは、コンテナーのジョブです。 コントロールで使用される識別子は、コントロールのプロパティ名と値に対応します。 このプロパティ セットの定義については、OLE CDK を参照してください。