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

📄 mainfrm.cpp

📁 ftp客户端
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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)
	ON_CBN_SELCHANGE(IDC_SERV_DIR, OnSelchangeServDir)
	//}}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_MESSAGE(WM_PREDELETEFILE,CServFileView::OnPreDeleteFile)
	ON_MESSAGE(WM_PRERECEIVEFILE,CServFileView::OnPreReceiveFile)
	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
/////////////////////////////////////////////////////////////////////////////
// CFtpInfoView

IMPLEMENT_DYNCREATE(CFtpInfoView, CEditView)

CFtpInfoView::CFtpInfoView()
{
	
}

CFtpInfoView::~CFtpInfoView()
{
	m_NewFont.DeleteObject();
}


BEGIN_MESSAGE_MAP(CFtpInfoView, CEditView)
	//{{AFX_MSG_MAP(CFtpInfoView)
	ON_WM_CREATE()
	ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
	ON_WM_CHAR()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_RECORDFTPINFO,CFtpInfoView::OnRecordFtpInfo)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFtpInfoView drawing

void CFtpInfoView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
}

/////////////////////////////////////////////////////////////////////////////
// CFtpInfoView diagnostics

#ifdef _DEBUG
void CFtpInfoView::AssertValid() const
{
	CEditView::AssertValid();
}

void CFtpInfoView::Dump(CDumpContext& dc) const
{
	CEditView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CFtpInfoView message handlers

LRESULT CFtpInfoView::OnRecordFtpInfo(WPARAM wParam,LPARAM lParam)
{

	CEdit& edit=GetEditCtrl();
	CString str=(LPCTSTR)lParam;
	int nLine=edit.GetLineCount();
	int nStart=edit.LineIndex(nLine);
	edit.SetSel(nStart,str.GetLength()+nStart);
	edit.ReplaceSel("\r\n"+str);
	return 0L;

}
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// CG: The following block was added by the Splitter Bar component.	{		if(!m_wndSplitter1.CreateStatic(this,3,1))
			return FALSE;
        if(!m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CFtpInfoView),CSize(375,100),pContext)||
			!m_wndSplitter1.CreateView(2,0,RUNTIME_CLASS(CXiongFtpView),CSize(375,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(1,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;
		return TRUE;	}
}

void CLocFileView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
	m_pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
	nThreadCount=0;
	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:\\");
	CMyAppThread* pThread=new CMyAppThread("C:\\");
	if(!BeginFindLocFile(pThread))
		AfxMessageBox("起动查找线程失败");
}

int CLocFileView::InsertLocDir(CString& str,int iIcon,int iIconSel)
{	
	return OnInsertDir(&m_ctLocDir,str,iIcon,iIconSel);
}

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* pInfo=(FILE_FTP_INFO*)wParam;
	CString str=pInfo->szFileName;
	if(str=="."||str=="..")
	{
		m_bHaveDotFlag=TRUE;
		return 0L;
	}
	OnInsertFile(&m_ctServFile,(LPVOID)pInfo,lParam);
    return 0L;

}

LRESULT CServFileView::OnSetServRedrawFlag(WPARAM wParam,LPARAM lParam)
{
	CMyAppThread* pThread=(CMyAppThread*)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)
{
	CString str=(LPCTSTR)lParam;
	int nItem=m_ctServDir.FindStringExact(-1,str);
	if(nItem==CB_ERR)
		nItem=OnInsertDir(&m_ctServDir,str,DIRECTORYICON,DIRECTORYSEL);
	m_ctServDir.SetCurSel(nItem);
	return 0L;
}

LRESULT CServFileView::OnReDisplayServFile(WPARAM wParam,LPARAM lParam)
{
	CString strFtp=(LPCTSTR)lParam;
	OnSetServDirectoryDisplay(0,lParam);
	CMyAppThread* pThread=new CMyAppThread(NULL,m_pMainFrame->GetFtpName(),m_pMainFrame->GetFtpUser(),
		m_pMainFrame->GetFtpPassword(),m_pMainFrame->GetFtpPort(),strFtp,TRUE);
	if(!BeginFindServFile(pThread))
		AfxMessageBox("建立网络线程失败");
	return 0L;
}

LRESULT CServFileView::OnSetServDir(WPARAM wParam,LPARAM lParam)
{
    CString str=(LPCTSTR)lParam;
	int nItem=m_ctServDir.FindStringExact(-1,str);
	if(nItem==CB_ERR)
		nItem=OnInsertDir(&m_ctServDir,str,DIRECTORYICON,DIRECTORYSEL);
	m_ctServDir.SetCurSel(nItem);
	m_ctServFile.SetRedraw(FALSE);
	m_ctServFile.DeleteAllItems();
	m_ctServFile.SetRedraw();
	return 0L;

}

