SHCreateShellItemArrayFromIDLists 在XP下对应的函数

void_main_void 2016-03-03 04:44:09
下面这份代码是在vista及以上的鼠标拖拽文件的代码。但是在XP下。在shell32.dll 中找不到 SHCreateShellItemArrayFromIDLists这个函数。。(尝试过自己弄一份DLL放在程序中也没用。。) 那么在XP下应该换成什么函数来实现???

bool CImageItem::DragDropTo(vector<wstring>& paths, int DropStyle)
{
OleInitialize(NULL); // needed for Drag and Drop

PCIDLIST_ABSOLUTE* pIdlArray = nullptr;
pIdlArray = new PCIDLIST_ABSOLUTE[paths.size()];

vector<wstring>::iterator it = paths.begin();
int i = 0;
for (it; it != paths.end(); it++, i++)
{
pIdlArray[i] = ::ILCreateFromPath((*it).c_str());
}

HRESULT hr;

CComPtr<IShellItemArray> pIshellItemArray;
hr = ::SHCreateShellItemArrayFromIDLists(paths.size(), pIdlArray, &pIshellItemArray);
if (SUCCEEDED(hr))
{
IDataObject *pdtobj;
hr = pIshellItemArray->BindToHandler(NULL, BHID_DataObject, IID_PPV_ARGS(&pdtobj));
if (SUCCEEDED(hr))
{
DWORD dwEffectResult;
hr = SHDoDragDrop(m_my->m_hwnd, pdtobj, NULL, DropStyle, &dwEffectResult);
pdtobj->Release();
}
}


for (UINT i = 0; i < paths.size(); ++i)
{
CoTaskMemFree((LPVOID)pIdlArray[i]);
}

delete pIdlArray;

OleUninitialize();

return SUCCEEDED(hr);
}
...全文
269 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2019-08-19
  • 打赏
  • 举报
回复
今天我才看到这个帖子,我知道这个问题怎么解决,就是用 IShellFolder::GetUIObjectOf 来得到 IDataObject 接口指针。但是这个接口要求所有的文件都必须位于同一文件夹。IShellItemArray 虽然也支持来自不同路径的 IShellItem 对象,但你这种场景下,还是会要求所有来源文件还必须同一路径中的 IShellItem 对象,刚好和 IShellFolder::GetUIObjectOf 的调用方式相同。
gfvera 2016-03-20
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/391917264
赵4老师 2016-03-09
  • 打赏
  • 举报
回复
引用 3 楼 void_main_void 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:] XP下没有IShellItemArray,据我所知。
那XP下的文件拖拽是如何实现的。。能给资料吗。。[/quote] 在http://www.codeproject.com搜“Shell Extension”
void_main_void 2016-03-09
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
XP下没有IShellItemArray,据我所知。
那XP下的文件拖拽是如何实现的。。能给资料吗。。
赵4老师 2016-03-08
  • 打赏
  • 举报
回复
XP下没有IShellItemArray,据我所知。
void_main_void 2016-03-07
  • 打赏
  • 举报
回复
求帮助。。。。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