#if !defined(AFX_COPYFILETHREAD_H__486ACE7D_C8B2_11D0_B9E6_00A024706EDC__INCLUDED_)
#define AFX_COPYFILETHREAD_H__486ACE7D_C8B2_11D0_B9E6_00A024706EDC__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// CopyFileThread.h : header file
//
#define _WIN32_WINNT    0x0400
#include <afxmt.h>

#define WM_USER_THREAD_MSG      (WM_USER + 1)

#define COPYTHREAD_START                10001
#define COPYTHREAD_PROGRESS             10002
#define COPYTHREAD_DONE                 10003
#define COPYTHREAD_ABORT                10004


/////////////////////////////////////////////////////////////////////////////
// CCopyFileThread thread

class CCopyFileThread : public CWinThread
{
        DECLARE_DYNCREATE(CCopyFileThread)
protected:
        static DWORD WINAPI CopyProgressRoutine(LARGE_INTEGER TotalFileSize, 
                                                                 LARGE_INTEGER TotalBytesTransferred, 
                                                                 LARGE_INTEGER StreamSize, 
                                                                 LARGE_INTEGER StreamBytesTransferred, 
                                                                 DWORD dwStreamNumber, 
                                                                 DWORD dwCallbackReason, 
                                                                 HANDLE hSourceFile, 
                                                                 HANDLE hDestinationFile, 
                                                                 LPVOID lpData );


public:
        void Abort();
        CCopyFileThread();           // protected constructor used by dynamic creation
        static CCopyFileThread * CreateCopyThread(LPCSTR szSrc, LPCSTR szDest, CWnd *pNotifyWnd = NULL);
        void Init(LPCSTR szSource, LPCSTR szDest, CWnd *pNotifyWnd = NULL);
        CEvent m_evDone;
        CEvent m_evAbort;
        CEvent m_evExit;
        CWnd *m_pNotifyWnd;
        CString m_strDest;
        CString m_strSource;
        virtual ~CCopyFileThread();

// Overrides
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CCopyFileThread)
        public:
        virtual BOOL InitInstance();
        virtual int ExitInstance();
        virtual int Run();
        //}}AFX_VIRTUAL

// Implementation
protected:

        // Generated message map functions
        //{{AFX_MSG(CCopyFileThread)
                // NOTE - the ClassWizard will add and remove member functions here.
        //}}AFX_MSG

        DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_COPYFILETHREAD_H__486ACE7D_C8B2_11D0_B9E6_00A024706EDC__INCLUDED_)