データキャッシュアプリケーションが何からのデータを使用する場合、それが使えなくなった時のために予めデータを保存することがあります。クリップボード内のデータが変更されても問題ないように、データを変数として保存することがあります。データキャッシュと呼ばれるオブジェクトを公開しています。データキャッシュの様々なサービスを使用できるようになります。データキャッシュを作成するには、CreateDataCacheを呼び出します。*ppv);pUnkOuterは、集約に使用するインターフェースを指定します。集約を行わない場合は、NULLで問題ありません。rclsidは、基本的にCLSID_NULLを指定します。riidは、データキャッシュを識別するインターフェースのIIDを指定します。ppvは、データキャッシュのオブジェクトを受け取る変数のアドレスを指定します。使用するのはIOleCacheです。IOleCache::Cacheでこれを行います。*pdwConnection);pformatetcは、キャッシュしたいデータのフォーマットを指定します。advfは、キャッシュの制御に関するADVF列挙型の定数を指定しますが、0でも問題ありません。pdwConnectionは、特定のフォーマットのキャッシュをを識別する値を受け取る変数のアドレスを指定します。キャッシュが不要になった場合は、この値をIOleCache::Uncacheに指定します。フォーマットの設定を終えたら、実際にデータをキャッシュするためにIOleCache::SetDataを呼び出します。fRelease);pformatetcは、キャッシュしたいデータのフォーマットを指定します。pmediumは、キャッシュしたいデータを格納したSTGMEDIUM構造体のアドレスを指定します。fReleaseは、キャッシュが不要になった際に、自動でデータを開放するかどうかを指定します。TRUEを指定した場合は、自動でデータが開放されるようになります。そのデータをデータキャッシュのサービスを使用して描画します。事前に、ペイントで表示される画像をクリップボードにコピーしておいてください。TEXT("クリップボードにデータが存在しません。TEXT("メタファイル形式のデータの取得に失敗しました。hdc);}OleGetClipboardを呼び出せば、クリップボード内のデータをIDataObjectで識別することができます。cfFormatにCF_METAFILEPICTを指定していることから、メタファイル形式のデータを要求しています。IOleCache::CacheとIOleCache::SetDataでフォーマットとデータを設定します。これで、データのキャッシュは完了したことになります。今回、どういった目的でデータキャッシュを使用しているかというと、データをIViewObjectで描画するためです。データキャッシュにデータをキャッシュすれば、データキャッシュのIViewObjectを使えるという寸法です。描画は前節と同様にOleDrawで行っていますが、描画先の範囲をデータのサイズを一致させています。これはHIMETRIC単位になっているため、HIMETRICtoDPという自作関数で変換しています。