シェル クリップボードの形式
シェル クリップボード形式は、クリップボードを介して転送されるシェル データの種類を識別するために使用されます。 ほとんどのシェル クリップボード形式は、ファイル名のリストや項目識別子リスト (PIDL) へのポインターなど、データの種類を識別します。 ただし、一部の形式はソースとターゲットの間の通信に使用されます。 最適化された移動やdelete_on_pasteなどのシェル操作をサポートすることで、データ転送プロセスを迅速化できます。 シェル データは、データを特徴付ける一般的な方法として FORMATETC 構造体を使用するデータ オブジェクトに常に含まれています。 構造体の cfFormat メンバーは、データの特定の項目のクリップボード形式に設定されます。 他のメンバーは、データ転送メカニズムなどの追加情報を提供します。 データは、付随する STGMEDIUM 構造体に 含まれています。
注意
標準のクリップボード形式識別子の形式は、CF_XXX です。 一般的な例として、ANSI テキスト データの転送に使用されるCF_TEXTがあります。 これらの識別子には定義済みの値があり、 FORMATETC 構造体で直接使用できます。 CF_HDROPを除き、シェル形式識別子は定義済みではありません。 DragWindow を除き、フォームは CFSTR_XXX です。 これらの値を定義済みの形式と区別するために、多くの場合、単なる 形式と呼ばれます。 ただし、定義済みの形式とは異なり、データの転送に使用する前に、ソースとターゲットの両方で登録する必要があります。 シェル形式を登録するには、Shlobj.h ヘッダー ファイルを含め、CFSTR_XXX 形式識別子を RegisterClipboardFormat に渡します。 この関数は有効なクリップボード形式の値を返します。この値は FORMATETC 構造体の cfFormat メンバーとして使用できます。
シェル クリップボード形式は、使用方法に基づいて 3 つのグループに編成されています。
ファイル システム オブジェクトを転送するための形式
これらの形式は、1 つ以上のファイルまたは他のシェル オブジェクトを転送するために使用されます。
- CF_HDROP
- CFSTR_FILECONTENTS
- CFSTR_FILEDESCRIPTOR
- CFSTR_FILENAME
- CFSTR_FILENAMEMAP
- CFSTR_MOUNTEDVOLUME
- CFSTR_SHELLIDLIST
- CFSTR_SHELLIDLISTOFFSET
CF_HDROP
このクリップボード形式は、既存のファイルのグループの場所を転送するときに使用されます。 他のシェル形式とは異なり、定義済みであるため、 RegisterClipboardFormat を呼び出す必要はありません。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体で構成されます。 構造体の hGlobal メンバーは、 DROPFILES 構造体を hGlobal メンバーとして指します。
DROPFILES 構造体の pFiles メンバーには、ファイル名を含む null で終わる二重文字配列へのオフセットが含まれています。 データ オブジェクトからCF_HDROP形式を抽出する場合は、 DragQueryFile を使用して、グローバル メモリ オブジェクトから個々のファイル名を抽出できます。 データ オブジェクトに配置するCF_HDROP形式を作成する場合は、ファイル名配列を作成する必要があります。
ファイル名の配列は一連の文字列で構成され、それぞれに 1 つのファイルの完全修飾パス (終端 の NULL 文字を含む) が含まれます。 配列を終了するために、最後の文字列に 追加の null 文字が追加されます。 たとえば、ファイルc:\temp1.txtとc:\temp2.txtが転送されている場合、文字配列は次のようになります。
c:\temp1.txt'\0'c:\temp2.txt'\0''\0'
注意
この例では、'\0' を使用して null 文字を表します。含める必要があるリテラル文字は表しません。
オブジェクトがドラッグ アンド ドロップ操作の一部としてクリップボードにコピーされた場合、DROPFILES 構造体の pt メンバーには、オブジェクトがドロップされたポイントの座標が含まれます。 DragQueryPoint を使用してカーソル座標を抽出できます。
この形式がデータ オブジェクトに存在する場合、OLE ドラッグ ループは、OLE 以外のドロップ ターゲット WM_DROPFILES 機能をシミュレートします。 これは、アプリケーションが Windows 3.1 システム上のドラッグ アンド ドロップ操作のソースである場合に重要です。
CFSTR_FILECONTENTS
この形式識別子は、実際の格納方法に関係なく、 CFSTR_FILEDESCRIPTOR 形式で使用され、ファイルであるかのようにデータを転送します。 データは、1 つのファイルの内容を表す STGMEDIUM 構造体で構成されます。 通常、ファイルはストリーム オブジェクトとして表されるため、ファイルの内容をメモリに配置する必要はありません。 その場合、STGMEDIUM 構造体の tymed メンバーは TYMED_ISTREAM に設定され、ファイルは IStream インターフェイスによって表されます。 ファイルには、ストレージまたはグローバル メモリ オブジェクト (TYMED_ISTORAGEまたはTYMED_HGLOBAL) を指定することもできます。 関連付けられているCFSTR_FILEDESCRIPTOR形式には、ファイルの名前と属性を指定する各ファイルの FILEDESCRIPTOR 構造体が含まれています。
ターゲットは、CFSTR_FILECONTENTS形式に関連付けられているデータを、ファイルであるかのように扱います。 ターゲットが IDataObject::GetData を呼び出してデータを抽出する場合、FORMATETC 構造体の lindex メンバーをファイルの FILEDESCRIPTOR 構造体の 0 から始まるインデックスに、付随するCFSTR_FILEDESCRIPTOR形式で設定することで、特定のファイルを指定します。 その後、ターゲットは、返されたインターフェイス ポインターまたはグローバル メモリ ハンドルを使用してデータを抽出します。
CFSTR_FILEDESCRIPTOR
この形式識別子は、ファイルのグループとしてデータを転送するために 、CFSTR_FILECONTENTS 形式で使用されます。 これら 2 つの形式は、ファイル システム ファイルとして格納されていないシェル オブジェクトを転送する場合に推奨される方法です。 たとえば、これらの形式を使用すると、各メールが実際にはデータベース内のデータ ブロックとして格納されている場合でも、電子メール メッセージのグループを個々のファイルとして転送できます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体で構成されます。 構造体の hGlobal メンバーは FILEGROUPDESCRIPTOR 構造体を指し、その後に、グループ内の各ファイルに対して 1 つの FILEDESCRIPTOR 構造体を含む配列が続きます。 FILEDESCRIPTOR 構造体ごとに、ファイルの内容を含む個別のCFSTR_FILECONTENTS形式があります。 特定のファイルのCFSTR_FILECONTENTS形式を識別するには、FORMATETC 構造体の lIndex 値を、ファイルの FILEDESCRIPTOR 構造体の 0 から始まるインデックスに設定します。
CFSTR_FILEDESCRIPTOR形式は、実際の格納方法に関係なく、ファイルのグループであるかのようにデータを転送するために一般的に使用されます。 ターゲットの観点から、各CFSTR_FILECONTENTS形式は 1 つのファイルを表し、それに応じて処理されます。 ただし、ソースは任意の方法でデータを格納できます。 CSFTR_FILECONTENTS形式は 1 つのファイルに対応する場合もありますが、たとえば、データベースまたはテキスト ドキュメントからソースによって抽出されたデータを表すこともできます。
CFSTR_FILENAME
この形式識別子は、1 つのファイルを転送するために使用されます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体で構成されます。 構造体の hGlobal メンバーは、ファイルの完全修飾ファイル パスを含む単一の null で終わる文字列を指します。 この形式は CF_HDROPに置き換わりましたが、Windows 3.1 アプリケーションとの下位互換性のためにサポートされています。
CFSTR_FILENAMEMAP
この形式識別子は、 CF_HDROP 形式のファイルのグループの名前が変更され、転送されるときに使用されます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体で構成されます。 構造体の hGlobal メンバーは、 null で終わる 2 つの文字配列を指します。 この配列には、各ファイルの新しい名前が、ファイルが付属のCF_HDROP形式で一覧表示されるのと同じ順序で格納されます。 文字配列の形式は、転送されたファイルを一覧表示するためにCF_HDROPで使用される形式と同じです。
CFSTR_MOUNTEDVOLUME
このフォーマット ID は、マウントされたボリューム上のパスを転送するために使用されます。 CF_HDROPに似ていますが、1 つのパスのみが含まれており、ボリュームがフォルダーにマウントされるときにパスを表すために必要な長いパス文字列を処理できます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体で構成されます。 構造体の hGlobal メンバーは、完全修飾ファイル パスを含む null で終わる単一の文字列を指します。 パス文字列は'\' 文字で終わり、その後に終端の NULL が続く必要があります。
Windows 2000 より前のバージョンでは、ボリュームはドライブ文字にのみマウントできました。 NTFS 形式のドライブを備えた Windows 2000 以降のシステムの場合は、空のフォルダーにボリュームをマウントすることもできます。 この機能を使用すると、ドライブ文字を取り込まずにボリュームをマウントできます。 マウントされたボリュームでは、FAT、FAT32、NTFS、CDFS など、現在サポートされている任意の形式を使用できます。
プロパティ シート ハンドラーを実装することで、Drive Properties プロパティ シートにページを追加できます。 ボリュームがドライブ文字にマウントされている場合、シェルは CF_HDROP 形式でハンドラーにパス情報を渡します。 Windows 2000 以降のシステムでは、以前のシステムと同様に、ボリュームをドライブ文字にマウントするときに、CF_HDROP形式が使用されます。 ただし、ボリュームがフォルダーにマウントされている場合は、CF_HDROPの代わりに CFSTR_MOUNTEDVOLUME 形式識別子が使用されます。
ボリュームのマウントにドライブ文字のみを使用する場合は、 CF_HDROP のみが使用され、既存のプロパティ シート ハンドラーは以前のシステムと同様に機能します。 ただし、フォルダーにマウントされているボリュームのページとドライブ文字をハンドラーに表示するには、ハンドラーがCSFTR_MOUNTEDVOLUME形式とCF_HDROP形式の両方を理解できる必要があります。
CFSTR_SHELLIDLIST
この形式識別子は、1 つ以上の既存の名前空間オブジェクトの場所を転送するときに使用されます。 CF_HDROPとほぼ同じ方法で使用 されますが、ファイル システム パスの代わりに PID が含まれています。 PIDL を使用すると、CFSTR_SHELLIDLIST形式で仮想オブジェクトとファイル システム オブジェクトを処理できます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体です。 構造体の hGlobal メンバーは CIDA 構造体を指します。
CIDA 構造体の aoffset メンバーは、転送される各 PIDL の ITEMIDLIST 構造体の先頭へのオフセットを含む配列です。 特定の PIDL を抽出するには、まずそのインデックスを決定します。 次に、そのインデックスに対応する aoffset 値を CIDA 構造体のアドレスに追加します。
aoffset の最初の要素には、親フォルダーの完全修飾 PIDL へのオフセットが含まれています。 この PIDL が空の場合、親フォルダーはデスクトップです。 配列の残りの各要素には、転送する PID の 1 つへのオフセットが含まれています。 これらの PID は、すべて親フォルダーの PIDL に対して相対的です。
CIDA 構造体から PIDL を取得するには、次の 2 つのマクロを使用できます。 1 つ目は 構造体へのポインターを受け取り、親フォルダーの PIDL を取得します。 2 つ目は 構造体へのポインターを受け取り、0 から始まるインデックスで識別される他の PID のいずれかを取得します。
#define GetPIDLFolder(pida) (LPCITEMIDLIST)(((LPBYTE)pida)+(pida)->aoffset[0])
#define GetPIDLItem(pida, i) (LPCITEMIDLIST)(((LPBYTE)pida)+(pida)->aoffset[i+1])
注意
これらのマクロによって返される値は、PIDL の ITEMIDLIST 構造体へのポインターです。 これらの構造体は長さが異なるため、最後をマークする 2 バイトの NULL に到達するまで、ITEMIDLIST 構造体の各 SHITEMID 構造体を調べて構造体の末尾を決定する必要があります。
CFSTR_SHELLIDLISTOFFSET
この形式識別子は、 転送後のオブジェクトのグループの位置を指定するために、 CF_HDROP、CFSTR_SHELLIDLIST、 CFSTR_FILECONTENTS などの形式で使用されます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体で構成されます。 構造体の hGlobal メンバーは 、POINT 構造体の配列を指します。 最初の構造体は、グループを囲む四角形の左上隅の画面座標をピクセル単位で指定します。 構造体の残りの部分では、グループの位置に対する個々のオブジェクトの位置を指定します。 これらは、関連付けられた形式でオブジェクトを一覧表示するために使用した順序と同じ順序である必要があります。
仮想オブジェクトを転送するための形式
CFSTR_SHELLIDLIST形式を使用して、ファイル システムオブジェクトと仮想オブジェクトの両方を転送できます。 ただし、特定の種類の仮想オブジェクトを転送するための特殊な形式がいくつかあります。
CFSTR_NETRESOURCES
この形式識別子は、ドメインやサーバーなどのネットワーク リソースを転送するときに使用されます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体です。 構造体の hGlobal メンバーは NRESARRAY 構造体を指します。 その構造体の nr メンバーは、ネットワーク リソースを識別する null で終わる文字列が lpRemoteName メンバーに含まれている NETRESOURCE 構造体を示します。 その後、ドロップ ターゲットは、WNetAddConnection などの Windows ネットワーク (WNet) API 関数と共にデータを使用して、オブジェクトに対するネットワーク操作を実行できます。
CFSTR_PRINTERGROUP
この形式識別子は、プリンターのフレンドリ名を転送するときに使用されます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体です。 構造体の hGlobal メンバーは、 CF_HDROPで使用されるのと同じ形式の文字列を指します。 ただし、DROPFILES 構造体の pFiles メンバーには、ファイル パスではなく、プリンターの 1 つ以上のフレンドリ名が含まれています。
CFSTR_INETURL
この形式識別子は、CFSTR_SHELLURLを置き換えます (非推奨)。 アプリケーションでクリップボードの URL を操作する場合は、CFSTR_SHELLURLの代わりに CFSTR_INETURL を使用します (非推奨)。 この形式は、1 つの URL の最適なクリップボード表現を提供します。 UNICODE が定義されていない場合、アプリケーションは URL のCF_TEXT/CFSTR_SHELLURL バージョンを取得します。 UNICODE が定義されている場合、アプリケーションは URL のCF_UNICODEバージョンを取得します。
CFSTR_SHELLURL (非推奨)
注意
この形式識別子は非推奨になりました。代わりに CFSTR_INETURL を使用してください。
ソースとターゲットの間の通信の形式
これらの形式識別子を使用すると、ソースとターゲットの間の通信が可能になります。 この形式はデータに付随し、シェル オブジェクトを含む移動/コピー/貼り付けまたはドラッグ アンド ドロップ操作をより高度に制御できます。
- CFSTR_INDRAGLOOP
- CFSTR_LOGICALPERFORMEDDROPEFFECT
- CFSTR_PASTESUCCEEDED
- CFSTR_PERFORMEDDROPEFFECT
- CFSTR_PREFERREDDROPEFFECT
- CFSTR_TARGETCLSID
- CFSTR_UNTRUSTEDDRAGDROP
- DragWindow
CFSTR_INDRAGLOOP
この形式識別子は、データ オブジェクトがドラッグ アンド ドロップ ループ内にあるかどうかを示すために使用されます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体です。 構造体の hGlobal メンバーは DWORD 値を指します。 DWORD 値が 0 以外の場合、データ オブジェクトはドラッグ アンド ドロップ ループ内にあります。 値が 0 に設定されている場合、データ オブジェクトはドラッグ アンド ドロップ ループ内にありません。
一部のドロップ ターゲットは IDataObject::GetData を 呼び出し、オブジェクトがまだドラッグ アンド ドロップ ループ内にある間にデータの抽出を試みる場合があります。 このような発生ごとにオブジェクトを完全にレンダリングすると、ドラッグ カーソルが停止する可能性があります。 データ オブジェクトがCFSTR_INDRAGLOOPをサポートしている場合、ターゲットはその形式を使用してドラッグ アンド ドロップ ループの状態をチェックし、オブジェクトが実際にドロップされるまでメモリを集中的にレンダリングしないようにすることができます。 レンダリングするメモリ負荷の高い形式は、 FORMATETC 列挙子と IDataObject::QueryGetData の呼び出しに含める必要があります。 データ オブジェクトがCFSTR_INDRAGLOOP設定されていない場合は、値が 0 に設定されているかのように動作する必要があります。
CFSTR_LOGICALPERFORMEDDROPEFFECT
バージョン 5.0。この形式識別子を使用すると、ドロップ ソースはデータ オブジェクトの IDataObject::GetData メソッドを呼び出して、シェル データ転送の結果を判断できます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体です。 構造体の hGlobal メンバーは 、DROPEFFECT 値を含む DWORD を指します。
CFSTR_PERFORMEDDROPEFFECT形式識別子は、ターゲットが実際に行われた操作をデータ オブジェクトに示すことを目的としていました。 ただし、可能な限り、シェルはファイル システム オブジェクトに 最適化された移動 を使用します。 その場合、シェルは通常、CFSTR_PERFORMEDDROPEFFECT値を DROPEFFECT_NONE に設定して、元のデータが削除されたことをデータ オブジェクトに示します。 したがって、ソースはCFSTR_PERFORMEDDROPEFFECT値を使用して、実行された操作を特定できません。 ほとんどのソースではこの情報は必要ありませんが、いくつかの例外があります。 たとえば、最適化された移動によってソースがデータを削除する必要はなくなりますが、ソースは関連するデータベースを更新して、ファイルが移動またはコピーされたことを示す必要がある場合があります。
ソースが実行された操作を知る必要がある場合は、データ オブジェクトの IDataObject::GetData メソッドを呼び出して、CFSTR_LOGICALPERFORMEDDROPEFFECT形式を要求できます。 この形式は、基本的に、操作が完了した後にユーザーの観点から何が起こるかを反映します。 新しいファイルが作成され、元のファイルが削除されると、ユーザーに移動操作が表示され、形式のデータ値がDROPEFFECT_MOVEに設定されます。 元のファイルがまだ存在する場合、ユーザーにはコピー操作が表示され、形式のデータ値は DROPEFFECT_COPY に設定されます。 リンクが作成された場合、形式のデータ値はDROPEFFECT_LINKされます。
CFSTR_PASTESUCCEEDED
この形式識別子は、 IDataObject::SetData メソッドを使用して、貼り付け時の削除操作が成功したことをデータ オブジェクトに通知するために、ターゲットによって使用されます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体です。 構造体の hGlobal メンバーは、DROPEFFECT 値を含む DWORD を指します。 この形式は、切り取り操作を完了し、必要に応じて元のデータを削除する必要があることをデータ オブジェクトに通知するために使用されます。 詳細については、「 貼り付け時の削除操作」を参照してください。
CFSTR_PERFORMEDDROPEFFECT
この形式識別子は、データ転送の結果を IDataObject::SetData メソッドを使用してデータ オブジェクトに通知するために、ターゲットによって使用されます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体です。 構造体の hGlobal メンバーは、通常はDROPEFFECT_MOVEまたはDROPEFFECT_COPY、適切な DROPEFFECT 値に設定された DWORD を指します。
この形式は、通常、 最適化された 移動操作や貼り付け時の削除操作など、操作の結果を移動またはコピーできる場合に使用されます。 これは、ターゲットが実際に何が起こったかをデータ オブジェクトに伝える信頼性の高い方法を提供します。 これは、DoDragDrop によって返される pdwEffect の値が、実行された操作を確実に示さなかったために導入されました。 CFSTR_PERFORMEDDROPEFFECT形式は、最適化されていない移動が行われたことを示す信頼性の高い方法です。
CFSTR_PREFERREDDROPEFFECT
この形式識別子は、データ転送の推奨される方法を移動するかコピーするかを指定するために、ソースによって使用されます。 ドロップ ターゲットは、データ オブジェクトの IDataObject::GetData メソッドを呼び出すことによって、この形式を要求します。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体です。 構造体の hGlobal メンバーは DWORD 値を指します。 この値は、移動操作が優先される場合はDROPEFFECT_MOVE、コピー操作が優先される場合はDROPEFFECT_COPYに設定されます。
この機能は、ソースが移動操作またはコピー操作をサポートできる場合に使用されます。 CFSTR_PREFERREDDROPEFFECT形式を使用して、その設定をターゲットに伝達します。 ターゲットは要求を受け入れる義務がないため、ターゲットはソースの IDataObject::SetData メソッドを CFSTR_PERFORMEDDROPEFFECT 形式で呼び出して、実際に実行された操作をデータ オブジェクトに伝える必要があります。
貼り付け時の削除操作では、CFSTR_PREFERREDDROPFORMAT形式を使用して、ソースが切り取りまたはコピーを行ったかどうかをターゲットに通知します。 ドラッグ アンド ドロップ操作では、CFSTR_PREFERREDDROPFORMATを使用してシェルのアクションを指定できます。 この形式が存在しない場合、シェルはコンテキストに基づいて既定のアクションを実行します。 たとえば、あるボリュームからファイルをドラッグして別のボリュームにドロップした場合、シェルの既定のアクションはファイルをコピーすることです。 データ オブジェクトにCFSTR_PREFERREDDROPFORMAT形式を含めることで、既定のアクションをオーバーライドし、ファイルのコピー、移動、またはリンクをシェルに明示的に指示できます。 ユーザーが右ボタンでドラッグすることを選択した場合、CFSTR_PREFERREDDROPFORMAT は、ドラッグ アンド ドロップショートカット メニューの既定のコマンドを指定します。 ユーザーは引き続きメニューの他のコマンドを自由に選択できます。
Microsoft Internet エクスプローラー 4.0 より前のアプリケーションでは、FILEDESCRIPTOR 構造体の dwFlags メンバーに FD_LINKUIを設定して、ショートカット ファイルの種類を転送していることを示していました。 その後、ターゲットは IDataObject::GetData に対して時間のかかる可能性のある呼び出しを使用して、FD_LINKUI フラグが設定されているかどうかを確認する必要がありました。 ここで、ショートカットが転送されていることを示す推奨される方法は、DROPEFFECT_LINKに設定されたCFSTR_PREFERREDDROPEFFECT形式を使用することです。 ただし、古いシステムとの下位互換性のために、ソースは引き続き FD_LINKUI フラグを設定する必要があります。
CFSTR_TARGETCLSID
この形式識別子は、CLSID をソースに提供するためにターゲットによって使用されます。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体です。 構造体の hGlobal メンバーは、ドロップ ターゲットの CLSID GUID を指します。
この形式は、主にオブジェクトをごみ箱にドラッグして削除できるようにするために使用されます。 ごみ箱にオブジェクトがドロップされると、ソースの IDataObject::SetData メソッドが呼び出され、CFSTR_TARGETCLSID形式がごみ箱の CLSID (CLSID_RecycleBin) に設定されます。 その後、ソースは元のオブジェクトを削除できます。
CFSTR_UNTRUSTEDDRAGDROP
この形式識別子は、Windows インターネット エクスプローラーと Windows シェルによって使用され、インターネット エクスプローラーから発生するドラッグ アンド ドロップ操作をブロックまたはプロンプトするメカニズムを、URLACTION_SHELL_ENHANCED_DRAGDROP_SECURITY フラグと組み合わせて提供します。
CFSTR_UNTRUSTEDDRAGDROP は、ドラッグ アンド ドロップ操作のソースによって追加され、データ オブジェクトに信頼できないデータが含まれている可能性があることを指定します。 データは、グローバル メモリ オブジェクトを含む STGMEDIUM 構造体によって表されます。 構造体の hGlobal メンバーは、PUAF_ENFORCERESTRICTED フラグを使用して、IInternetSecurityManager::P rocessUrlAction メソッドを使用してポリシーをチェックするために、適切な URL アクション フラグに設定された DWORD を指します。
DragWindow
この形式は、オブジェクトのドラッグ イメージ (ウィンドウ) を識別するドラッグ アンド ドロップ操作で使用され、ビジュアル情報を動的に更新できます。 オブジェクトがドロップ ターゲットの上にドラッグされると、アプリケーションは IDropTarget::D ragOver メソッドまたは IDropSource::GiveFeedback メソッドに応答して DROPDESCRIPTION 構造体を更新します。 DROPDESCRIPTION は、ドラッグ ウィンドウのビジュアルに適用される装飾を示す新しい DROPIMAGETYPE 値で更新されます。たとえば、ファイルが移動されずにコピーされているか、オブジェクトをその場所にドロップできないことを示します。 ただし、オブジェクトが DDWM_UPDATEWINDOW メッセージを受信するまで、ビジュアルは更新されません。 この形式は、受信者のドラッグ ウィンドウの HWND を DDWM_UPDATEWINDOW メッセージの送信者に提供します。
クリップボード データの種類は TYMED_HGLOBAL です。 これは HWND の DWORD 表現です。 Basetsd.h で定義されている ULongToHandle 関数にデータを渡して、64 ビット Windows で使用する 64 ビット HWND を提供できます。
この形式では、Shlobj.h を含める必要はありません。