COleDataSource クラス

OLE アプリケーションが、クリップボード操作やドラッグ アンド ドロップ操作のようなデータ転送操作中に用意するデータを置くキャッシュの役目をします。

構文

class COleDataSource : public CCmdTarget

メンバー

パブリック コンストラクター

名前 説明
COleDataSource::COleDataSource COleDataSource オブジェクトを構築します。

パブリック メソッド

名前 説明
COleDataSource::CacheData STGMEDIUM 構造体を使用して、指定した形式でデータを提供します。
COleDataSource::CacheGlobalData HGLOBAL 構造体を使用して、指定した形式でデータを提供します。
COleDataSource::DelayRenderData 遅延レンダリングを使用して、指定した形式でデータを提供します。
COleDataSource::DelayRenderFileData CFile ポインターで、指定した形式でデータを提供します。
COleDataSource::DelaySetData OnSetData でサポートされているすべての形式に対して呼び出されます。
COleDataSource::DoDragDrop データ ソースを使用してドラッグ アンド ドロップ操作を実行します。
COleDataSource::Empty データの COleDataSource オブジェクトを空にします。
COleDataSource::FlushClipboard すべてのデータをクリップボードにレンダリングします。
COleDataSource::GetClipboardOwner クリップボードに配置されたデータがまだ存在することを確認します。
COleDataSource::OnRenderData 遅延レンダリングの一環としてデータを取得します。
COleDataSource::OnRenderFileData 遅延レンダリングの一環としてデータを CFile に取得します。
COleDataSource::OnRenderGlobalData 遅延レンダリングの一環としてデータを HGLOBAL に取得します。
COleDataSource::OnSetData COleDataSource オブジェクト内のデータを置き換えるために呼び出されます。
COleDataSource::SetClipboard COleDataSource オブジェクトをクリップボードに配置します。

注釈

OLE データ ソースは直接作成できます。 または、COleClientItem クラスと COleServerItem クラスによって、その CopyToClipboard および DoDragDrop メンバー関数への応答として OLE データ ソースを作成できます。 簡単な説明については、「COleServerItem::CopyToClipboard」を参照してください。 クライアント アイテムまたはサーバー アイテム クラスの OnGetClipboardData メンバー関数をオーバーライドして、CopyToClipboard または DoDragDrop メンバー関数に対して作成された OLE データ ソースのデータにクリップボード形式を追加します。

転送用にデータを準備するときは常に、このクラスのオブジェクトを作成し、データにとって最も適切な方法を使ってデータを入力する必要があります。 データ ソースへの挿入方法は、データの提供が即時であるか (即時レンダリング)、または必要に応じてであるか (遅延レンダリング) によって直接影響を受けます。 使用されるクリップボード形式 (および省略可能な FORMATETC 構造体) を渡すことでデータを提供する、すべてのクリップボード形式について、DelayRenderData を呼び出します。

データ ソースとデータ転送の詳細については、「データ オブジェクトとデータ ソース (OLE)」を参照してください。 また、クリップボードのトピックに関する記事では、OLE クリップボードのメカニズムが説明されています。

継承階層

CObject

CCmdTarget

COleDataSource

要件

ヘッダー: afxole.h

COleDataSource::CacheData

この関数を呼び出して、データ転送操作中にデータが提供される形式を指定します。

void CacheData(
    CLIPFORMAT cfFormat,
    LPSTGMEDIUM lpStgMedium,
    LPFORMATETC lpFormatEtc = NULL);

パラメーター

cfFormat
データが提供されるクリップボード形式。 このパラメーターには、定義済みのクリップボード形式のいずれかか、ネイティブ Windows RegisterClipboardFormat 関数から返される値を指定できます。

lpStgMedium
指定した形式のデータを含む STGMEDIUM 構造体を参照します。

lpFormatEtc
データが提供される形式を記述した FORMATETC 構造体を参照します。 cfFormat で指定されたクリップボード形式以外に追加の形式情報を指定する場合は、このパラメーターの値を指定します。 NULL の場合、FORMATETC 構造体内の他のフィールドに対しては既定値が使用されます。

注釈

この関数では即時レンダリングを使ってデータを提供するため、ユーザーがデータを提供する必要があります。 データは、必要になるまでキャッシュされます。

