/*-------------------------------------------------------------------------------------------------*
 * droppedfile.h
 * http://cdebrock.free.fr
 * Accès HDROP (WM_DROPFILES)
 * version MFC/non-MFC (#ifdef __AFXWIN_H__)

	void CMyDialog::OnDropFiles(HDROP hDropInfo)
	{
		CDroppedFile Dropped(hDropInfo);

		TRACE("Count: %d\n", Dropped.GetCount());

		CString str;
		while (Dropped.GetNextFile(str))
		{
			TRACE("\t%s\n", str);
		}
	}

 *
 *-------------------------------------------------------------------------------------------------*/

class CDroppedFile
{

public:
	//----------------------------------------------------------------------------
	CDroppedFile(HDROP hDropInfo)
	{
		m_hDropInfo = hDropInfo;
		m_iCurrent = 0;
	};

	//----------------------------------------------------------------------------
	~CDroppedFile()
	{
		DragFinish(m_hDropInfo);
	}

	//----------------------------------------------------------------------------
	int GetCount ( void )
	{
		return DragQueryFile (m_hDropInfo, 0xFFFFFFFF, NULL, 0);
	}

#if defined __AFXWIN_H__

	// Copie dans <strFilename> le fichier n° iIndex.
	// Retourne le nombre de car. copiés, ou 0 si pas de fichier à cet index.
	int GetFile ( int iIndex, CString& strFilename )
	{
		int iret;

		iret = DragQueryFile (m_hDropInfo, iIndex, strFilename.GetBuffer(_MAX_PATH), _MAX_PATH);
		strFilename.ReleaseBuffer();

		return iret;
	}

	// Copie dans <strFilename> le fichier droppé suivant.
	// Retourne le nombre de caracteres copiés (sans le null), ou 0 si plus de fichier.
	BOOL GetNextFile ( CString& strFilename )
	{
		return GetFile(m_iCurrent++, strFilename);
	}

	// Copie dans strFilename le premier fichier droppé.
	// Retourne le nombre de caracteres copiés (sans le null).
	BOOL GetFirstFile ( CString& strFilename )
	{
		m_iCurrent = 0;
		return GetNextFile(strFilename);
	}

#else // not using MFC

	// Copie dans lpszFilename (de _MAX_PATH caracteres) le fichier n° iIndex.
	// Retourne le nombre de car. copiés, ou 0 si pas de fichier à cet index.
	int GetFile ( int iIndex, LPTSTR lpszFilename )
	{
		int iret;

		iret = DragQueryFile (m_hDropInfo, iIndex, lpszFilename, _MAX_PATH);

		return iret;
	}

	// Copie dans <lpszFilename> (de _MAX_PATH caracteres) le fichier droppé suivant.
	// Retourne le nombre de caracteres copiés (sans le null), ou 0 si plus de fichier.
	BOOL GetNextFile ( LPTSTR lpszFilename )
	{
		return GetFile(m_iCurrent++, lpszFilename);
	}

	// Copie dans <lpszFilename> (de _MAX_PATH caracteres) le premier fichier droppé.
	// Retourne le nombre de caracteres copiés (sans le null).
	BOOL GetFirstFile ( LPTSTR lpszFilename )
	{
		m_iCurrent = 0;
		return GetNextFile(lpszFilename);
	}

#endif

protected:
	//----------------------------------------------------------------------------
	int		m_iCurrent;
	HDROP	m_hDropInfo;
};

