1455 lines
39 KiB
C++
1455 lines
39 KiB
C++
|
|
// FileManagerDlg.cpp : ʵ<><CAB5><EFBFBD>ļ<EFBFBD>
|
|||
|
|
//
|
|||
|
|
|
|||
|
|
#include "stdafx.h"
|
|||
|
|
#include "2015Remote.h"
|
|||
|
|
#include "FileManagerDlg.h"
|
|||
|
|
#include "afxdialogex.h"
|
|||
|
|
#include "EditDialog.h"
|
|||
|
|
#include "FileTransferModeDlg.h"
|
|||
|
|
#include "FileCompress.h"
|
|||
|
|
#include <strsafe.h>
|
|||
|
|
|
|||
|
|
#define MAKEINT64(low, high) ((unsigned __int64)(((DWORD)(low)) | ((unsigned __int64)((DWORD)(high))) << 32))
|
|||
|
|
#define MAX_SEND_BUFFER 8192
|
|||
|
|
|
|||
|
|
static UINT Indicators[] =
|
|||
|
|
{
|
|||
|
|
ID_SEPARATOR,
|
|||
|
|
ID_SEPARATOR,
|
|||
|
|
IDR_STATUSBAR_PROCESS,
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// CFileManagerDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
|||
|
|
|
|||
|
|
IMPLEMENT_DYNAMIC(CFileManagerDlg, CDialog)
|
|||
|
|
|
|||
|
|
CFileManagerDlg::CFileManagerDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *ContextObject)
|
|||
|
|
: CDialog(CFileManagerDlg::IDD, pParent)
|
|||
|
|
{
|
|||
|
|
m_ContextObject = ContextObject;
|
|||
|
|
m_iocpServer = IOCPServer;
|
|||
|
|
m_ProgressCtrl = NULL;
|
|||
|
|
sockaddr_in ClientAddr = {0};
|
|||
|
|
int iClientAddrLength = sizeof(sockaddr_in);
|
|||
|
|
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ӱ<EFBFBD><D3B1>ض˵<D8B6>IP
|
|||
|
|
BOOL bOk = getpeername(ContextObject->sClientSocket,(SOCKADDR*)&ClientAddr, &iClientAddrLength);
|
|||
|
|
|
|||
|
|
m_strClientIP = bOk != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : "";
|
|||
|
|
|
|||
|
|
memset(m_szClientDiskDriverList, 0, sizeof(m_szClientDiskDriverList));
|
|||
|
|
int len = ContextObject->InDeCompressedBuffer.GetBufferLength();
|
|||
|
|
memcpy(m_szClientDiskDriverList, ContextObject->InDeCompressedBuffer.GetBuffer(1), len - 1);
|
|||
|
|
|
|||
|
|
CoInitialize(0);
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ϵͳͼ<CDB3><CDBC><EFBFBD>б<EFBFBD>
|
|||
|
|
try {
|
|||
|
|
SHFILEINFO sfi = {0};
|
|||
|
|
HIMAGELIST hImageList = (HIMAGELIST)SHGetFileInfo(NULL,0,&sfi,sizeof(SHFILEINFO),SHGFI_LARGEICON | SHGFI_SYSICONINDEX);
|
|||
|
|
m_ImageList_Large = CImageList::FromHandle(hImageList); //CimageList*
|
|||
|
|
ImageList_Destroy(hImageList);
|
|||
|
|
}catch(...){
|
|||
|
|
OutputDebugStringA("======> m_ImageList_Large catch an error. \n");
|
|||
|
|
}
|
|||
|
|
try{
|
|||
|
|
SHFILEINFO sfi = {0};
|
|||
|
|
HIMAGELIST hImageList = (HIMAGELIST)SHGetFileInfo(NULL,0,&sfi,sizeof(SHFILEINFO),SHGFI_SMALLICON | SHGFI_SYSICONINDEX);
|
|||
|
|
m_ImageList_Small = CImageList::FromHandle(hImageList);
|
|||
|
|
ImageList_Destroy(hImageList);
|
|||
|
|
}catch(...){
|
|||
|
|
OutputDebugStringA("======> m_ImageList_Small catch an error. \n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_bDragging = FALSE;
|
|||
|
|
m_bIsStop = FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CFileManagerDlg::~CFileManagerDlg()
|
|||
|
|
{
|
|||
|
|
m_Remote_Upload_Job.RemoveAll();
|
|||
|
|
if (m_ProgressCtrl)
|
|||
|
|
{
|
|||
|
|
m_ProgressCtrl->DestroyWindow();
|
|||
|
|
delete m_ProgressCtrl;
|
|||
|
|
}
|
|||
|
|
m_ProgressCtrl = NULL;
|
|||
|
|
m_ImageList_Large->Detach();
|
|||
|
|
m_ImageList_Small->Detach();
|
|||
|
|
|
|||
|
|
CoUninitialize();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::DoDataExchange(CDataExchange* pDX)
|
|||
|
|
{
|
|||
|
|
CDialog::DoDataExchange(pDX);
|
|||
|
|
DDX_Control(pDX, IDC_LIST_CLIENT, m_ControlList_Client);
|
|||
|
|
DDX_Control(pDX, IDC_LIST_SERVER, m_ControlList_Server);
|
|||
|
|
DDX_Control(pDX, IDC_COMBO_SERVER, m_ComboBox_Server);
|
|||
|
|
DDX_Control(pDX, IDC_COMBO_CLIENT, m_ComboBox_Client);
|
|||
|
|
DDX_Control(pDX, IDC_STATIC_FILE_SERVER, m_FileServerBarPos);
|
|||
|
|
DDX_Control(pDX, IDC_STATIC_FILE_CLIENT, m_FileClientBarPos);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
BEGIN_MESSAGE_MAP(CFileManagerDlg, CDialog)
|
|||
|
|
ON_WM_CLOSE()
|
|||
|
|
ON_NOTIFY(NM_DBLCLK, IDC_LIST_SERVER, &CFileManagerDlg::OnNMDblclkListServer)
|
|||
|
|
ON_CBN_SELCHANGE(IDC_COMBO_SERVER, &CFileManagerDlg::OnCbnSelchangeComboServer)
|
|||
|
|
ON_COMMAND(IDT_SERVER_FILE_PREV, &CFileManagerDlg::OnIdtServerPrev)
|
|||
|
|
|
|||
|
|
ON_COMMAND(IDT_SERVER_FILE_NEW_FOLDER, &CFileManagerDlg::OnIdtServerNewFolder)
|
|||
|
|
ON_COMMAND(IDT_SERVER_FILE_DELETE, &CFileManagerDlg::OnIdtServerDelete)
|
|||
|
|
ON_COMMAND(IDT_SERVER_FILE_STOP, &CFileManagerDlg::OnIdtServerStop)
|
|||
|
|
|
|||
|
|
ON_COMMAND(ID_VIEW_BIG_ICON, &CFileManagerDlg::OnViewBigIcon)
|
|||
|
|
ON_COMMAND(ID_VIEW_SMALL_ICON, &CFileManagerDlg::OnViewSmallIcon)
|
|||
|
|
ON_COMMAND(ID_VIEW_DETAIL, &CFileManagerDlg::OnViewDetail)
|
|||
|
|
ON_COMMAND(ID_VIEW_LIST, &CFileManagerDlg::OnViewList)
|
|||
|
|
ON_NOTIFY(NM_DBLCLK, IDC_LIST_CLIENT, &CFileManagerDlg::OnNMDblclkListClient)
|
|||
|
|
ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_SERVER, &CFileManagerDlg::OnLvnBegindragListServer)
|
|||
|
|
ON_WM_MOUSEMOVE()
|
|||
|
|
ON_WM_LBUTTONUP()
|
|||
|
|
ON_NOTIFY(NM_RCLICK, IDC_LIST_SERVER, &CFileManagerDlg::OnNMRClickListServer)
|
|||
|
|
ON_COMMAND(ID_OPERATION_SERVER_RUN, &CFileManagerDlg::OnOperationServerRun)
|
|||
|
|
ON_COMMAND(ID_OPERATION_RENAME, &CFileManagerDlg::OnOperationRename)
|
|||
|
|
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_SERVER, &CFileManagerDlg::OnLvnEndlabeleditListServer)
|
|||
|
|
ON_NOTIFY(NM_RCLICK, IDC_LIST_CLIENT, &CFileManagerDlg::OnNMRClickListClient)
|
|||
|
|
ON_COMMAND(ID_OPERATION_CLIENT_SHOW_RUN, &CFileManagerDlg::OnOperationClientShowRun)
|
|||
|
|
ON_COMMAND(ID_OPERATION_CLIENT_HIDE_RUN, &CFileManagerDlg::OnOperationClientHideRun)
|
|||
|
|
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_LIST_CLIENT, &CFileManagerDlg::OnLvnEndlabeleditListClient)
|
|||
|
|
ON_COMMAND(ID_OPERATION_COMPRESS, &CFileManagerDlg::OnOperationCompress)
|
|||
|
|
END_MESSAGE_MAP()
|
|||
|
|
|
|||
|
|
|
|||
|
|
// CFileManagerDlg <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::OnIdtServerPrev()
|
|||
|
|
{
|
|||
|
|
FixedServerFileList("..");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::OnIdtServerNewFolder()
|
|||
|
|
{
|
|||
|
|
if (m_Server_File_Path == "")
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
CEditDialog Dlg(this);
|
|||
|
|
if (Dlg.DoModal() == IDOK && Dlg.m_EditString.GetLength())
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|||
|
|
|
|||
|
|
CString strString;
|
|||
|
|
strString = m_Server_File_Path + Dlg.m_EditString + "\\";
|
|||
|
|
MakeSureDirectoryPathExists(strString.GetBuffer()); /*c:\Hello\ */
|
|||
|
|
FixedServerFileList(".");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::OnIdtServerStop()
|
|||
|
|
{
|
|||
|
|
m_bIsStop = TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::OnIdtServerDelete() //<2F><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
// m_bIsUpload = true; //<2F><><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flag<61><67><EFBFBD><EFBFBD>ֹͣ <20><>ǰ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
|
|||
|
|
CString strString;
|
|||
|
|
if (m_ControlList_Server.GetSelectedCount() > 1)
|
|||
|
|
strString.Format("ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> %d <20><>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", m_ControlList_Server.GetSelectedCount());
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CString strFileName = m_ControlList_Server.GetItemText(m_ControlList_Server.GetSelectionMark(), 0);
|
|||
|
|
|
|||
|
|
int iItem = m_ControlList_Server.GetSelectionMark(); //.. fff 1 Hello
|
|||
|
|
|
|||
|
|
if (iItem==-1)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
if (m_ControlList_Server.GetItemData(iItem) == 1)
|
|||
|
|
{
|
|||
|
|
strString.Format("ȷʵҪɾ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>С<EFBFBD>%s<><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", strFileName);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
strString.Format("ȷʵҪ<EFBFBD>ѡ<EFBFBD>%s<><73>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>?", strFileName);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (::MessageBox(m_hWnd, strString, "ȷ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>", MB_YESNO|MB_ICONQUESTION) == IDNO)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
EnableControl(FALSE);
|
|||
|
|
|
|||
|
|
POSITION Pos = m_ControlList_Server.GetFirstSelectedItemPosition();
|
|||
|
|
while(Pos)
|
|||
|
|
{
|
|||
|
|
int iItem = m_ControlList_Server.GetNextSelectedItem(Pos);
|
|||
|
|
CString strFileFullPath = m_Server_File_Path + m_ControlList_Server.GetItemText(iItem, 0);
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|||
|
|
if (m_ControlList_Server.GetItemData(iItem))
|
|||
|
|
{
|
|||
|
|
strFileFullPath += '\\';
|
|||
|
|
DeleteDirectory(strFileFullPath);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
DeleteFile(strFileFullPath);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
EnableControl(TRUE);
|
|||
|
|
|
|||
|
|
FixedServerFileList(".");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
BOOL CFileManagerDlg::DeleteDirectory(LPCTSTR strDirectoryFullPath)
|
|||
|
|
{
|
|||
|
|
WIN32_FIND_DATA wfd;
|
|||
|
|
char szBuffer[MAX_PATH] = {0};
|
|||
|
|
|
|||
|
|
wsprintf(szBuffer, "%s\\*.*", strDirectoryFullPath);
|
|||
|
|
|
|||
|
|
HANDLE hFind = FindFirstFile(szBuffer, &wfd);
|
|||
|
|
if (hFind == INVALID_HANDLE_VALUE) // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
return FALSE;
|
|||
|
|
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if (wfd.cFileName[0] != '.')
|
|||
|
|
{
|
|||
|
|
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|||
|
|
{
|
|||
|
|
char szv1[MAX_PATH];
|
|||
|
|
wsprintf(szv1, "%s\\%s", strDirectoryFullPath, wfd.cFileName);
|
|||
|
|
DeleteDirectory(szv1);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
char szv2[MAX_PATH];
|
|||
|
|
wsprintf(szv2, "%s\\%s", strDirectoryFullPath, wfd.cFileName);
|
|||
|
|
DeleteFile(szv2);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} while (FindNextFile(hFind, &wfd));
|
|||
|
|
|
|||
|
|
FindClose(hFind); // <20>رղ<D8B1><D5B2>Ҿ<EFBFBD><D2BE><EFBFBD>
|
|||
|
|
|
|||
|
|
if(!RemoveDirectory(strDirectoryFullPath))
|
|||
|
|
{
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CFileManagerDlg::MakeSureDirectoryPathExists(char* szDirectoryFullPath)
|
|||
|
|
{
|
|||
|
|
char* szTravel = NULL;
|
|||
|
|
char* szBuffer = NULL;
|
|||
|
|
DWORD dwAttributes;
|
|||
|
|
__try
|
|||
|
|
{
|
|||
|
|
szBuffer = (char*)malloc(sizeof(char)*(strlen(szDirectoryFullPath) + 1));
|
|||
|
|
|
|||
|
|
if(szBuffer == NULL)
|
|||
|
|
{
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strcpy(szBuffer, szDirectoryFullPath);
|
|||
|
|
|
|||
|
|
szTravel = szBuffer;
|
|||
|
|
|
|||
|
|
if (0)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
else if(*(szTravel+1) == ':')
|
|||
|
|
{
|
|||
|
|
szTravel++;
|
|||
|
|
szTravel++;
|
|||
|
|
if(*szTravel && (*szTravel == '\\'))
|
|||
|
|
{
|
|||
|
|
szTravel++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
while(*szTravel) //\Hello\World\Shit\0
|
|||
|
|
{
|
|||
|
|
if(*szTravel == '\\')
|
|||
|
|
{
|
|||
|
|
*szTravel = '\0';
|
|||
|
|
dwAttributes = GetFileAttributes(szBuffer); //<2F>鿴<EFBFBD>Ƿ<EFBFBD><C7B7>Ƿ<EFBFBD>Ŀ¼ Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(dwAttributes == 0xffffffff)
|
|||
|
|
{
|
|||
|
|
if(!CreateDirectory(szBuffer, NULL))
|
|||
|
|
{
|
|||
|
|
if(GetLastError() != ERROR_ALREADY_EXISTS)
|
|||
|
|
{
|
|||
|
|
free(szBuffer);
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if((dwAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
|
|||
|
|
{
|
|||
|
|
free(szBuffer);
|
|||
|
|
szBuffer = NULL;
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
*szTravel = '\\';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
szTravel = CharNext(szTravel);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
__except(EXCEPTION_EXECUTE_HANDLER)
|
|||
|
|
{
|
|||
|
|
if (szBuffer!=NULL)
|
|||
|
|
{
|
|||
|
|
free(szBuffer);
|
|||
|
|
|
|||
|
|
szBuffer = NULL;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (szBuffer!=NULL)
|
|||
|
|
{
|
|||
|
|
free(szBuffer);
|
|||
|
|
szBuffer = NULL;
|
|||
|
|
}
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CFileManagerDlg::PreTranslateMessage(MSG* pMsg)
|
|||
|
|
{
|
|||
|
|
return CDialog::PreTranslateMessage(pMsg);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnClose()
|
|||
|
|
{
|
|||
|
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
|||
|
|
m_ContextObject->v1 = 0;
|
|||
|
|
CancelIo((HANDLE)m_ContextObject->sClientSocket);
|
|||
|
|
closesocket(m_ContextObject->sClientSocket);
|
|||
|
|
CDialog::OnClose();
|
|||
|
|
//delete this; // <20>ͷ<EFBFBD><CDB7>ڴ<EFBFBD><DAB4><EFBFBD>Ӧ<EFBFBD>õģ<C3B5><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>2<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CFileManagerDlg::OnInitDialog()
|
|||
|
|
{
|
|||
|
|
CDialog::OnInitDialog();
|
|||
|
|
|
|||
|
|
CString strString;
|
|||
|
|
strString.Format("%s - Զ<><D4B6><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>", m_strClientIP);
|
|||
|
|
SetWindowText(strString);
|
|||
|
|
|
|||
|
|
if (!m_ToolBar_File_Server.Create(this, WS_CHILD |
|
|||
|
|
WS_VISIBLE | CBRS_ALIGN_ANY | CBRS_TOOLTIPS | CBRS_FLYBY, IDR_TOOLBAR_FILE_SERVER)
|
|||
|
|
||!m_ToolBar_File_Server.LoadToolBar(IDR_TOOLBAR_FILE_SERVER))
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
// m_ToolBar_File_Server.ModifyStyle(0, TBSTYLE_FLAT); //Fix for WinXP
|
|||
|
|
m_ToolBar_File_Server.LoadTrueColorToolBar
|
|||
|
|
(
|
|||
|
|
24, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
IDB_BITMAP_FILE,
|
|||
|
|
IDB_BITMAP_FILE,
|
|||
|
|
IDB_BITMAP_FILE //û<><C3BB><EFBFBD><EFBFBD>
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
m_ToolBar_File_Server.AddDropDownButton(this,IDT_SERVER_FILE_VIEW ,IDR_MENU_FILE_SERVER);
|
|||
|
|
|
|||
|
|
m_ToolBar_File_Server.SetButtonText(0,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"); //<2F><>λͼ<CEBB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
m_ToolBar_File_Server.SetButtonText(1,"<EFBFBD>鿴");
|
|||
|
|
m_ToolBar_File_Server.SetButtonText(2,"ɾ<EFBFBD><EFBFBD>");
|
|||
|
|
m_ToolBar_File_Server.SetButtonText(3,"<EFBFBD>½<EFBFBD>");
|
|||
|
|
m_ToolBar_File_Server.SetButtonText(5,"ֹͣ");
|
|||
|
|
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0); //<2F><>ʾ
|
|||
|
|
|
|||
|
|
RECT RectServer;
|
|||
|
|
m_FileServerBarPos.GetWindowRect(&RectServer);
|
|||
|
|
|
|||
|
|
m_FileServerBarPos.ShowWindow(SW_HIDE);
|
|||
|
|
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
m_ToolBar_File_Server.MoveWindow(&RectServer);
|
|||
|
|
|
|||
|
|
m_ControlList_Server.SetImageList(m_ImageList_Large, LVSIL_NORMAL);
|
|||
|
|
m_ControlList_Server.SetImageList(m_ImageList_Small, LVSIL_SMALL);
|
|||
|
|
|
|||
|
|
m_ControlList_Client.SetImageList(m_ImageList_Large, LVSIL_NORMAL);
|
|||
|
|
m_ControlList_Client.SetImageList(m_ImageList_Small, LVSIL_SMALL);
|
|||
|
|
|
|||
|
|
if (!m_StatusBar.Create(this) ||
|
|||
|
|
!m_StatusBar.SetIndicators(Indicators,
|
|||
|
|
sizeof(Indicators)/sizeof(UINT)))
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_StatusBar.SetPaneInfo(0, m_StatusBar.GetItemID(0), SBPS_STRETCH, NULL);
|
|||
|
|
m_StatusBar.SetPaneInfo(1, m_StatusBar.GetItemID(1), SBPS_NORMAL, 120);
|
|||
|
|
m_StatusBar.SetPaneInfo(2, m_StatusBar.GetItemID(2), SBPS_NORMAL, 50);
|
|||
|
|
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); //<2F><>ʾ״̬<D7B4><CCAC>
|
|||
|
|
|
|||
|
|
RECT ClientRect;
|
|||
|
|
GetClientRect(&ClientRect);
|
|||
|
|
|
|||
|
|
CRect Rect;
|
|||
|
|
Rect.top=ClientRect.bottom-25;
|
|||
|
|
Rect.left=0;
|
|||
|
|
Rect.right=ClientRect.right;
|
|||
|
|
Rect.bottom=ClientRect.bottom;
|
|||
|
|
|
|||
|
|
m_StatusBar.MoveWindow(Rect);
|
|||
|
|
|
|||
|
|
m_StatusBar.GetItemRect(1, &ClientRect);
|
|||
|
|
|
|||
|
|
ClientRect.bottom -= 1;
|
|||
|
|
|
|||
|
|
m_ProgressCtrl = new CProgressCtrl;
|
|||
|
|
m_ProgressCtrl->Create(PBS_SMOOTH | WS_VISIBLE, ClientRect, &m_StatusBar, 1);
|
|||
|
|
m_ProgressCtrl->SetRange(0, 100); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
|
|||
|
|
m_ProgressCtrl->SetPos(0); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰλ<C7B0><CEBB>
|
|||
|
|
|
|||
|
|
FixedServerDiskDriverList();
|
|||
|
|
FixedClientDiskDriverList();
|
|||
|
|
|
|||
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|||
|
|
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::FixedServerDiskDriverList()
|
|||
|
|
{
|
|||
|
|
CHAR *Travel = NULL;
|
|||
|
|
m_ControlList_Server.DeleteAllItems();
|
|||
|
|
while(m_ControlList_Server.DeleteColumn(0) != 0);
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>б<EFBFBD><D0B1><EFBFBD>Ϣ
|
|||
|
|
m_ControlList_Server.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 70);
|
|||
|
|
m_ControlList_Server.InsertColumn(1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_RIGHT, 85);
|
|||
|
|
m_ControlList_Server.InsertColumn(2, "<EFBFBD>ܴ<EFBFBD>С", LVCFMT_RIGHT, 80);
|
|||
|
|
m_ControlList_Server.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>", LVCFMT_RIGHT, 90);
|
|||
|
|
|
|||
|
|
m_ControlList_Server.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
|||
|
|
|
|||
|
|
GetLogicalDriveStrings(sizeof(m_szServerDiskDriverList),(LPSTR)m_szServerDiskDriverList); //c:\.d:\.
|
|||
|
|
Travel = m_szServerDiskDriverList;
|
|||
|
|
|
|||
|
|
CHAR szFileSystem[MAX_PATH]; //ntfs fat32
|
|||
|
|
unsigned __int64 ulHardDiskAmount = 0; //HardDisk
|
|||
|
|
unsigned __int64 ulHardDiskFreeSpace = 0;
|
|||
|
|
unsigned long ulHardDiskAmountMB = 0; // <20>ܴ<EFBFBD>С
|
|||
|
|
unsigned long ulHardDiskFreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
|
|||
|
|
|
|||
|
|
for (int i = 0; *Travel != '\0'; i++, Travel += lstrlen(Travel) + 1)
|
|||
|
|
{
|
|||
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
memset(szFileSystem, 0, sizeof(szFileSystem));
|
|||
|
|
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD>ϵͳ<CFB5><CDB3>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>С
|
|||
|
|
GetVolumeInformation(Travel, NULL, 0, NULL, NULL, NULL, szFileSystem, MAX_PATH);
|
|||
|
|
|
|||
|
|
ULONG ulFileSystemLength = lstrlen(szFileSystem) + 1;
|
|||
|
|
if (GetDiskFreeSpaceEx(Travel, (PULARGE_INTEGER)&ulHardDiskFreeSpace, (PULARGE_INTEGER)&ulHardDiskAmount, NULL))
|
|||
|
|
{
|
|||
|
|
ulHardDiskAmountMB = ulHardDiskAmount / 1024 / 1024;
|
|||
|
|
ulHardDiskFreeMB = ulHardDiskFreeSpace / 1024 / 1024;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
ulHardDiskAmountMB = 0;
|
|||
|
|
ulHardDiskFreeMB = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int iItem = m_ControlList_Server.InsertItem(i, Travel,GetServerIconIndex(Travel,GetFileAttributes(Travel))); //<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>ͼ<EFBFBD><CDBC>
|
|||
|
|
|
|||
|
|
m_ControlList_Server.SetItemData(iItem, 1);
|
|||
|
|
|
|||
|
|
SHFILEINFO sfi;
|
|||
|
|
SHGetFileInfo(Travel, FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
|||
|
|
m_ControlList_Server.SetItemText(iItem, 1, sfi.szTypeName);
|
|||
|
|
|
|||
|
|
CString strCount;
|
|||
|
|
strCount.Format("%10.1f GB", (float)ulHardDiskAmountMB / 1024);
|
|||
|
|
m_ControlList_Server.SetItemText(iItem, 2, strCount);
|
|||
|
|
strCount.Format("%10.1f GB", (float)ulHardDiskFreeMB / 1024);
|
|||
|
|
m_ControlList_Server.SetItemText(iItem, 3, strCount);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::FixedClientDiskDriverList()
|
|||
|
|
{
|
|||
|
|
m_ControlList_Client.DeleteAllItems();
|
|||
|
|
|
|||
|
|
m_ControlList_Client.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 70);
|
|||
|
|
m_ControlList_Client.InsertColumn(1, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_RIGHT, 85);
|
|||
|
|
m_ControlList_Client.InsertColumn(2, "<EFBFBD>ܴ<EFBFBD>С", LVCFMT_RIGHT, 80);
|
|||
|
|
m_ControlList_Client.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>", LVCFMT_RIGHT, 90);
|
|||
|
|
|
|||
|
|
m_ControlList_Client.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
|||
|
|
|
|||
|
|
char *Travel = NULL;
|
|||
|
|
Travel = (char *)m_szClientDiskDriverList; //<2F>Ѿ<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣͷ<CFA2><CDB7>1<EFBFBD><31><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
|
|
|||
|
|
int i = 0;
|
|||
|
|
ULONG ulIconIndex = 0;
|
|||
|
|
for (i = 0; Travel[i] != '\0';)
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (Travel[i] == 'A' || Travel[i] == 'B')
|
|||
|
|
{
|
|||
|
|
ulIconIndex = 6;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
switch (Travel[i + 1]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>鿴<EFBFBD><E9BFB4><EFBFBD>ض<EFBFBD>
|
|||
|
|
{
|
|||
|
|
case DRIVE_REMOVABLE:
|
|||
|
|
ulIconIndex = 2+5;
|
|||
|
|
break;
|
|||
|
|
case DRIVE_FIXED:
|
|||
|
|
ulIconIndex = 3+5;
|
|||
|
|
break;
|
|||
|
|
case DRIVE_REMOTE:
|
|||
|
|
ulIconIndex = 4+5;
|
|||
|
|
break;
|
|||
|
|
case DRIVE_CDROM:
|
|||
|
|
ulIconIndex = 9; //Win7Ϊ10
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
ulIconIndex = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 02E3F844 43 03 04 58 02 00 73 D7 00 00 B1 BE B5 D8 B4 C5 C5 CC 00 4E 54 46 53 00 44 C..X..s...<2E><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>.NTFS.D
|
|||
|
|
// 2E3F85E 03 04 20 03 00 FC 5B 00 00 B1 BE B5 D8 B4 C5 C5 CC 00 4E 54 46 53 00
|
|||
|
|
|
|||
|
|
CString strVolume;
|
|||
|
|
strVolume.Format("%c:\\", Travel[i]);//c:
|
|||
|
|
int iItem = m_ControlList_Client.InsertItem(i, strVolume,ulIconIndex);
|
|||
|
|
m_ControlList_Client.SetItemData(iItem, 1); //<2F><><EFBFBD><EFBFBD>ʾ
|
|||
|
|
|
|||
|
|
unsigned long ulHardDiskAmountMB = 0; // <20>ܴ<EFBFBD>С
|
|||
|
|
unsigned long ulHardDiskFreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
|
|||
|
|
memcpy(&ulHardDiskAmountMB, Travel + i + 2, 4);
|
|||
|
|
memcpy(&ulHardDiskFreeMB, Travel + i + 6, 4);
|
|||
|
|
CString strCount;
|
|||
|
|
strCount.Format("%10.1f GB", (float)ulHardDiskAmountMB / 1024);
|
|||
|
|
m_ControlList_Client.SetItemText(iItem, 2, strCount);
|
|||
|
|
strCount.Format("%10.1f GB", (float)ulHardDiskFreeMB / 1024);
|
|||
|
|
m_ControlList_Client.SetItemText(iItem, 3, strCount);
|
|||
|
|
|
|||
|
|
i += 10; //10
|
|||
|
|
|
|||
|
|
CString strTypeName;
|
|||
|
|
strTypeName = Travel + i;
|
|||
|
|
m_ControlList_Client.SetItemText(iItem, 1, strTypeName);
|
|||
|
|
i += strlen(Travel + i) + 1;
|
|||
|
|
i += strlen(Travel + i) + 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnNMDblclkListServer(NMHDR *pNMHDR, LRESULT *pResult)
|
|||
|
|
{
|
|||
|
|
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
|
|||
|
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ӿؼ<D3BF>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
if (m_ControlList_Server.GetSelectedCount() == 0 || m_ControlList_Server.GetItemData(m_ControlList_Server.GetSelectionMark()) != 1)
|
|||
|
|
return;
|
|||
|
|
|
|||
|
|
FixedServerFileList();
|
|||
|
|
*pResult = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::FixedServerFileList(CString strDirectory)
|
|||
|
|
{
|
|||
|
|
if (strDirectory.GetLength() == 0)
|
|||
|
|
{
|
|||
|
|
int iItem = m_ControlList_Server.GetSelectionMark();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>еģ<D0B5><C4A3><EFBFBD>Ŀ¼
|
|||
|
|
if (iItem != -1)
|
|||
|
|
{
|
|||
|
|
if (m_ControlList_Server.GetItemData(iItem) == 1) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
strDirectory = m_ControlList_Server.GetItemText(iItem, 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>õ<EFBFBD>·<EFBFBD><C2B7>
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_ComboBox_Server.GetWindowText(m_Server_File_Path);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (strDirectory == "..")
|
|||
|
|
{
|
|||
|
|
m_Server_File_Path = GetParentDirectory(m_Server_File_Path);
|
|||
|
|
}
|
|||
|
|
// ˢ<>µ<EFBFBD>ǰ<EFBFBD><C7B0>
|
|||
|
|
else if (strDirectory != ".") //c:\ 1
|
|||
|
|
{
|
|||
|
|
/* c:\ */
|
|||
|
|
m_Server_File_Path += strDirectory;
|
|||
|
|
if(m_Server_File_Path.Right(1) != "\\")
|
|||
|
|
{
|
|||
|
|
m_Server_File_Path += "\\";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>Ŀ¼,<2C><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>б<EFBFBD>
|
|||
|
|
if (m_Server_File_Path.GetLength() == 0)
|
|||
|
|
{
|
|||
|
|
FixedServerDiskDriverList();
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_ComboBox_Server.InsertString(0, m_Server_File_Path);
|
|||
|
|
m_ComboBox_Server.SetCurSel(0);
|
|||
|
|
|
|||
|
|
m_ControlList_Server.DeleteAllItems();
|
|||
|
|
while(m_ControlList_Server.DeleteColumn(0) != 0); //ɾ<><C9BE>
|
|||
|
|
m_ControlList_Server.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 200);
|
|||
|
|
m_ControlList_Server.InsertColumn(1, "<EFBFBD><EFBFBD>С", LVCFMT_LEFT, 100);
|
|||
|
|
m_ControlList_Server.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100);
|
|||
|
|
m_ControlList_Server.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 115);
|
|||
|
|
|
|||
|
|
int iItemIndex = 0;
|
|||
|
|
m_ControlList_Server.SetItemData(m_ControlList_Server.InsertItem(iItemIndex++, "..",
|
|||
|
|
GetServerIconIndex(NULL, FILE_ATTRIBUTE_DIRECTORY)),1);
|
|||
|
|
|
|||
|
|
// i Ϊ 0 ʱ<><CAB1>Ŀ¼<C4BF><C2BC>i Ϊ 1ʱ<31><CAB1><EFBFBD>ļ<EFBFBD>
|
|||
|
|
for (int i = 0; i < 2; i++)
|
|||
|
|
{
|
|||
|
|
CFileFind FindFile;
|
|||
|
|
BOOL bContinue;
|
|||
|
|
bContinue = FindFile.FindFile(m_Server_File_Path + "*.*"); //c:\*.* //.. . 1.txt
|
|||
|
|
while (bContinue)
|
|||
|
|
{
|
|||
|
|
bContinue = FindFile.FindNextFile();
|
|||
|
|
if (FindFile.IsDots()) // .
|
|||
|
|
continue;
|
|||
|
|
BOOL bIsInsert = !FindFile.IsDirectory() == i;
|
|||
|
|
|
|||
|
|
if (!bIsInsert)
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
int iItem = m_ControlList_Server.InsertItem(iItemIndex++, FindFile.GetFileName(),
|
|||
|
|
GetServerIconIndex(FindFile.GetFileName(), GetFileAttributes(FindFile.GetFilePath())));
|
|||
|
|
m_ControlList_Server.SetItemData(iItem, FindFile.IsDirectory());
|
|||
|
|
SHFILEINFO sfi;
|
|||
|
|
SHGetFileInfo(FindFile.GetFileName(), FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO),
|
|||
|
|
SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
|||
|
|
|
|||
|
|
if (FindFile.IsDirectory())
|
|||
|
|
{
|
|||
|
|
m_ControlList_Server.SetItemText(iItem, 2, "<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_ControlList_Server.SetItemText(iItem,2, sfi.szTypeName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CString strFileLength;
|
|||
|
|
strFileLength.Format("%10d KB", FindFile.GetLength() / 1024 + (FindFile.GetLength() % 1024 ? 1 : 0));
|
|||
|
|
m_ControlList_Server.SetItemText(iItem, 1, strFileLength);
|
|||
|
|
CTime Time;
|
|||
|
|
FindFile.GetLastWriteTime(Time);
|
|||
|
|
m_ControlList_Server.SetItemText(iItem, 3, Time.Format("%Y-%m-%d %H:%M"));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnCbnSelchangeComboServer()
|
|||
|
|
{
|
|||
|
|
int iIndex = m_ComboBox_Server.GetCurSel();
|
|||
|
|
CString strString;
|
|||
|
|
m_ComboBox_Server.GetLBText(iIndex,strString);
|
|||
|
|
|
|||
|
|
m_ComboBox_Server.SetWindowText(strString);
|
|||
|
|
|
|||
|
|
FixedServerFileList();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnViewBigIcon()
|
|||
|
|
{
|
|||
|
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_ControlList_Server.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnViewSmallIcon()
|
|||
|
|
{
|
|||
|
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_ControlList_Server.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnViewDetail()
|
|||
|
|
{
|
|||
|
|
m_ControlList_Server.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnViewList()
|
|||
|
|
{
|
|||
|
|
m_ControlList_Server.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnNMDblclkListClient(NMHDR *pNMHDR, LRESULT *pResult)
|
|||
|
|
{
|
|||
|
|
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
|
|||
|
|
|
|||
|
|
if (m_ControlList_Client.GetSelectedCount() == 0 || m_ControlList_Client.GetItemData(m_ControlList_Client.GetSelectionMark()) != 1)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
GetClientFileList(); //<2F><><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
*pResult = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::GetClientFileList(CString strDirectory)
|
|||
|
|
{
|
|||
|
|
if (strDirectory.GetLength() == 0) //<2F><><EFBFBD>̾<EFBFBD>
|
|||
|
|
{
|
|||
|
|
int iItem = m_ControlList_Client.GetSelectionMark();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD>еģ<D0B5><C4A3><EFBFBD>Ŀ¼
|
|||
|
|
if (iItem != -1)
|
|||
|
|
{
|
|||
|
|
if (m_ControlList_Client.GetItemData(iItem) == 1)
|
|||
|
|
{
|
|||
|
|
strDirectory = m_ControlList_Client.GetItemText(iItem, 0); /* D:\ */
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
else if (strDirectory != ".")
|
|||
|
|
{
|
|||
|
|
m_Client_File_Path += strDirectory;
|
|||
|
|
if(m_Client_File_Path.Right(1) != "\\")
|
|||
|
|
{
|
|||
|
|
m_Client_File_Path += "\\";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (m_Client_File_Path.GetLength() == 0)
|
|||
|
|
{
|
|||
|
|
// FixedRemoteDriveList();
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ULONG ulLength = m_Client_File_Path.GetLength() + 2;
|
|||
|
|
BYTE *szBuffer = (BYTE *)new BYTE[ulLength];
|
|||
|
|
//<2F><>COMMAND_LIST_FILES <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ƶˣ<C6B6><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
szBuffer[0] = COMMAND_LIST_FILES;
|
|||
|
|
memcpy(szBuffer + 1, m_Client_File_Path.GetBuffer(0), ulLength - 1);
|
|||
|
|
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, ulLength);
|
|||
|
|
delete[] szBuffer;
|
|||
|
|
szBuffer = NULL;
|
|||
|
|
|
|||
|
|
// m_Remote_Directory_ComboBox.InsertString(0, m_Remote_Path);
|
|||
|
|
// m_Remote_Directory_ComboBox.SetCurSel(0);
|
|||
|
|
|
|||
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_ControlList_Client.EnableWindow(FALSE);
|
|||
|
|
m_ProgressCtrl->SetPos(0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::OnReceiveComplete()
|
|||
|
|
{
|
|||
|
|
if (m_ContextObject==NULL)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
switch(m_ContextObject->InDeCompressedBuffer.GetBuffer()[0])
|
|||
|
|
{
|
|||
|
|
case TOKEN_FILE_LIST:
|
|||
|
|
{
|
|||
|
|
FixedClientFileList(m_ContextObject->InDeCompressedBuffer.GetBuffer(),
|
|||
|
|
m_ContextObject->InDeCompressedBuffer.GetBufferLength() - 1);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case TOKEN_DATA_CONTINUE:
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
SendFileData();
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case TOKEN_GET_TRANSFER_MODE:
|
|||
|
|
{
|
|||
|
|
SendTransferMode();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::SendTransferMode() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض˷<D8B6><CBB7>͵<EFBFBD><CDB5>ļ<EFBFBD><C4BC>ڱ<EFBFBD><DAB1>ض<EFBFBD><D8B6>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>
|
|||
|
|
{
|
|||
|
|
CFileTransferModeDlg Dlg(this);
|
|||
|
|
Dlg.m_strFileName = m_strDestFileFullPath;
|
|||
|
|
switch (Dlg.DoModal())
|
|||
|
|
{
|
|||
|
|
case IDC_OVERWRITE:
|
|||
|
|
m_ulTransferMode = TRANSFER_MODE_OVERWRITE;
|
|||
|
|
break;
|
|||
|
|
case IDC_OVERWRITE_ALL:
|
|||
|
|
m_ulTransferMode = TRANSFER_MODE_OVERWRITE_ALL;
|
|||
|
|
break;
|
|||
|
|
case IDC_JUMP:
|
|||
|
|
m_ulTransferMode = TRANSFER_MODE_JUMP;
|
|||
|
|
break;
|
|||
|
|
case IDC_JUMP_ALL:
|
|||
|
|
m_ulTransferMode = TRANSFER_MODE_JUMP_ALL;
|
|||
|
|
break;
|
|||
|
|
case IDCANCEL:
|
|||
|
|
m_ulTransferMode = TRANSFER_MODE_CANCEL;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (m_ulTransferMode == TRANSFER_MODE_CANCEL)
|
|||
|
|
{
|
|||
|
|
// m_bIsStop = true;
|
|||
|
|
EndCopyServerToClient();
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BYTE bToken[5];
|
|||
|
|
bToken[0] = COMMAND_SET_TRANSFER_MODE;
|
|||
|
|
memcpy(bToken + 1, &m_ulTransferMode, sizeof(m_ulTransferMode));
|
|||
|
|
m_iocpServer->OnClientPreSending(m_ContextObject, (unsigned char *)&bToken, sizeof(bToken));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::SendFileData()
|
|||
|
|
{
|
|||
|
|
FILE_SIZE *FileSize = (FILE_SIZE *)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1));
|
|||
|
|
LONG dwOffsetHigh = FileSize->dwSizeHigh ; //0
|
|||
|
|
LONG dwOffsetLow = FileSize->dwSizeLow; //0
|
|||
|
|
|
|||
|
|
m_ulCounter = MAKEINT64(FileSize->dwSizeLow, FileSize->dwSizeHigh); //0
|
|||
|
|
|
|||
|
|
ShowProgress(); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
if (m_ulCounter == m_OperatingFileLength||m_bIsStop)
|
|||
|
|
{
|
|||
|
|
EndCopyServerToClient(); //<2F><><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><C2B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
HANDLE hFile;
|
|||
|
|
hFile = CreateFile(m_strSourFileFullPath.GetBuffer(0), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
|||
|
|
if (hFile == INVALID_HANDLE_VALUE)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SetFilePointer(hFile, dwOffsetLow, &dwOffsetHigh, FILE_BEGIN); //8192 4G 300
|
|||
|
|
|
|||
|
|
int iHeadLength = 9; // 1 + 4 + 4 <20><><EFBFBD>ݰ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ϊ<EFBFBD>̶<EFBFBD><CCB6><EFBFBD>9
|
|||
|
|
|
|||
|
|
DWORD dwNumberOfBytesToRead = MAX_SEND_BUFFER - iHeadLength;
|
|||
|
|
DWORD dwNumberOfBytesRead = 0;
|
|||
|
|
BYTE *szBuffer = (BYTE *)LocalAlloc(LPTR, MAX_SEND_BUFFER);
|
|||
|
|
|
|||
|
|
if (szBuffer==NULL)
|
|||
|
|
{
|
|||
|
|
CloseHandle(hFile);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
szBuffer[0] = COMMAND_FILE_DATA;
|
|||
|
|
|
|||
|
|
memcpy(szBuffer + 1, &dwOffsetHigh, sizeof(dwOffsetHigh));
|
|||
|
|
memcpy(szBuffer + 5, &dwOffsetLow, sizeof(dwOffsetLow)); //flag 0000 00 40 20 20
|
|||
|
|
|
|||
|
|
ReadFile(hFile, szBuffer + iHeadLength, dwNumberOfBytesToRead, &dwNumberOfBytesRead, NULL);
|
|||
|
|
CloseHandle(hFile);
|
|||
|
|
|
|||
|
|
if (dwNumberOfBytesRead > 0)
|
|||
|
|
{
|
|||
|
|
ULONG ulLength = dwNumberOfBytesRead + iHeadLength;
|
|||
|
|
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, ulLength);
|
|||
|
|
}
|
|||
|
|
LocalFree(szBuffer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::FixedClientFileList(BYTE *szBuffer, ULONG ulLength)
|
|||
|
|
{
|
|||
|
|
// <20>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_ControlList_Client.DeleteAllItems();
|
|||
|
|
while(m_ControlList_Client.DeleteColumn(0) != 0);
|
|||
|
|
m_ControlList_Client.InsertColumn(0, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 200);
|
|||
|
|
m_ControlList_Client.InsertColumn(1, "<EFBFBD><EFBFBD>С", LVCFMT_LEFT, 100);
|
|||
|
|
m_ControlList_Client.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100);
|
|||
|
|
m_ControlList_Client.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 115);
|
|||
|
|
|
|||
|
|
int iItemIndex = 0;
|
|||
|
|
m_ControlList_Client.SetItemData(m_ControlList_Client.InsertItem(iItemIndex++, "..", GetServerIconIndex(NULL, FILE_ATTRIBUTE_DIRECTORY)),1);
|
|||
|
|
/*
|
|||
|
|
ListView <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD>SetRedraw(FALSE)
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD>º<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SetRedraw(TRUE)
|
|||
|
|
*/
|
|||
|
|
//m_list_remote.SetRedraw(FALSE);
|
|||
|
|
|
|||
|
|
if (ulLength != 0)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
|||
|
|
for (int i = 0; i < 2; i++)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Token //[Flag 1 HelloWorld\0<><30>С <20><>С ʱ<><CAB1> ʱ<><CAB1> 0 1.txt\0 <20><>С <20><>С ʱ<><CAB1> ʱ<><CAB1>]
|
|||
|
|
char *szTravel = (char *)(szBuffer + 1);
|
|||
|
|
|
|||
|
|
//[1 HelloWorld\0<><30>С <20><>С ʱ<><CAB1> ʱ<><CAB1> 0 1.txt\0 <20><>С <20><>С ʱ<><CAB1> ʱ<><CAB1>]
|
|||
|
|
for(char *szBase = szTravel; szTravel - szBase < ulLength - 1;)
|
|||
|
|
{
|
|||
|
|
char *szFileName = NULL;
|
|||
|
|
DWORD dwFileSizeHigh = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ֽڴ<D6BD>С
|
|||
|
|
DWORD dwFileSizeLow = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ֽڴ<D6BD>С
|
|||
|
|
int iItem = 0;
|
|||
|
|
bool bIsInsert = false;
|
|||
|
|
FILETIME FileTime;
|
|||
|
|
|
|||
|
|
int iType = *szTravel ? FILE_ATTRIBUTE_DIRECTORY : FILE_ATTRIBUTE_NORMAL;
|
|||
|
|
// i Ϊ 0 ʱ<><CAB1><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC>iΪ1ʱ<31><CAB1><EFBFBD>ļ<EFBFBD>
|
|||
|
|
bIsInsert = !(iType == FILE_ATTRIBUTE_DIRECTORY) == i;
|
|||
|
|
|
|||
|
|
//0==1 0==0 !1 0
|
|||
|
|
|
|||
|
|
////[HelloWorld\0<><30>С <20><>С ʱ<><CAB1> ʱ<><CAB1> 0 1.txt\0 <20><>С <20><>С ʱ<><CAB1> ʱ<><CAB1>]
|
|||
|
|
szFileName = ++szTravel;
|
|||
|
|
|
|||
|
|
if (bIsInsert)
|
|||
|
|
{
|
|||
|
|
iItem = m_ControlList_Client.InsertItem(iItemIndex++, szFileName, GetServerIconIndex(szFileName, iType));
|
|||
|
|
m_ControlList_Client.SetItemData(iItem, iType == FILE_ATTRIBUTE_DIRECTORY); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
SHFILEINFO sfi;
|
|||
|
|
SHGetFileInfo(szFileName, FILE_ATTRIBUTE_NORMAL | iType, &sfi,sizeof(SHFILEINFO),
|
|||
|
|
SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
|
|||
|
|
m_ControlList_Client.SetItemText(iItem, 2, sfi.szTypeName);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>õ<EFBFBD><C3B5>ļ<EFBFBD><C4BC><EFBFBD>С
|
|||
|
|
szTravel += strlen(szFileName) + 1;
|
|||
|
|
if (bIsInsert)
|
|||
|
|
{
|
|||
|
|
memcpy(&dwFileSizeHigh,szTravel, 4);
|
|||
|
|
memcpy(&dwFileSizeLow, szTravel + 4, 4);
|
|||
|
|
CString strFileSize;
|
|||
|
|
strFileSize.Format("%10d KB", (dwFileSizeHigh * (MAXDWORD+1)) / 1024 + dwFileSizeLow / 1024 + (dwFileSizeLow % 1024 ? 1 : 0));
|
|||
|
|
m_ControlList_Client.SetItemText(iItem, 1, strFileSize);
|
|||
|
|
memcpy(&FileTime, szTravel + 8, sizeof(FILETIME));
|
|||
|
|
CTime Time(FileTime);
|
|||
|
|
m_ControlList_Client.SetItemText(iItem, 3, Time.Format("%Y-%m-%d %H:%M"));
|
|||
|
|
}
|
|||
|
|
szTravel += 16;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// m_list_remote.SetRedraw(TRUE);
|
|||
|
|
// <20>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
m_ControlList_Client.EnableWindow(TRUE);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6>ض˽<D8B6><CBBD>п<EFBFBD><D0BF><EFBFBD>
|
|||
|
|
void CFileManagerDlg::OnLvnBegindragListServer(NMHDR *pNMHDR, LRESULT *pResult)
|
|||
|
|
{
|
|||
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|||
|
|
|
|||
|
|
if (m_Client_File_Path.IsEmpty()||m_Server_File_Path.IsEmpty())
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// m_ulDragIndex = pNMListView->iItem; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
|
|||
|
|
|
|||
|
|
if(m_ControlList_Server.GetSelectedCount() > 1) //<2F>任<EFBFBD><E4BBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ק
|
|||
|
|
{
|
|||
|
|
m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_MDRAG);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_hCursor = AfxGetApp()->LoadCursor(IDC_CURSOR_DRAG);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m_bDragging = TRUE;
|
|||
|
|
m_DragControlList = &m_ControlList_Server;
|
|||
|
|
m_DropControlList = &m_ControlList_Server;
|
|||
|
|
|
|||
|
|
SetCapture();
|
|||
|
|
*pResult = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnMouseMove(UINT nFlags, CPoint point)
|
|||
|
|
{
|
|||
|
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
|||
|
|
if (m_bDragging) //<2F><><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ק<EFBFBD><D7A7><EFBFBD><EFBFBD>Ȥ
|
|||
|
|
{
|
|||
|
|
CPoint Point(point); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
ClientToScreen(&Point); //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>Ļ<EFBFBD><C4BB>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>ھ<EFBFBD><DABE><EFBFBD>
|
|||
|
|
CWnd* pDropWnd = WindowFromPoint(Point); //ֵ<><D6B5><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> <20><>û<EFBFBD>пؼ<D0BF>
|
|||
|
|
|
|||
|
|
if(pDropWnd->IsKindOf(RUNTIME_CLASS (CListCtrl))) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵĴ<C7B5><C4B4>ڷ<EFBFBD>Χ<EFBFBD><CEA7>
|
|||
|
|
{
|
|||
|
|
SetCursor(m_hCursor);
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
SetCursor(LoadCursor(NULL,IDC_NO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDialog::OnMouseMove(nFlags, point);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnLButtonUp(UINT nFlags, CPoint point)
|
|||
|
|
{
|
|||
|
|
if (m_bDragging)
|
|||
|
|
{
|
|||
|
|
ReleaseCapture(); //<2F>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|||
|
|
|
|||
|
|
m_bDragging = FALSE;
|
|||
|
|
|
|||
|
|
CPoint Point(point); //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>
|
|||
|
|
ClientToScreen (&Point); //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD>û<EFBFBD><C3BB>Ĵ<EFBFBD><C4B4>ڵ<EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
|
|||
|
|
CWnd* DropWnd = WindowFromPoint (Point); //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ؼ<DEBF>
|
|||
|
|
|
|||
|
|
if (DropWnd->IsKindOf (RUNTIME_CLASS (CListCtrl))) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ListControl
|
|||
|
|
{
|
|||
|
|
m_DropControlList = (CListCtrl*)DropWnd; //<2F><><EFBFBD>浱ǰ<E6B5B1>Ĵ<EFBFBD><C4B4>ھ<EFBFBD><DABE><EFBFBD>
|
|||
|
|
|
|||
|
|
DropItemOnList(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDialog::OnLButtonUp(nFlags, point);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::DropItemOnList()
|
|||
|
|
{
|
|||
|
|
if (m_DragControlList==m_DropControlList)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ((CWnd *)m_DropControlList == &m_ControlList_Server)
|
|||
|
|
{
|
|||
|
|
// m_nDropIndex = m_list_local.GetSelectionMark();
|
|||
|
|
// OnIdtRemoteCopy();
|
|||
|
|
}
|
|||
|
|
else if ((CWnd *)m_DropControlList == &m_ControlList_Client)
|
|||
|
|
{
|
|||
|
|
//m_nDropIndex = m_list_remote.GetSelectionMark();
|
|||
|
|
OnCopyServerToClient();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD>
|
|||
|
|
//m_nDropIndex = -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::OnCopyServerToClient() //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˵<D8B6><CBB5><EFBFBD><EFBFBD>ض<EFBFBD>
|
|||
|
|
{
|
|||
|
|
m_Remote_Upload_Job.RemoveAll();
|
|||
|
|
POSITION Pos = m_ControlList_Server.GetFirstSelectedItemPosition();
|
|||
|
|
while(Pos)
|
|||
|
|
{
|
|||
|
|
int iItem = m_ControlList_Server.GetNextSelectedItem(Pos);
|
|||
|
|
CString strFileFullPath = NULL;
|
|||
|
|
|
|||
|
|
if (0)
|
|||
|
|
//if (m_IsLocalFinding)
|
|||
|
|
{/* "2015-02-09 12:550 .-. Deja Ver (Ft. Tony Dize).mp3" */
|
|||
|
|
|
|||
|
|
//strFileName = m_ControlList_Server.GetItemText(iItem, 3) + m_list_local.GetItemText(nItem, 0);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
strFileFullPath = m_Server_File_Path + m_ControlList_Server.GetItemText(iItem, 0);
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼
|
|||
|
|
if (m_ControlList_Server.GetItemData(iItem))
|
|||
|
|
{
|
|||
|
|
strFileFullPath += '\\';
|
|||
|
|
FixedServerToClientDirectory(strFileFullPath.GetBuffer(0));
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>ӵ<EFBFBD><D3B5>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȥ
|
|||
|
|
HANDLE hFile = CreateFile(strFileFullPath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,
|
|||
|
|
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
|
|||
|
|
|
|||
|
|
if (hFile==INVALID_HANDLE_VALUE)
|
|||
|
|
{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
m_Remote_Upload_Job.AddTail(strFileFullPath);
|
|||
|
|
|
|||
|
|
CloseHandle(hFile);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (m_Remote_Upload_Job.IsEmpty())
|
|||
|
|
{
|
|||
|
|
::MessageBox(m_hWnd, "<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", MB_OK|MB_ICONWARNING);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
EnableControl(FALSE);
|
|||
|
|
SendToClientJob(); //<2F><><EFBFBD>͵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CFileManagerDlg::FixedServerToClientDirectory(LPCTSTR szDircetoryFullPath)
|
|||
|
|
{
|
|||
|
|
CHAR szBuffer[MAX_PATH];
|
|||
|
|
CHAR *szSlash = NULL;
|
|||
|
|
memset(szBuffer, 0, sizeof(szBuffer));
|
|||
|
|
|
|||
|
|
if (szDircetoryFullPath[strlen(szDircetoryFullPath) - 1] != '\\')
|
|||
|
|
szSlash = "\\";
|
|||
|
|
else
|
|||
|
|
szSlash = "";
|
|||
|
|
|
|||
|
|
sprintf(szBuffer, "%s%s*.*", szDircetoryFullPath, szSlash);
|
|||
|
|
|
|||
|
|
WIN32_FIND_DATA wfd;
|
|||
|
|
HANDLE hFind = FindFirstFile(szBuffer, &wfd); //C;|1\*.*
|
|||
|
|
if (hFind == INVALID_HANDLE_VALUE) // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
return FALSE;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if (wfd.cFileName[0] == '.')
|
|||
|
|
continue; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼ '.'<27><>'..'
|
|||
|
|
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|||
|
|
{
|
|||
|
|
CHAR szv1[MAX_PATH];
|
|||
|
|
sprintf(szv1, "%s%s%s", szDircetoryFullPath,szSlash, wfd.cFileName);
|
|||
|
|
FixedServerToClientDirectory(szv1); // <20><><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC><EFBFBD>еݹ<D0B5>
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
CString strFileFullPath;
|
|||
|
|
strFileFullPath.Format("%s%s%s", szDircetoryFullPath, szSlash, wfd.cFileName);
|
|||
|
|
m_Remote_Upload_Job.AddTail(strFileFullPath);
|
|||
|
|
// <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
|
|||
|
|
}
|
|||
|
|
} while (FindNextFile(hFind, &wfd));
|
|||
|
|
FindClose(hFind); // <20>رղ<D8B1><D5B2>Ҿ<EFBFBD><D2BE><EFBFBD>
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::EndCopyServerToClient() //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>оͻָ<CDBB><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
m_ulCounter = 0;
|
|||
|
|
m_OperatingFileLength = 0;
|
|||
|
|
|
|||
|
|
ShowProgress();
|
|||
|
|
if (m_Remote_Upload_Job.IsEmpty()|| m_bIsStop)
|
|||
|
|
{
|
|||
|
|
m_Remote_Upload_Job.RemoveAll();
|
|||
|
|
m_bIsStop = FALSE;
|
|||
|
|
EnableControl(TRUE);
|
|||
|
|
m_ulTransferMode = TRANSFER_MODE_NORMAL;
|
|||
|
|
GetClientFileList(".");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Sleep(5);
|
|||
|
|
|
|||
|
|
SendToClientJob();
|
|||
|
|
}
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BOOL CFileManagerDlg::SendToClientJob() //<2F><><EFBFBD><EFBFBD><EFBFBD>ض˵<D8B6><CBB5><EFBFBD><EFBFBD>ض˵ķ<CBB5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (m_Remote_Upload_Job.IsEmpty())
|
|||
|
|
return FALSE;
|
|||
|
|
|
|||
|
|
CString strDestDirectory = m_Client_File_Path;
|
|||
|
|
|
|||
|
|
m_strSourFileFullPath = m_Remote_Upload_Job.GetHead(); //<2F><><EFBFBD>õ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
DWORD dwSizeHigh;
|
|||
|
|
DWORD dwSizeLow;
|
|||
|
|
// 1 <20>ֽ<EFBFBD>token, 8<>ֽڴ<D6BD>С, <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>, '\0'
|
|||
|
|
HANDLE hFile;
|
|||
|
|
CString strString = m_strSourFileFullPath; // Զ<><D4B6><EFBFBD>ļ<EFBFBD>
|
|||
|
|
|
|||
|
|
// <20>õ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>浽<EFBFBD><E6B5BD>Զ<EFBFBD>̵<EFBFBD><CCB5>ļ<EFBFBD>·<EFBFBD><C2B7>
|
|||
|
|
strString.Replace(m_Server_File_Path, m_Client_File_Path); //D:1.txt E:1.txt
|
|||
|
|
m_strDestFileFullPath = strString; //<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
hFile = CreateFile(m_strSourFileFullPath.GetBuffer(0), GENERIC_READ, FILE_SHARE_READ,
|
|||
|
|
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ĵ<EFBFBD>С
|
|||
|
|
if (hFile == INVALID_HANDLE_VALUE)
|
|||
|
|
{
|
|||
|
|
return FALSE;
|
|||
|
|
}
|
|||
|
|
dwSizeLow = GetFileSize (hFile, &dwSizeHigh);
|
|||
|
|
|
|||
|
|
m_OperatingFileLength = (dwSizeHigh * (MAXDWORD+1)) + dwSizeLow;
|
|||
|
|
CloseHandle(hFile);
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
ULONG ulLength =strString.GetLength() + 10;
|
|||
|
|
BYTE *szBuffer = (BYTE *)LocalAlloc(LPTR, ulLength);
|
|||
|
|
memset(szBuffer, 0, ulLength);
|
|||
|
|
|
|||
|
|
szBuffer[0] = COMMAND_FILE_SIZE;
|
|||
|
|
|
|||
|
|
//[Flag 0001 0001 E:\1.txt\0 ]
|
|||
|
|
|
|||
|
|
//<2F>ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD>Ϣ COMMAND_FILE_SIZE <20><><EFBFBD>ض˻<D8B6>ִ<EFBFBD><D6B4>CreateLocalRecvFile<6C><65><EFBFBD><EFBFBD>
|
|||
|
|
//<2F>Ӷ<EFBFBD><D3B6>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ھͻ<DABE><CDBB><EFBFBD><EFBFBD>յ<EFBFBD>
|
|||
|
|
// TOKEN_GET_TRANSFER_MODE
|
|||
|
|
//<2F><>һ<EFBFBD><D2BB><EFBFBD>DZ<EFBFBD><C7B1>ض˵<D8B6><CBB5><EFBFBD>GetFileData<74><61><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>յ<EFBFBD>TOKEN_DATA_CONTINUE
|
|||
|
|
|
|||
|
|
memcpy(szBuffer + 1, &dwSizeHigh, sizeof(DWORD));
|
|||
|
|
memcpy(szBuffer + 5, &dwSizeLow, sizeof(DWORD));
|
|||
|
|
|
|||
|
|
memcpy(szBuffer + 9, strString.GetBuffer(0), strString.GetLength() + 1);
|
|||
|
|
|
|||
|
|
m_iocpServer->OnClientPreSending(m_ContextObject,szBuffer,ulLength);
|
|||
|
|
|
|||
|
|
LocalFree(szBuffer);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD>Լ<EFBFBD>
|
|||
|
|
m_Remote_Upload_Job.RemoveHead();
|
|||
|
|
return TRUE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnNMRClickListServer(NMHDR *pNMHDR, LRESULT *pResult)
|
|||
|
|
{
|
|||
|
|
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
|
|||
|
|
|
|||
|
|
CMenu Menu;
|
|||
|
|
Menu.LoadMenu(IDR_MENU_FILE_OPERATION);
|
|||
|
|
CMenu* SubMenu = Menu.GetSubMenu(0);
|
|||
|
|
CPoint Point;
|
|||
|
|
GetCursorPos(&Point);
|
|||
|
|
SubMenu->DeleteMenu(2, MF_BYPOSITION);
|
|||
|
|
if (m_ControlList_Server.GetSelectedCount() == 0)
|
|||
|
|
{
|
|||
|
|
int iCount = SubMenu->GetMenuItemCount();
|
|||
|
|
for (int i = 0; i < iCount; i++)
|
|||
|
|
{
|
|||
|
|
SubMenu->EnableMenuItem(i, MF_BYPOSITION | MF_GRAYED);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SubMenu->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, this);
|
|||
|
|
|
|||
|
|
*pResult = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnOperationServerRun()
|
|||
|
|
{
|
|||
|
|
CString strFileFullPath;
|
|||
|
|
strFileFullPath = m_Server_File_Path + m_ControlList_Server.GetItemText(m_ControlList_Server.GetSelectionMark(), 0);
|
|||
|
|
ShellExecute(NULL, "open", strFileFullPath, NULL, NULL, SW_SHOW); //CreateProcess
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnOperationRename()
|
|||
|
|
{
|
|||
|
|
POINT Point;
|
|||
|
|
GetCursorPos(&Point);
|
|||
|
|
if (GetFocus()->m_hWnd == m_ControlList_Server.m_hWnd)
|
|||
|
|
{
|
|||
|
|
m_ControlList_Server.EditLabel(m_ControlList_Server.GetSelectionMark());
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
m_ControlList_Client.EditLabel(m_ControlList_Client.GetSelectionMark());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnLvnEndlabeleditListServer(NMHDR *pNMHDR, LRESULT *pResult)
|
|||
|
|
{
|
|||
|
|
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
|
|||
|
|
|
|||
|
|
CString strNewFileName, strExistingFileFullPath, strNewFileFullPath;
|
|||
|
|
m_ControlList_Server.GetEditControl()->GetWindowText(strNewFileName);
|
|||
|
|
|
|||
|
|
strExistingFileFullPath = m_Server_File_Path + m_ControlList_Server.GetItemText(pDispInfo->item.iItem, 0);
|
|||
|
|
strNewFileFullPath = m_Server_File_Path + strNewFileName;
|
|||
|
|
*pResult = ::MoveFile(strExistingFileFullPath.GetBuffer(0), strNewFileFullPath.GetBuffer(0));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnNMRClickListClient(NMHDR *pNMHDR, LRESULT *pResult)
|
|||
|
|
{
|
|||
|
|
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
|
|||
|
|
CMenu Menu;
|
|||
|
|
Menu.LoadMenu(IDR_MENU_FILE_OPERATION);
|
|||
|
|
CMenu* SubMenu = Menu.GetSubMenu(0);
|
|||
|
|
CPoint Point;
|
|||
|
|
GetCursorPos(&Point);
|
|||
|
|
SubMenu->DeleteMenu(1, MF_BYPOSITION);
|
|||
|
|
if (m_ControlList_Client.GetSelectedCount() == 0)
|
|||
|
|
{
|
|||
|
|
int iCount = SubMenu->GetMenuItemCount();
|
|||
|
|
for (int i = 0; i < iCount; i++)
|
|||
|
|
{
|
|||
|
|
SubMenu->EnableMenuItem(i, MF_BYPOSITION | MF_GRAYED);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SubMenu->TrackPopupMenu(TPM_LEFTALIGN, Point.x, Point.y, this);
|
|||
|
|
*pResult = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnOperationClientShowRun()
|
|||
|
|
{
|
|||
|
|
CString strFileFullPath;
|
|||
|
|
strFileFullPath = m_Client_File_Path + m_ControlList_Client.GetItemText(m_ControlList_Client.GetSelectionMark(), 0);
|
|||
|
|
ULONG ulLength = strFileFullPath.GetLength() + 2;
|
|||
|
|
BYTE szBuffer[MAX_PATH+10];
|
|||
|
|
szBuffer[0] = COMMAND_OPEN_FILE_SHOW;
|
|||
|
|
memcpy(szBuffer + 1, strFileFullPath.GetBuffer(0), ulLength - 1);
|
|||
|
|
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, ulLength);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnOperationClientHideRun()
|
|||
|
|
{
|
|||
|
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnLvnEndlabeleditListClient(NMHDR *pNMHDR, LRESULT *pResult)
|
|||
|
|
{
|
|||
|
|
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
|
|||
|
|
|
|||
|
|
CString strNewFileName, strExistingFileFullPath, strNewFileFullPath;
|
|||
|
|
m_ControlList_Client.GetEditControl()->GetWindowText(strNewFileName);
|
|||
|
|
|
|||
|
|
strExistingFileFullPath = m_Client_File_Path + m_ControlList_Client.GetItemText(pDispInfo->item.iItem, 0);
|
|||
|
|
strNewFileFullPath = m_Client_File_Path + strNewFileName;
|
|||
|
|
|
|||
|
|
if (strExistingFileFullPath != strNewFileFullPath)
|
|||
|
|
{
|
|||
|
|
UINT ulLength = strExistingFileFullPath.GetLength() + strNewFileFullPath.GetLength() + 3;
|
|||
|
|
LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, ulLength);
|
|||
|
|
szBuffer[0] = COMMAND_RENAME_FILE; //<2F>ض˷<D8B6><CBB7><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
memcpy(szBuffer + 1, strExistingFileFullPath.GetBuffer(0), strExistingFileFullPath.GetLength() + 1);
|
|||
|
|
memcpy(szBuffer + 2 + strExistingFileFullPath.GetLength(),
|
|||
|
|
strNewFileFullPath.GetBuffer(0), strNewFileFullPath.GetLength() + 1);
|
|||
|
|
m_iocpServer->OnClientPreSending(m_ContextObject, szBuffer, ulLength);
|
|||
|
|
LocalFree(szBuffer);
|
|||
|
|
|
|||
|
|
GetClientFileList(".");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
*pResult = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void CFileManagerDlg::OnOperationCompress()
|
|||
|
|
{
|
|||
|
|
POINT Point;
|
|||
|
|
GetCursorPos(&Point);
|
|||
|
|
if (GetFocus()->m_hWnd == m_ControlList_Server.m_hWnd)
|
|||
|
|
{
|
|||
|
|
ServerCompress(1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID CFileManagerDlg::ServerCompress(ULONG ulType)
|
|||
|
|
{
|
|||
|
|
POSITION Pos = m_ControlList_Server.GetFirstSelectedItemPosition();
|
|||
|
|
|
|||
|
|
CString strString;
|
|||
|
|
|
|||
|
|
while(Pos)
|
|||
|
|
{
|
|||
|
|
int iItem = m_ControlList_Server.GetNextSelectedItem(Pos);
|
|||
|
|
strString += m_Server_File_Path + m_ControlList_Server.GetItemText(iItem, 0); //C:\1.txt C:\2.txt s
|
|||
|
|
strString += _T(" ");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!strString.IsEmpty())
|
|||
|
|
{
|
|||
|
|
CString strRARFileFullPath;
|
|||
|
|
|
|||
|
|
strRARFileFullPath += m_Server_File_Path;
|
|||
|
|
CFileCompress Dlg(this,ulType);
|
|||
|
|
|
|||
|
|
if (Dlg.DoModal()==IDOK)
|
|||
|
|
{
|
|||
|
|
if (Dlg.m_EditRarName.IsEmpty())
|
|||
|
|
{
|
|||
|
|
MessageBox("ERROR");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strRARFileFullPath += Dlg.m_EditRarName;
|
|||
|
|
strRARFileFullPath += ".rar";
|
|||
|
|
CompressFiles(strRARFileFullPath.GetBuffer(strRARFileFullPath.GetLength()),
|
|||
|
|
strString.GetBuffer(strString.GetLength()),ulType);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
BOOL CFileManagerDlg::CompressFiles(PCSTR strRARFileFullPath,PSTR strString,ULONG ulType)
|
|||
|
|
{
|
|||
|
|
// ibck <20>Ǻ<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>
|
|||
|
|
PSTR szExePath = "/c c:\\progra~1\\winrar\\winrar.exe a -ad -ep1 -ibck ";
|
|||
|
|
//"/c c:\\progra~1\\winrar\\winrar.exe -x -ep1 -ibck " ;
|
|||
|
|
ULONG ulLength =strlen(szExePath) + strlen(strRARFileFullPath)+strlen(strString)+2;
|
|||
|
|
|
|||
|
|
PSTR szBuffer = (PSTR)malloc(sizeof(CHAR)* ulLength);
|
|||
|
|
StringCchCopyN(szBuffer , ulLength , szExePath , strlen(szExePath));
|
|||
|
|
StringCchCatN( szBuffer ,ulLength , strRARFileFullPath , strlen(strRARFileFullPath) );
|
|||
|
|
StringCchCatN( szBuffer ,ulLength , " " ,1);
|
|||
|
|
StringCchCatN( szBuffer ,ulLength , strString , strlen(strString));
|
|||
|
|
|
|||
|
|
if (ulType==1)
|
|||
|
|
{
|
|||
|
|
SHELLEXECUTEINFO sei = {0};
|
|||
|
|
sei.cbSize = sizeof sei;
|
|||
|
|
sei.lpVerb = "open";
|
|||
|
|
sei.lpFile = "c:\\windows\\system32\\cmd.exe";
|
|||
|
|
sei.lpParameters = szBuffer;
|
|||
|
|
sei.nShow = SW_HIDE;
|
|||
|
|
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
|
|||
|
|
BOOL fReturn = ShellExecuteEx(&sei);
|
|||
|
|
|
|||
|
|
CloseHandle(sei.hProcess);
|
|||
|
|
return (fReturn);
|
|||
|
|
}
|
|||
|
|
return TRUE;
|
|||
|
|
}
|