STGMEDIUM 構造体を使用してデータを提供します。 また、提供するデータの量が、HGLOBAL を使って効率的に転送できるほど小さい場合は、CacheGlobalData メンバー関数を使うこともできます。

CacheData を呼び出した後、lpFormatEtcptd メンバーと lpStgMedium の内容は、呼び出し元ではなく、データ オブジェクトによって所有されます。

遅延レンダリングを使用するには、DelayRenderData または DelayRenderFileData メンバー関数を呼び出します。 MFC によって処理される遅延レンダリングについて詳しくは、記事「データ オブジェクトとデータ ソース: 操作」を参照してください。

詳細については、Windows SDK の STGMEDIUM 構造体と FORMATETC 構造体に関する記事を参照してください。

詳細については、Windows SDK の RegisterClipboardFormat に関する記事を参照してください。

COleDataSource::CacheGlobalData

この関数を呼び出して、データ転送操作中にデータが提供される形式を指定します。

void CacheGlobalData(
    CLIPFORMAT cfFormat,
    HGLOBAL hGlobal,
    LPFORMATETC lpFormatEtc = NULL);

パラメーター

cfFormat
データが提供されるクリップボード形式。 このパラメーターには、定義済みのクリップボード形式のいずれかか、ネイティブ Windows RegisterClipboardFormat 関数から返される値を指定できます。

hGlobal
指定された形式のデータを含むグローバル メモリ ブロックのハンドル。

lpFormatEtc
データが提供される形式を記述した FORMATETC 構造体を参照します。 cfFormat で指定されたクリップボード形式以外に追加の形式情報を指定する場合は、このパラメーターの値を指定します。 NULL の場合、FORMATETC 構造体内の他のフィールドに対しては既定値が使用されます。

注釈

この関数では、即時レンダリングを使ってデータを提供するため、関数を呼び出すときにデータを提供する必要があります。データは必要になるまでキャッシュされます。 大量のデータを提供する場合、または構造化ストレージ メディアが必要な場合は、CacheData メンバー関数を使用します。

遅延レンダリングを使用するには、DelayRenderData または DelayRenderFileData メンバー関数を呼び出します。 MFC によって処理される遅延レンダリングについて詳しくは、記事「データ オブジェクトとデータ ソース: 操作」を参照してください。

詳細については、Windows SDK の FORMATETC 構造体に関する記事を参照してください。

詳細については、Windows SDK の RegisterClipboardFormat に関する記事を参照してください。

COleDataSource::COleDataSource

COleDataSource オブジェクトを構築します。

COleDataSource();

COleDataSource::DelayRenderData

この関数を呼び出して、データ転送操作中にデータが提供される形式を指定します。

void DelayRenderData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

パラメーター

cfFormat
データが提供されるクリップボード形式。 このパラメーターには、定義済みのクリップボード形式のいずれかか、ネイティブ Windows RegisterClipboardFormat 関数から返される値を指定できます。

lpFormatEtc
データが提供される形式を記述した FORMATETC 構造体を参照します。 cfFormat で指定されたクリップボード形式以外に追加の形式情報を指定する場合は、このパラメーターの値を指定します。 NULL の場合、FORMATETC 構造体内の他のフィールドに対しては既定値が使用されます。

注釈

この関数では遅延レンダリングを使ってデータを提供するため、データはすぐには提供されません。 OnRenderData または OnRenderGlobalData メンバー関数は、データを要求するために呼び出されます。

CFile オブジェクトを介してデータを提供しない場合は、この関数を使います。 CFile オブジェクトを介してデータを提供する場合は、DelayRenderFileData メンバー関数を呼び出します。 MFC によって処理される遅延レンダリングについて詳しくは、記事「データ オブジェクトとデータ ソース: 操作」を参照してください。

即時レンダリングを使用するには、CacheData または CacheGlobalData メンバー関数を呼び出します。

詳細については、Windows SDK の FORMATETC 構造体に関する記事を参照してください。

詳細については、Windows SDK の RegisterClipboardFormat に関する記事を参照してください。

COleDataSource::DelayRenderFileData

この関数を呼び出して、データ転送操作中にデータが提供される形式を指定します。

void DelayRenderFileData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

パラメーター

cfFormat
データが提供されるクリップボード形式。 このパラメーターには、定義済みのクリップボード形式のいずれかか、ネイティブ Windows RegisterClipboardFormat 関数から返される値を指定できます。

