Click here to Skip to main content
15,886,110 members
Articles / Desktop Programming / ATL

MultiCopier Software

Rate me:
Please Sign up or sign in to vote.
4.90/5 (20 votes)
29 Sep 20021 min read 98.4K   3.8K   68  
The fastest, easy way to copy files from different folders at the same time
//-----------------------------------------------------------------------//
// This is a part of the Multicopier.									 //	
// Autor  :  Ahmed Ismaiel Zakaria										 //
// (C) 2002 FCIS Egypt  All rights reserved								 //
// This code is provided "as is", with absolutely no warranty expressed  //
// or implied. Any use is at your own risk.								 //		
// You must obtain the author's consent before you can include this code //
// in a software library.												 //
// If the source code in  this file is used in any application			 //
// then acknowledgement must be made to the author of this program		 //	
// ahmed_ismaiel@hotmail.com											 //
//-----------------------------------------------------------------------//

// SelectFiles.h : Declaration of the CSelectFiles

#ifndef __SELECTFILES_H_
#define __SELECTFILES_H_

#include "resource.h"       // main symbols
#include <atlhost.h>
#include "BrowseForFolder.h"
#include "CShellFileOp.h"

/////////////////////////////////////////////////////////////////////////////
// CSelectFiles
class CSelectFiles : 
public CAxDialogImpl<CSelectFiles>
{
public:
	CSelectFiles()
	{
	}
	
	~CSelectFiles()
	{
		m_small.Detach ();
	}
	
	enum { IDD = IDD_SELECTFILES };
	CStringArray *m_source;
	CString destnation;
	CImageList m_small;
	BEGIN_MSG_MAP(CSelectFiles)
		MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
		
		COMMAND_ID_HANDLER(IDOK, OnOK)
		COMMAND_ID_HANDLER(IDC_COPY, OnCopy)
		COMMAND_ID_HANDLER(IDC_MOVE, OnMove)
		COMMAND_ID_HANDLER(IDC_DELETE, OnDelete)
		COMMAND_ID_HANDLER(IDC_BROWSE, OnBrowse)
		END_MSG_MAP()
		//MESSAGE_HANDLER(WM_HELP ,OnHelp
		// Handler prototypes:
		//  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
		//  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
		//  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
		
		LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		(CWnd::FromHandle (GetDlgItem(IDC_FOLDERNAME)))->SetWindowText(destnation);
		HICON icon=::LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDI_BROWSE));
		CButton b;b.Attach(GetDlgItem(IDC_BROWSE));
		b.SetIcon(icon);
		b.Detach();
		CListCtrl	m_list;
		m_list.Attach (GetDlgItem(IDC_LIST1));
		m_list.InsertColumn ( 0,"File/folder names",LVCFMT_LEFT,400);
		//add the image list
			SHFILEINFO    shfi;
			m_small.Attach((HIMAGELIST)SHGetFileInfo(
				"c:\\",0,&shfi,
				sizeof(SHFILEINFO),
				SHGFI_SYSICONINDEX ));
		m_list.SetImageList(&m_small, LVSIL_SMALL);
		//
		int uCount=m_source->GetSize ();
		for(int i=0;i<uCount;i++)
		{
			CString s=m_source->GetAt (i);
			SHFILEINFO    shfi;
			if(PathIsDirectory((LPCTSTR)s))
			{
				UINT flags = SHGFI_SYSICONINDEX  | SHGFI_USEFILEATTRIBUTES;//| SHGFI_SMALLICON
				SHGetFileInfo(_T("TMP") ,  FILE_ATTRIBUTE_DIRECTORY , &shfi, sizeof(SHFILEINFO), flags);
			}
			else
			{
			UINT flags = SHGFI_SYSICONINDEX  | SHGFI_USEFILEATTRIBUTES;//| SHGFI_SMALLICON
			SHGetFileInfo(s ,  FILE_ATTRIBUTE_NORMAL, &shfi, sizeof(SHFILEINFO), flags);
			}
			int n=m_list.InsertItem ( i,(LPCTSTR)s,shfi.iIcon);
			if(n==-1)
			{AfxMessageBox ("bd");
			}
		}
		
		m_list.Detach ();
		return 1;  // Let the system set the focus
	}
	
	LRESULT OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
	{
		CListCtrl	m_list;m_list.Attach (GetDlgItem(IDC_LIST1));
		m_list.SetImageList((CImageList*)0, LVSIL_SMALL);
		m_source->RemoveAll ();
		int uCount=m_list.GetItemCount();
		for(int i=0;i<uCount;i++)
		{
			m_source->Add( m_list.GetItemText (i,0));
		}
		m_list.Detach ();
		EndDialog(wID);
		return 0;
	}
	LRESULT OnBrowse(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 
	{
		CBrowseForFolder bf;
		CString Path;
		bf.strTitle="Choose a folder";
		if (bf.GetFolder(Path))
			(CWnd::FromHandle (GetDlgItem(IDC_FOLDERNAME)))->SetWindowText(Path);
		return 0;
	}
	
	LRESULT OnDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 
	{
		CListCtrl	m_list;m_list.Attach (GetDlgItem(IDC_LIST1));
		POSITION pos=m_list.GetFirstSelectedItemPosition ();
		while(pos!=NULL)
		{
			int n=	m_list.GetNextSelectedItem (pos);
			m_list.DeleteItem (n);
		}
		m_list.Detach ();
		return 0;
	}
	
	LRESULT OnMove(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 
	{
		// TODO: Add your control notification handler code here
		CListCtrl	m_list;
		CShellFileOp op;
		op.SetOperationFlags ( FO_MOVE, CWnd::FromHandle (::GetDesktopWindow ()),
			FOF_RENAMEONCOLLISION );
		CString dest;
		(CWnd::FromHandle (GetDlgItem(IDC_FOLDERNAME)))->GetWindowText(dest);
		if(PathFileExists(dest))
			op.AddDestFile ( dest );
		else
		{AfxMessageBox ("Path not exist") ;return 0;}
		m_list.Attach (GetDlgItem(IDC_LIST1));
		POSITION pos=m_list.GetFirstSelectedItemPosition ();
		while(pos!=NULL)
		{
			int n=	m_list.GetNextSelectedItem (pos);
			op.AddSourceFile ( m_list.GetItemText (n,0));
			m_list.DeleteItem (n);
		}
		m_list.Detach ();
		BOOL bSuccess, bAPICalled = FALSE, bAborted = FALSE;
		int  nAPIReturn = 0;
		bSuccess = op.Go ( &bAPICalled, &nAPIReturn, &bAborted );
		return 0;
	}
	
	LRESULT OnCopy(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 
	{
		CListCtrl	m_list;
		CRegDWORD  myword("Software\\Company\\Subkey\\mydword", 0, TRUE, HKEY_LOCAL_MACHINE);
		CShellFileOp op;
		op.SetOperationFlags ( FO_COPY, CWnd::FromHandle (::GetDesktopWindow ()),
			FOF_RENAMEONCOLLISION );
		CString dest;
		(CWnd::FromHandle (GetDlgItem(IDC_FOLDERNAME)))->GetWindowText(dest);
		if(PathFileExists(dest))
			op.AddDestFile ( dest );
		else
		{AfxMessageBox ("Path not exist") ;return 0;}
		m_list.Attach (GetDlgItem(IDC_LIST1));
		POSITION pos=m_list.GetFirstSelectedItemPosition ();
		while(pos!=NULL)
		{
			int n=	m_list.GetNextSelectedItem (pos);
			
			op.AddSourceFile ( m_list.GetItemText (n,0));
			if(1==(DWORD)myword)
			{
				m_list.DeleteItem (n);
			}//
		}
		m_list.Detach ();
		BOOL bSuccess, bAPICalled = FALSE, bAborted = FALSE;
		int  nAPIReturn = 0;
		bSuccess = op.Go ( &bAPICalled, &nAPIReturn, &bAborted );
		return 0;
	}
};

#endif //__SELECTFILES_H_

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Egypt Egypt
My name is Ahmed Ismaiel Zakaria
i'm programming c++ & visual c++ (MFC )& Visual basic and recently COM,ATL
Student in Faculty of computer and information science in Egypt

Comments and Discussions