📄 menubackground.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 + -