lpFormatEtc
データが提供される形式を記述した FORMATETC 構造体を参照します。 cfFormat で指定されたクリップボード形式以外に追加の形式情報を指定する場合は、このパラメーターの値を指定します。 NULL の場合、FORMATETC 構造体内の他のフィールドに対しては既定値が使用されます。

注釈

この関数では遅延レンダリングを使ってデータを提供するため、データはすぐには提供されません。 OnRenderFileData メンバー関数は、データを要求するために呼び出されます。

CFile オブジェクトを使ってデータを提供する場合は、この関数を使います。 CFile オブジェクトを使わない場合は、DelayRenderData メンバー関数を呼び出します。 MFC によって処理される遅延レンダリングについて詳しくは、記事「データ オブジェクトとデータ ソース: 操作」を参照してください。

即時レンダリングを使用するには、CacheData または CacheGlobalData メンバー関数を呼び出します。

詳細については、Windows SDK の FORMATETC 構造体に関する記事を参照してください。

詳細については、Windows SDK の RegisterClipboardFormat に関する記事を参照してください。

COleDataSource::DelaySetData

データ ソースの内容の変更をサポートするには、この関数を呼び出します。

void DelaySetData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

パラメーター

cfFormat
データが配置されるクリップボード形式。 このパラメーターには、定義済みのクリップボード形式のいずれかか、ネイティブ Windows RegisterClipboardFormat 関数から返される値を指定できます。

lpFormatEtc
データが置き換えられる形式を記述した FORMATETC 構造体を参照します。 cfFormat で指定されたクリップボード形式以外に追加の形式情報を指定する場合は、このパラメーターの値を指定します。 NULL の場合、FORMATETC 構造体内の他のフィールドに対しては既定値が使用されます。

注釈

この場合、フレームワークによって OnSetData が呼び出されます。 これは、フレームワークが COleServerItem::GetDataSource からデータ ソースを返す場合にのみ使用されます。 DelaySetData が呼び出されない場合、OnSetData 関数が呼び出されることはありません。 DelaySetData は、サポートするクリップボードまたは FORMATETC 形式ごとに呼び出す必要があります。

詳細については、Windows SDK の FORMATETC 構造体に関する記事を参照してください。

詳細については、Windows SDK の RegisterClipboardFormat に関する記事を参照してください。

COleDataSource::DoDragDrop

メンバー関数をDoDragDrop呼び出して、このデータ ソース (通常は CWnd::OnLButtonDown ハンドラー) のドラッグ アンド ドロップ操作を実行します。

DROPEFFECT DoDragDrop(
    DWORD dwEffects = DROPEFFECT_COPY|DROPEFFECT_MOVE|DROPEFFECT_LINK,
    LPCRECT lpRectStartDrag = NULL,
    COleDropSource* pDropSource = NULL);

パラメーター

dwEffects
このデータ ソースに対して許可されているドラッグ アンド ドロップ操作。 次のいずれかになります。

  • DROPEFFECT_COPY コピー操作を実行できます。

  • DROPEFFECT_MOVE 移動操作を実行できます。

  • DROPEFFECT_LINK 削除されたデータから元のデータへのリンクを確立できます。

  • DROPEFFECT_SCROLL ドラッグ スクロール操作が発生する可能性があることを示します。

lpRectStartDrag
ドラッグが実際に開始される場所を定義する四角形へのポインター。 詳細については、「解説」を参照してください。

pDropSource
ドロップ ソースを参照します。 NULL の場合、COleDropSource の既定の実装が使用されます。

戻り値

ドラッグ アンド ドロップ操作によって生成されたドロップの効果。それ以外の場合は DROPEFFECT_NONE (ユーザーが指定した四角形を離れる前にマウス ボタンを離したために操作が開始されない場合)。

注釈

ドラッグ アンド ドロップ操作はすぐには開始されません。 マウス カーソルが lpRectStartDrag で指定された四角形を離れるまで、または指定したミリ秒が経過するまで待ちます。 lpRectStartDrag が NULL の場合、四角形のサイズは 1 ピクセルです。

