0

IDropTarget を実装するときは、これを実装する必要があります。

virtual HRESULT STDMETHODCALLTYPE Drop( 
            /* [unique][in] */ __RPC__in_opt IDataObject *pDataObj,
            /* [in] */ DWORD grfKeyState,
            /* [in] */ POINTL pt,
            /* [out][in] */ __RPC__inout DWORD *pdwEffect)=0;

IDataObject に入っているデータの種類を知りたいです。

これは私がしました:

FORMATETC fdrop = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};

            if (SUCCEEDED(pDataObj->QueryGetData(&fdrop)) ){
                STGMEDIUM stgMedium = {0};
                stgMedium.tymed = TYMED_HGLOBAL;
                HRESULT hr = pDataObj->GetData(&fdrop, &stgMedium);
                if (SUCCEEDED(hr))
                {

ただし、これは誰かがファイルをドロップした場合にのみ機能します。CF_TEXT と CF_BITMAP もあることがわかりましたが、すべての種類のクリップボード形式を照会したくないので、IDataObject のデータ型を照会する方法があるかどうか知りたいです。

CF_HDROP はファイルに対しては正常に機能しますが、たとえばブラウザーから画像をドロップすると、どの種類の CF_ を使用すればよいかわかりません... CF_BITMAP を試しましたが、機能しません。

4

1 に答える 1

1

IDataObject::EnumFormatEtcを参照してください。ドキュメントからわかるように、複数の形式でデータを照会できる可能性があり、EnumFormatEtc は利用可能なさまざまな形式を列挙する手段です。

于 2009-12-12T05:31:54.953 に答える