【问题标题】:What is coming in IDataObject?IDataObject 中会出现什么?
【发布时间】:2010-12-25 22:01:25
【问题描述】:

当你实现 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,但是我不想查询所有类型的Clipboard Formats,所以我想知道有没有办法查询IDataObject的数据类型。

CF_HDROP 适用于文件,但是当我从浏览器中删除图像时,我不知道要使用哪种 CF_...我尝试了 CF_BITMAP 但不起作用。

【问题讨论】:

    标签: c++ winapi ole


    【解决方案1】:

    IDataObject::EnumFormatEtc。正如您从文档中看到的那样,可以查询多种格式的数据,而 EnumFormatEtc 是一种枚举各种可用格式的方法。

    【讨论】:

    • 非常感谢。看了好几遍文档,不知道怎么没看到。
    猜你喜欢
    • 2020-04-29
    • 2021-07-29
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2011-01-27
    相关资源
    最近更新 更多