c++ - IDataObject 中有什么?

标签 c++ winapi ole

当你实现 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 但不起作用。

最佳答案

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

关于c++ - IDataObject 中有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1892172/

相关文章:

c++ - 在 Windows 7 64 位中使用 32 位 shell 扩展

c++ - CreateProcessAsUser和createevent权限

javascript - 如何使用 Javascript 创建到特定邮箱的 Outlook 任务?

java - 将我的 C++ Base64 代码翻译成 Java 不工作

c++ - 模板函数参数中的自动模板特化

c++ - 在 Qt6 中移植 QRegExp::exactMatch()

Excel VBA 创建嵌入式 WebBrowser 并使用它

c++ - Windows 服务问题(C++、WinAPI)

c++ - 所有者绘制的复选框

com - COM 和 OLE 有什么区别?