void CServFileView::OnServFileDelete()
{
	if(!m_bConnected)return;
	CString strFtp;
	int i=0;
	POSITION iPos;
	int nItem=m_ctServDir.GetCurSel();
	m_ctServDir.GetLBText(nItem,strFtp);
	i=m_ctServFile.GetSelectedCount();
	FILE_COUNT_INFO* pFileCount=new FILE_COUNT_INFO[i];
	SEND_RECEIVE_INFO* pSeRe=new SEND_RECEIVE_INFO;
	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);
		
	}
	CMyAppThread* pThread=new CMyAppThread(NULL,m_pMainFrame->GetFtpName(),m_pMainFrame->GetFtpUser(),
		m_pMainFrame->GetFtpPassword(),m_pMainFrame->GetFtpPort(),strFtp,TRUE,i);
	pSeRe->pCount=pFileCount;
	pSeRe->pThread=pThread;
	if(!BeginDeleteFile(pSeRe))
		AfxMessageBox("建立文件删除线程出错");
}


void CServFileView::OnServFileDownload()
{
	if(!m_bConnected)return;
	CString str,strFtp;
	int i=0;
	POSITION iPos;
	int nItem=pLocView->m_ctLocDir.GetCurSel();
	pLocView->m_ctLocDir.GetLBText(nItem,str);
	nItem=m_ctServDir.GetCurSel();
	m_ctServDir.GetLBText(nItem,strFtp);
	i=m_ctServFile.GetSelectedCount();
	FILE_COUNT_INFO* pFileCount=new FILE_COUNT_INFO[i];
	SEND_RECEIVE_INFO* pSeRe=new SEND_RECEIVE_INFO;
	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);
		
	}
	CMyAppThread* pThread=new CMyAppThread(str,m_pMainFrame->GetFtpName(),m_pMainFrame->GetFtpUser(),
		m_pMainFrame->GetFtpPassword(),m_pMainFrame->GetFtpPort(),strFtp,TRUE,i);
	pSeRe->pCount=pFileCount;
	pSeRe->pThread=pThread;
	if(!BeginReceiveFile(pSeRe))
		AfxMessageBox("建立文件接收线程出错");
}

void CServFileView::OnServFileReName()
{
	OnFileName(&m_ctServFile);
}

BOOL CServFileView::BeginDeleteFile(LPVOID pInfo)
{
	SEND_RECEIVE_INFO* pInf=(SEND_RECEIVE_INFO*)pInfo;
	CMyAppThread* pThread=(CMyAppThread*)pInf->pThread;
	if(m_pDeleteFileThread)
	{
		::WaitForSingleObject(m_pDeleteFileThread->m_hThread,INFINITE);
		delete m_pDeleteFileThread;
		m_pDeleteFileThread=NULL;
	}
	if(m_pDeleteFileThread=AfxBeginThread(pThread->StartDeleteFileThread,pInfo,THREAD_PRIORITY_ABOVE_NORMAL,
		0,CREATE_SUSPENDED,NULL))
	{
		m_pDeleteFileThread->m_bAutoDelete=FALSE;
		nThreadCount++;
		m_pDeleteFileThread->ResumeThread();
		return TRUE;
	}
		return FALSE;
}

BOOL CServFileView::BeginRenameFile(LPVOID pInfo)
{
	FILE_CHANGE_INFO* pInf=(FILE_CHANGE_INFO*)pInfo;
	CMyAppThread* pThread=(CMyAppThread*)pInf->pThread;
	if(m_pRenameFileThread)
	{
		::WaitForSingleObject(m_pRenameFileThread->m_hThread,100);
		delete m_pRenameFileThread;
		m_pRenameFileThread=NULL;
	}
	if(m_pRenameFileThread=AfxBeginThread(pThread->StartRenameFileThread,pInfo,THREAD_PRIORITY_ABOVE_NORMAL,
		0,CREATE_SUSPENDED,NULL))
	{
		m_pRenameFileThread->m_bAutoDelete=FALSE;
		m_pRenameFileThread->ResumeThread();
		return TRUE;
	}
	return FALSE;
}
BOOL CServFileView::BeginFindServFile(LPVOID lParam)
{
	CMyAppThread* pThread=(CMyAppThread*)lParam;
	if(m_pFindServFileThread)
	{
		::WaitForSingleObject(m_pFindServFileThread->m_hThread,INFINITE);
		delete m_pFindServFileThread;
		m_pFindServFileThread=NULL;
	}
	if(m_pFindServFileThread=AfxBeginThread(pThread->StartFindServFileThread,lParam,THREAD_PRIORITY_BELOW_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 lpBuffer[MAX_PATH];
	char* ptr;
	CString str;
	m_iDirCount=0;
	::GetLogicalDriveStrings(MAX_PATH,lpBuffer);
	ptr=lpBuffer;
	while(*ptr)
	{
		m_iDirCount++;
		str=ptr;
		GetFileIcon(str,&iIcon,&iIconSel);
		InsertLocDir(str,iIcon,iIconSel);
		ptr+=strlen(ptr)+1;
	}
}

BOOL CLocFileView::BeginFindLocFile(LPVOID pInfo)
{
	
	CMyAppThread* pThread=(CMyAppThread*)pInfo;
	if(m_pFindLocFileThread)
	{
		::WaitForSingleObject(m_pFindLocFileThread->m_hThread,100);
		delete m_pFindLocFileThread;
		m_pFindLocFileThread=NULL;
	}
	if(m_pFindLocFileThread=AfxBeginThread(pThread->StartFindLocFileThread,pInfo,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;
	}
	return FALSE;
}

BOOL CLocFileView::BeginSendFile(LPVOID pInfo)
{
	SEND_RECEIVE_INFO* pInf=(SEND_RECEIVE_INFO*)pInfo;
	CMyAppThread* pThread=(CMyAppThread*)pInf->pThread;
	if(m_pSendFileThread)
	{
		::WaitForSingleObject(m_pSendFileThread->m_hThread,10);
		delete m_pSendFileThread;
		m_pSendFileThread=NULL;
	}
	if(m_pSendFileThread=AfxBeginThread(pThread->StartSendFileThread,pInfo,THREAD_PRIORITY_ABOVE_NORMAL,
		0,CREATE_SUSPENDED,NULL))
	{
		m_pSendFileThread->m_bAutoDelete=FALSE;
		nThreadCount++;
		m_pSendFileThread->ResumeThread();
		return TRUE;
	}
	else
		return FALSE;
}

BOOL CLocFileView::BeginPreSendFile(LPVOID pInfo)
{
	CMyAppThread* pThread=(CMyAppThread*)pInfo;
	CWinThread* pPreSendFile=NULL;
	if(pPreSendFile=AfxBeginThread(pThread->StartPreSendFileThread,pInfo,THREAD_PRIORITY_NORMAL,
		0,CREATE_SUSPENDED,NULL))
	{
		nThreadCount++;
		pPreSendFile->ResumeThread();
		return TRUE;
	}
	return FALSE;
}

LRESULT CLocFileView::OnSetLocDirectoryDisplay(WPARAM wParam,LPARAM lParam)
{
	int iIcon,iIconSel,nItem;
	CString str=(LPCTSTR)lParam;
	if(str.Right(1)=="\\")
		m_ctLocDir.DeleteItem(m_iDirCount);
	nItem=m_ctLocDir.FindStringExact(-1,str);
	if(nItem==CB_ERR)
	{
		GetFileIcon(str,&iIcon,&iIconSel);
		int iCount=m_ctLocDir.GetCount();
		if(iCount==m_iDirCount)
			nItem=InsertLocDir(str,iIcon,iIconSel);
		else
		{
			m_ctLocDir.DeleteItem(m_iDirCount);
			nItem=InsertLocDir(str,iIcon,iIconSel);
		}
	}
	m_ctLocDir.SetCurSel(nItem);
	return 0L;
}

LRESULT CLocFileView::OnPreSendFile(WPARAM wParam,LPARAM lParam)
{
	CString str=(LPCTSTR)wParam;
	CString strFtp=(LPCTSTR)lParam;
	CMyAppThread* pThread=new CMyAppThread(str,m_pMainFrame->GetFtpName(),m_pMainFrame->GetFtpUser(),
		m_pMainFrame->GetFtpPassword(),m_pMainFrame->GetFtpPort(),strFtp,TRUE);
	if(!BeginPreSendFile(pThread))
		AfxMessageBox("起动发送子线程失败");
	return 0L;

}
LRESULT CLocFileView::OnSetLocRedrawFlag(WPARAM wParam,LPARAM lParam)
{
	if(m_bHaveDotFlag)
	{
		CString str="..";
		int iIcon=DIRECTORYICON;
		m_ctLocFile.InsertItem(0,str,iIcon);

⌨️ 快捷键说明

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