遅延時間は、レジストリ キーの設定によって指定されます。 遅延時間を変更するには、CWinApp::WriteProfileString または CWinApp::WriteProfileInt を呼び出します。 遅延時間を指定しない場合は、既定値の 200 ミリ秒が使用されます。 ドラッグの遅延時間は次のように格納されます。

  • Windows NT ドラッグの遅延時間は HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\NT\CurrentVersion\IniFileMapping\win.ini\Windows\DragDelay に格納されます。

  • Windows 3.x ドラッグの遅延時間は、WIN.INI ファイルの [Windows} セクションに格納されます。

  • Windows 95/98 ドラッグの遅延時間は、キャッシュされたバージョンの WIN.INI に格納されます。

ドラッグの遅延情報がレジストリまたは .INI ファイルのいずれかに格納される方法について詳しくは、Windows SDK の WriteProfileString に関する記事を参照してください。

詳細については、記事「OLE のドラッグ アンド ドロップ」を参照してください。

COleDataSource::Empty

データの COleDataSource オブジェクトを空にするには、この関数を呼び出します。

void Empty();

注釈

キャッシュされたレンダリング形式と遅延レンダリング形式の両方が空になり、再利用できます。

詳細については、Windows SDK の ReleaseStgMedium に関する記事を参照してください。

COleDataSource::FlushClipboard

クリップボード上にあるデータをレンダリングしてから、アプリケーションのシャットダウン後にクリップボードからデータを貼り付けることができるようにします。

static void PASCAL FlushClipboard();

注釈

SetClipboard を使って、クリップボードにデータを配置します。

COleDataSource::GetClipboardOwner

SetClipboard が最後に呼び出されてからクリップボード上のデータが変更されているかどうかを判断し、変更されている場合は現在の所有者を特定します。

static COleDataSource* PASCAL GetClipboardOwner();

戻り値

現在クリップボード上にあるデータ ソース。クリップボード上に何も存在しない場合や、クリップボードが呼び出し元のアプリケーションによって所有されていない場合は、NULL。

COleDataSource::OnRenderData

指定した形式のデータを取得するためにフレームワークによって呼び出されます。

virtual BOOL OnRenderData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium);

パラメーター

lpFormatEtc
情報が要求される形式を指定する FORMATETC 構造体を参照します。

lpStgMedium
データが返される STGMEDIUM 構造体を参照します。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

指定された形式は、遅延レンダリング用の DelayRenderData または DelayRenderFileData メンバー関数を使って COleDataSource オブジェクトに以前に配置されたものです。 指定されたストレージ メディアがファイルまたはメモリである場合、この関数の既定の実装では OnRenderFileData または OnRenderGlobalData がそれぞれ呼び出されます。 どちらの形式も指定されていない場合、既定の実装では 0 が返され、何も行われません。 MFC によって処理される遅延レンダリングについて詳しくは、記事「データ オブジェクトとデータ ソース: 操作」を参照してください。

lpStgMedium->tymed が TYMED_NULL の場合は、lpFormatEtc->tymed で指定されたように STGMEDIUM を割り当て、入力する必要があります。 TYMED_NULL でない場合は、STGMEDIUM にデータを入力する必要があります。

これは、高度なオーバーライドが可能です。 この関数をオーバーライドして、要求された形式とメディアでデータを提供できます。 データによっては、代わりにこの関数の他のバージョンの 1 つをオーバーライドすることもできます。 データが小さく、サイズが固定されている場合は、OnRenderGlobalData をオーバーライドします。 データがファイル内にある場合、またはサイズが可変の場合は、OnRenderFileData をオーバーライドします。

詳細については、Windows SDK の STGMEDIUM 構造体と FORMATETC 構造体、TYMED 列挙型、IDataObject::GetData に関する記事を参照してください。

COleDataSource::OnRenderFileData

指定したストレージ メディアがファイルである場合に、指定した形式でデータを取得するために、フレームワークによって呼び出されます。

virtual BOOL OnRenderFileData(
    LPFORMATETC lpFormatEtc,
    CFile* pFile);

パラメーター

lpFormatEtc
情報が要求される形式を指定する FORMATETC 構造体を参照します。

pFile
データがレンダリングされる CFile オブジェクトを参照します。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

指定された形式は、遅延レンダリング用の DelayRenderData メンバー関数を使って COleDataSource オブジェクトに以前に配置されたものです。 この関数の既定の実装では、単に FALSE が返されます。

