⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menubackground.cpp

📁 一个不同目录中多个文件拷贝的助手程序
💻 CPP
字号:
//-----------------------------------------------------------------------//
// 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											 //
//-----------------------------------------------------------------------//

// MenuBackground.cpp : Implementation of CMenuBackground
#include "stdafx.h"
#include "Copier.h"
#include "MenuBackground.h"
#include "aboutdlg.h"
#include "cshellfileop.h"
#include "selectfiles.h"
#include "options.h"

/////////////////////////////////////////////////////////////////////////////
// CMenuBackground

HRESULT CMenuBackground::Initialize(LPCITEMIDLIST pidlFolder,LPDATAOBJECT lpdobj, HKEY hkeyProgID)
{
	return SHGetPathFromIDList ( pidlFolder, m_szDirClickedIn ) ? S_OK : E_INVALIDARG;
}

HRESULT CMenuBackground::QueryContextMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
{
    if ( (uFlags & CMF_DEFAULTONLY))
	{
        return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL, 0 );
	}
	LoadFile(&source);
int uCmd=idCmdFirst;

	CMenu main;main.Attach (hmenu);
	CMenu menu,*menu2;
	HMENU m=::LoadMenu (_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_COPIER1));
	if(m!=NULL)
	{
		menu.Attach (m);
		CString s;
		menu2=menu.GetSubMenu (0);
		menu.Detach ();
		//Modify the menu
		UINT state;CString empty;
		if(source.GetSize ()==0)
		{
			state = menu2->GetMenuState(0, MF_BYPOSITION);
			menu2->GetMenuString(0,empty,MF_BYPOSITION);
			menu2->ModifyMenu (0,state|MF_BYPOSITION|MF_GRAYED|MF_STRING,0,empty);
			state = menu2->GetMenuState(1, MF_BYPOSITION);
			menu2->GetMenuString(1,empty,MF_BYPOSITION);
			menu2->ModifyMenu (1,state|MF_BYPOSITION|MF_GRAYED|MF_STRING,0,empty);	
		}
		state = menu2->GetMenuState(4, MF_BYPOSITION);
		
		menu2->GetMenuString(4,empty,MF_BYPOSITION);
		empty.Format ("%s (%d)",(LPSTR)(LPCSTR)empty,source.GetSize ());
		menu2->ModifyMenu (4,state|MF_BYPOSITION|MF_STRING,0,empty);
		int mcount=menu2->GetMenuItemCount ();
		for(int i=0;i<mcount;i++)
		{
			UINT state = menu2->GetMenuState(i, MF_BYPOSITION);
		//	ASSERT(state != 0xFFFFFFFF);
			if(!(state & MF_SEPARATOR))
			{
				CString menustring="";
			menu2->GetMenuString(i,menustring,MF_BYPOSITION);
			menu2->ModifyMenu (i,state|MF_BYPOSITION ,uCmd++,menustring);
			}
		}
main.InsertMenu (0,MF_SEPARATOR|MF_BYPOSITION,0);
main.InsertMenu ( 0,MF_STRING|MF_POPUP|MF_BYPOSITION,(UINT)menu2->Detach (),"MultiCopier");
	indexMenu++;
	menu.Detach ();main.Detach ();
	}

return MAKE_HRESULT ( SEVERITY_SUCCESS, FACILITY_NULL,uCmd- idCmdFirst+1 );
}

HRESULT CMenuBackground::InvokeCommand(LPCMINVOKECOMMANDINFO lpici)
{
	if (!HIWORD(lpici->lpVerb))    
	{       
		int vv=LOWORD(lpici->lpVerb);
		switch (vv)       
		{ 
		case 0:
			{
				CShellFileOp op;
				CRegDWORD  myword("Software\\Company\\Subkey\\mydword", 0, TRUE, HKEY_LOCAL_MACHINE);
				op.SetOperationFlags ( FO_COPY, CWnd::FromHandle (::GetDesktopWindow ()),
					FOF_RENAMEONCOLLISION );
				int uCount=source.GetUpperBound();
				for (int i=uCount;i>=0;i--)
				{
					op.AddSourceFile (source.GetAt (i) );
					if(1==(DWORD)myword)
					{
					source.RemoveAt(i);
					}
				}
				op.AddDestFile ( m_szDirClickedIn );
				BOOL bSuccess, bAPICalled = FALSE, bAborted = FALSE;
				int  nAPIReturn = 0;
				bSuccess = op.Go ( &bAPICalled, &nAPIReturn, &bAborted );
				if(bSuccess)	SaveFile(&source);				
			}
			break;
		case 1:
			{
				CShellFileOp op;
				op.SetOperationFlags ( FO_MOVE, CWnd::FromHandle (::GetDesktopWindow ()),
					FOF_RENAMEONCOLLISION );
				int uCount=source.GetUpperBound();
				for (int i=uCount;i>=0;i--)
				{
					op.AddSourceFile (source.GetAt (i) );
					source.RemoveAt(i);
				}
				op.AddDestFile ( m_szDirClickedIn );
				BOOL bSuccess, bAPICalled = FALSE, bAborted = FALSE;
				int  nAPIReturn = 0;
				bSuccess = op.Go ( &bAPICalled, &nAPIReturn, &bAborted );
				if(bSuccess)	SaveFile(&source);
			}
			break;
		case 2:
			{
				CSelectFiles dlg;
				dlg.m_source=&source;
				dlg.destnation=m_szDirClickedIn;
				dlg.DoModal ();
				SaveFile(&source);
			}
			break;
		case 3:
			source.RemoveAll ();
			SaveFile(&source);
			break;
		case 4:
			{
				COptions dlg;dlg.DoModal ();
			}
			break;
		case 5:
			::AfxBeginThread(SendMail,0,
				THREAD_PRIORITY_NORMAL, 0, 0);
			break;
		case 6:
			{
				CString file;
				::GetModuleFileName(::GetModuleHandle ("Copier"),file.GetBuffer (256),255);
				file.ReleaseBuffer (256);//size-1
				LPSTR folder=file.GetBuffer (file.GetLength ());
				PathRemoveFileSpec(folder);
				CString f=folder;
				
				ShellExecute(NULL,"open",f+"\\MultiCopier Help.chm",NULL,NULL,SW_MAXIMIZE );
			}
			break;
		case 7:
			CAboutDlg dlg;
			dlg.DoModal ();
			break;
		}
	}

	return NOERROR;
}

HRESULT CMenuBackground::GetCommandString(UINT idCmd, UINT uType,UINT* pwReserved,LPSTR pszName,UINT cchMax)
{
	return NOERROR;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -