?? mainfrm.cpp
字號:
DDX_Control(pDX, IDC_BACK, m_ctBack);
DDX_Control(pDX, IDC_SERV_FILE, m_ctServFile);
DDX_Control(pDX, IDC_SERV_DIR, m_ctServDir);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CServFileView, CFormView)
//{{AFX_MSG_MAP(CServFileView)
ON_WM_SIZE()
ON_NOTIFY(NM_DBLCLK, IDC_SERV_FILE, OnDblclkServFile)
ON_NOTIFY(LVN_BEGINDRAG, IDC_SERV_FILE, OnBegindragServFile)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_NOTIFY(NM_RCLICK, IDC_SERV_FILE, OnRclickServFile)
ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_SERV_FILE, OnBeginlabeleditServFile)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_SERV_FILE, OnEndlabeleditServFile)
ON_BN_CLICKED(IDC_BACK, OnBack)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_SETFILE,CServFileView::OnInsertServFile)
ON_MESSAGE(WM_SETREDRAWFLAG,CServFileView::OnSetServRedrawFlag)
ON_MESSAGE(WM_SETDIRECTORYDISPLAY,CServFileView::OnSetServDirectoryDisplay)
ON_MESSAGE(WM_REDISPLAYFILE,CServFileView::OnReDisplayServFile)
ON_MESSAGE(WM_SETDIR,CServFileView::OnSetServDir)
ON_COMMAND(ID_FILE_DELETE,CServFileView::OnServFileDelete)
ON_COMMAND(ID_FILE_FTP_DOWNLOAD,CServFileView::OnServFileDownload)
ON_COMMAND(ID_FILE_RENAME,CServFileView::OnServFileReName)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CServFileView diagnostics
#ifdef _DEBUG
void CServFileView::AssertValid() const
{
CFormView::AssertValid();
}
void CServFileView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CServFileView message handlers
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// CG: The following block was added by the Splitter Bar component. { if(!m_wndSplitter1.CreateStatic(this,2,1))
return FALSE;
if(!m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(CInfoListView),CSize(120,100),pContext))
return FALSE;
m_wndSplitter1.SetRowInfo(1,180,0);
if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0,0))==NULL)
return FALSE;
if(!m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CLocFileView),CSize(375,180),pContext)||
!m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CServFileView),CSize(375,180),pContext))
return FALSE;
isok=1;
CRect rc;
GetClientRect(rc);
int height=(int)( rc.Height()/17*11 );
m_wndSplitter1.SetRowInfo(0,height,0);
return TRUE; }
}
void CLocFileView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
m_pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
pLocView=this;
m_pFindLocFileThread=NULL;
SetFileColumns(&m_ctLocFile);
SetImageList(&m_ctLocFile,&m_ctLocDir);
m_ctLocFile.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
GetLocDir();
int i=m_ctLocDir.FindStringExact(-1,"C:\\");
m_ctLocDir.SetCurSel(i);
::SetCurrentDirectory("C:\\");
GetLocCurrentDirectory();
BeginFindLocFile();
}
int CLocFileView::InsertLocDir(CString& str,int iIcon,int iIconSel)
{
int nItem=m_ctLocDir.GetCount();
COMBOBOXEXITEM Combo;
Combo.mask=CBEIF_IMAGE|CBEIF_TEXT|CBEIF_SELECTEDIMAGE;
Combo.iImage=iIcon;
Combo.iSelectedImage=iIconSel;
Combo.pszText=(LPTSTR)(LPCTSTR)str;
Combo.iItem=nItem;
m_ctLocDir.InsertItem(&Combo);
return nItem;
}
void CServFileView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
m_ctServFile.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
pServView=this;
hBitmap=::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BACKBITMAP));
m_ctBack.SetBitmap(hBitmap);
SetFileColumns(&m_ctServFile);
SetServImageList(IDB_FILE_BITMAP);
}
LRESULT CServFileView::OnInsertServFile(WPARAM wParam,LPARAM lParam)
{
FILE_FTP_INFO* fileInfo=(FILE_FTP_INFO*)wParam;
CString str=fileInfo->szFileName;
if(str=="."||str=="..")
{
m_bHaveDotFlag=TRUE;
return 0L;
}
OnInsertFile(&m_ctServFile,(LPVOID)fileInfo,lParam);
return 0L;
}
LRESULT CServFileView::OnSetServRedrawFlag(WPARAM wParam,LPARAM lParam)
{
if(m_bHaveDotFlag)
{
CString str="..";
int iIcon=DIRECTORYICON;
m_ctServFile.InsertItem(0,str,iIcon);
m_ctServFile.SetItemData(0,DIRECTORYICON);
m_bHaveDotFlag=FALSE;
}
m_ctServFile.Invalidate();
m_ctServFile.SetRedraw();
return 0L;
}
LRESULT CServFileView::OnSetServDirectoryDisplay(WPARAM wParam,LPARAM lParam)
{
FILE_FTP_INFO* fileInfo=(FILE_FTP_INFO*)lParam;
CString str;
str=Ftpdirectory;
m_ctServDir.SetWindowText(str);
m_ctServDir.Invalidate();
return 0L;
}
LRESULT CServFileView::OnReDisplayServFile(WPARAM wParam,LPARAM lParam)
{
CString str=(LPCTSTR)wParam;
m_ctServDir.SetWindowText(str);
m_ctServDir.Invalidate();
m_pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
m_pMainFrame->GetFtpPara(&m_ctServDir);
if(!BeginFindServFile())
AfxMessageBox("建立網絡線程失敗");
return 0L;
}
LRESULT CServFileView::OnSetServDir(WPARAM wParam,LPARAM lParam)
{
CString str=(LPCTSTR)lParam;
m_ctServDir.SetWindowText(str);
m_ctServFile.SetRedraw(FALSE);
m_ctServFile.DeleteAllItems();
m_ctServFile.SetRedraw();
return 0L;
}
void CServFileView::OnServFileDelete()
{
FILE_COUNT_INFO* pFileCount;
CString str;
int i=0;
POSITION iPos;
i=m_ctServFile.GetSelectedCount();
pFileCount=new FILE_COUNT_INFO[i];
strcpy(szAppName,AfxGetAppName());
strcpy(szFtpName,m_pMainFrame->GetFtpName());
strcpy(szFtpUser,m_pMainFrame->GetFtpUser());
nPort=m_pMainFrame->GetFtpPort();
strcpy(szFtpPassword,m_pMainFrame->GetFtpPassword());
m_ctServDir.GetWindowText(str);
strcpy(Ftpdirectory,str);
nCount=i;
iPos=m_ctServFile.GetFirstSelectedItemPosition();
for(int j=0;j<i;j++)
{
int nItem=m_ctServFile.GetNextSelectedItem(iPos);
m_ctServFile.GetItemText(nItem,0,pFileCount[j].fileName,256);
pFileCount[j].ufileFlag=m_ctServFile.GetItemData(nItem);
}
if(!BeginDeleteFile((LPVOID)pFileCount))
AfxMessageBox("建立文件刪除線程出錯");
}
void CServFileView::OnServFileDownload()
{
FILE_COUNT_INFO* pFileCount;
CString str;
int i=0;
POSITION iPos;
i=m_ctServFile.GetSelectedCount();
pFileCount=new FILE_COUNT_INFO[i];
strcpy(szAppName,AfxGetAppName());
strcpy(szFtpName,m_pMainFrame->GetFtpName());
strcpy(szFtpUser,m_pMainFrame->GetFtpUser());
nPort=m_pMainFrame->GetFtpPort();
strcpy(szFtpPassword,m_pMainFrame->GetFtpPassword());
pLocView->m_ctLocDir.GetWindowText(str);
strcpy(Localdirectory,str);
m_ctServDir.GetWindowText(str);
strcpy(Ftpdirectory,str);
nCount=i;
iPos=m_ctServFile.GetFirstSelectedItemPosition();
for(int j=0;j<i;j++)
{
int nItem=m_ctServFile.GetNextSelectedItem(iPos);
m_ctServFile.GetItemText(nItem,0,pFileCount[j].fileName,255);
pFileCount[j].ufileFlag=m_ctServFile.GetItemData(nItem);
}
if(!BeginReceiveFile((LPVOID)pFileCount))
AfxMessageBox("建立文件發送線程出錯");
}
void CServFileView::OnServFileReName()
{
OnFileName(&m_ctServFile);
}
BOOL CServFileView::BeginDeleteFile(LPVOID fileInfo)
{
if(m_pDeleteFileThread)
{
::WaitForSingleObject(m_pDeleteFileThread->m_hThread,100);
delete m_pDeleteFileThread;
m_pDeleteFileThread=NULL;
}
if(m_pDeleteFileThread=AfxBeginThread(CFtpThread::CFtp_Deletefile,fileInfo,THREAD_PRIORITY_ABOVE_NORMAL,
0,CREATE_SUSPENDED,NULL))
{
m_pDeleteFileThread->m_bAutoDelete=FALSE;
m_pDeleteFileThread->ResumeThread();
return TRUE;
}
return FALSE;
}
BOOL CServFileView::BeginRenameFile(LPVOID fileInfo)
{
if(m_pRenameFileThread)
{
::WaitForSingleObject(m_pRenameFileThread->m_hThread,100);
delete m_pRenameFileThread;
m_pRenameFileThread=NULL;
}
if(m_pRenameFileThread=AfxBeginThread(CFtpThread::CFtp_Rename,fileInfo,THREAD_PRIORITY_ABOVE_NORMAL,
0,CREATE_SUSPENDED,NULL))
{
m_pRenameFileThread->m_bAutoDelete=FALSE;
m_pRenameFileThread->ResumeThread();
return TRUE;
}
return FALSE;
}
BOOL CServFileView::BeginFindServFile()
{
if(m_pFindServFileThread)
{
::WaitForSingleObject(m_pFindServFileThread->m_hThread,100);
delete m_pFindServFileThread;
m_pFindServFileThread=NULL;
}
if(m_pFindServFileThread=AfxBeginThread(CFtpThread::CFtp_Findserverfile,NULL,THREAD_PRIORITY_ABOVE_NORMAL,
0,CREATE_SUSPENDED,NULL))
{
m_pFindServFileThread->m_bAutoDelete=FALSE;
m_ctServFile.SetRedraw(FALSE);
m_ctServFile.DeleteAllItems();
m_pFindServFileThread->ResumeThread();
return TRUE;
}
return FALSE;
}
void CLocFileView::GetLocDir()
{
int iIcon,iIconSel;
char bufferss[MAX_PATH];
char* ptr;
CString str;
m_iDirCount=0;
::GetLogicalDriveStrings(MAX_PATH,bufferss);
ptr=bufferss;
while(*ptr)
{
m_iDirCount++;
str=ptr;
GetFileIcon(str,&iIcon,&iIconSel);
InsertLocDir(str,iIcon,iIconSel);
ptr+=strlen(ptr)+1;
}
}
BOOL CLocFileView::BeginFindLocFile()
{
if(m_pFindLocFileThread)
{
::WaitForSingleObject(m_pFindLocFileThread->m_hThread,INFINITE);
delete m_pFindLocFileThread;
m_pFindLocFileThread=NULL;
}
if(m_pFindLocFileThread=AfxBeginThread(CFtpThread::CFtp_Findlocalfile,NULL,THREAD_PRIORITY_ABOVE_NORMAL,
0,CREATE_SUSPENDED,NULL))
{
m_pFindLocFileThread->m_bAutoDelete=FALSE;
m_ctLocFile.SetRedraw(FALSE);
m_ctLocFile.DeleteAllItems();
m_pFindLocFileThread->ResumeThread();
return TRUE;
}
m_ctLocFile.SetRedraw(FALSE);
return FALSE;
}
BOOL CLocFileView::BeginSendFile(LPVOID fileInfo)
{
if(m_pSendFileThread)
{
::WaitForSingleObject(m_pSendFileThread->m_hThread,10);
delete m_pSendFileThread;
m_pSendFileThread=NULL;
}
if(m_pSendFileThread=AfxBeginThread(CFtpThread::CFtp_Sendfile,(LPVOID)fileInfo,THREAD_PRIORITY_ABOVE_NORMAL,
0,CREATE_SUSPENDED,NULL))
{
m_pSendFileThread->m_bAutoDelete=FALSE;
m_pSendFileThread->ResumeThread();
return TRUE;
}
else
return FALSE;
}
void CLocFileView::GetLocCurrentDirectory()
{
CString str;
m_ctLocDir.GetWindowText(str);
strcpy(Localdirectory,str);
}
LRESULT CLocFileView::OnSetLocDirectoryDisplay(WPARAM wParam,LPARAM lParam)
{
CString str;
str=Localdirectory;
m_ctLocDir.SetWindowText(str);
m_ctLocDir.Invalidate();
return 0L;
}
LRESULT CLocFileView::OnSetLocRedrawFlag(WPARAM wParam,LPARAM lParam)
{
if(m_bHaveDotFlag)
{
CString str="..";
int iIcon=DIRECTORYICON;
m_ctLocFile.InsertItem(0,str,iIcon);
m_ctLocFile.SetItemData(0,DIRECTORYICON);
m_bHaveDotFlag=FALSE;
}
m_ctLocFile.Invalidate();
m_ctLocFile.SetRedraw();
return 0L;
}
LRESULT CLocFileView::OnReDisplayLocFile(WPARAM wParam,LPARAM lParam)
{
CString str=(LPCTSTR)wParam;
m_ctLocDir.SetWindowText(str);
m_ctLocDir.Invalidate();
GetLocCurrentDirectory();
if(!BeginFindLocFile())
AfxMessageBox("建立網絡線程失敗");
return 0L;
}
LRESULT CLocFileView::OnInsertLocFile(WPARAM wParam,LPARAM lParam)
{
FILE_FTP_INFO* fileInfo=(FILE_FTP_INFO*)wParam;
CString str=fileInfo->szFileName;
if(str=="."||str=="..")
{
m_bHaveDotFlag=TRUE;
return 0L;
}
OnInsertFile(&m_ctLocFile,fileInfo,lParam);
return 0L;
}
/////////////////////////////////////////////////////////////////////////////
// CFtpThread
IMPLEMENT_DYNCREATE(CFtpThread, CWinThread)
CFtpThread::CFtpThread()
{
}
CFtpThread::~CFtpThread()
{
}
BOOL CFtpThread::InitInstance()
{
// TODO: perform and per-thread initialization here
return TRUE;
}
int CFtpThread::ExitInstance()
{
// TODO: perform any per-thread cleanup here
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CFtpThread, CWinThread)
//{{AFX_MSG_MAP(CFtpThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFtpThread message handlers
UINT CFtpThread::CFtp_Findlocalfile(LPVOID lParam)
{
CFtpParaClass:: FILE_FTP_INFO* fileInfo=new (CFtpParaClass::FILE_FTP_INFO);
CFileFind fileExsit;
UINT i=0;
CTime mmtimes;
BOOL Is_continu;
::SetCurrentDirectory(Localdirectory);
::PostMessage(pLocView->m_hWnd,WM_SETDIRECTORYDISPLAY,0,0);
Is_continu=fileExsit.FindFile("*.*");
if(!Is_continu)
return 0L;
CString str;
while(Is_continu)
{
Is_continu=fileExsit.FindNextFile();
if(fileExsit.IsHidden())continue;
str=fileExsit.GetFileName();
strcpy(fileInfo->szFileName,str);
fileExsit.GetLastWriteTime(mmtimes);
str=mmtimes.Format("%x");
strcpy(fileInfo->szFileDate,str);
if(fileExsit.IsDirectory())
{
strcpy(fileInfo->szFileSize,"");
fileInfo->nType=DIRECTORYICON;
::SendMessage(pLocView->m_hWnd,WM_SETFILE,(WPARAM)fileInfo,
(LPARAM)LOCFILE);
}
else
{
int i=fileExsit.GetLength();
if(i>1024)
{
str.Format("%d",i/1024);
str+="KB";
}
else
str.Format("%d",i);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -