15,979
社区成员
发帖
与我相关
我的任务
分享
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);
}