これは、高度なオーバーライドが可能です。 この関数をオーバーライドして、要求された形式とメディアでデータを提供できます。 データによっては、代わりにこの関数の他のバージョンの 1 つをオーバーライドすることもできます。 複数のストレージ メディアを処理する場合は、OnRenderData をオーバーライドします。 データがファイル内にある場合、またはサイズが可変の場合は、OnRenderFileData をオーバーライドします。 MFC によって処理される遅延レンダリングについて詳しくは、記事「データ オブジェクトとデータ ソース: 操作」を参照してください。

詳細については、Windows SDK の FORMATETC 構造体と IDataObject::GetData に関する記事を参照してください。

COleDataSource::OnRenderGlobalData

指定したストレージ メディアがグローバル メモリである場合に、指定した形式でデータを取得するために、フレームワークによって呼び出されます。

virtual BOOL OnRenderGlobalData(
    LPFORMATETC lpFormatEtc,
    HGLOBAL* phGlobal);

パラメーター

lpFormatEtc
情報が要求される形式を指定する FORMATETC 構造体を参照します。

phGlobal
データが返されるグローバル メモリへのハンドルを参照します。 まだ割り当てられていない場合、このパラメーターは NULL にすることができます。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

指定された形式は、遅延レンダリング用の DelayRenderData メンバー関数を使って COleDataSource オブジェクトに以前に配置されたものです。 この関数の既定の実装では、単に FALSE が返されます。

phGlobal が NULL の場合は、新しい HGLOBAL を割り当て、phGlobal で返す必要があります。 それ以外の場合は、phGlobal によって指定された HGLOBAL にデータを入力する必要があります。 HGLOBAL に配置されるデータの量は、メモリ ブロックの現在のサイズを超えてはなりません。 また、ブロックをより大きなサイズに再割り当てすることはできません。

これは、高度なオーバーライドが可能です。 この関数をオーバーライドして、要求された形式とメディアでデータを提供できます。 データによっては、代わりにこの関数の他のバージョンの 1 つをオーバーライドすることもできます。 複数のストレージ メディアを処理する場合は、OnRenderData をオーバーライドします。 データがファイル内にある場合、またはサイズが可変の場合は、OnRenderFileData をオーバーライドします。 MFC によって処理される遅延レンダリングについて詳しくは、記事「データ オブジェクトとデータ ソース: 操作」を参照してください。

詳細については、Windows SDK の FORMATETC 構造体と IDataObject::GetData に関する記事を参照してください。

COleDataSource::OnSetData

指定した形式で COleDataSource オブジェクトのデータを設定または置換するために、フレームワークによって呼び出されます。

virtual BOOL OnSetData(
    LPFORMATETC lpFormatEtc,
    LPSTGMEDIUM lpStgMedium,
    BOOL bRelease);

パラメーター

lpFormatEtc
データが置き換えられる形式を指定する FORMATETC 構造体を参照します。

lpStgMedium
COleDataSource オブジェクトの現在の内容を置き換えるデータを含む STGMEDIUM 構造体を参照します。

bRelease
関数呼び出しの完了後にだれがストレージ メディアの所有権を持つかを示します。 呼び出し元は、ストレージ メディアに代わって割り当てられたリソースを解放する責任をだれが負うかを決定します。 呼び出し元は、bRelease を設定することでこれを行います。 bRelease が 0 以外の場合、データ ソースが所有権を取得し、メディアの使用が終了したときにメディアを解放します。 bRelease が 0 の場合、呼び出し元が所有権を保持し、データ ソースは呼び出しの期間中のみストレージ メディアを使用できます。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

データ ソースは、正常に取得できるまで、データの所有権を取得しません。 つまり、OnSetData が 0 を返す場合、所有権は取得されません。 データ ソースが所有権を取得する場合は、ReleaseStgMedium 関数を呼び出してストレージ メディアを解放します。

既定の実装では、何も行われません。 指定した形式でデータを置き換えるには、この関数をオーバーライドします。 これは、高度なオーバーライドが可能です。

詳細については、WINDOWS SDK の STGMEDIUM 構造体と FORMATETC 構造体、および ReleaseStgMedium 関数と IDataObject::GetData 関数に関する記事を参照してください。

COleDataSource::SetClipboard

CacheDataCacheGlobalDataDelayRenderData、または DelayRenderFileData のいずれかの関数を呼び出した後、COleDataSource オブジェクトに含まれているデータをクリップボードに配置します。

void SetClipboard();

関連項目

MFC サンプル HIERSVR
MFC サンプル OCLIENT
CCmdTarget クラス
階層図
COleDataObject クラス