50 lines
886 B
C++
50 lines
886 B
C++
#include "pch.h"
|
|
#include "HDropIterator.h"
|
|
|
|
HDropIterator::HDropIterator(IDataObject* pdtobj)
|
|
{
|
|
_current = 0;
|
|
|
|
FORMATETC formatetc = {
|
|
CF_HDROP,
|
|
NULL,
|
|
DVASPECT_CONTENT,
|
|
-1,
|
|
TYMED_HGLOBAL
|
|
};
|
|
|
|
pdtobj->GetData(&formatetc, &m_medium);
|
|
|
|
_listCount = DragQueryFile((HDROP)m_medium.hGlobal, 0xFFFFFFFF, NULL, 0);
|
|
}
|
|
|
|
HDropIterator::~HDropIterator()
|
|
{
|
|
ReleaseStgMedium(&m_medium);
|
|
}
|
|
|
|
void HDropIterator::First()
|
|
{
|
|
_current = 0;
|
|
}
|
|
|
|
void HDropIterator::Next()
|
|
{
|
|
_current++;
|
|
}
|
|
|
|
bool HDropIterator::IsDone() const
|
|
{
|
|
return _current >= _listCount;
|
|
}
|
|
|
|
LPTSTR HDropIterator::CurrentItem() const
|
|
{
|
|
UINT cch = DragQueryFile((HDROP)m_medium.hGlobal, _current, NULL, 0) + 1;
|
|
LPTSTR pszPath = (LPTSTR)malloc(sizeof(TCHAR) * cch);
|
|
|
|
DragQueryFile((HDROP)m_medium.hGlobal, _current, pszPath, cch);
|
|
|
|
return pszPath;
|
|
}
|