www.gusucode.com > 两份VC++编写的FTP客户端程序源码 > 两份VC++编写的FTP客户端程序源码/code/两个FTP客户端程序/FtpClient/LocalFileView.cpp
// LocalFileView.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "FtpClient.h" #include "LocalFileView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLocalFileView IMPLEMENT_DYNCREATE(CLocalFileView, CFormView) CLocalFileView::CLocalFileView() : CFormView(CLocalFileView::IDD) { //{{AFX_DATA_INIT(CLocalFileView) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } CLocalFileView::~CLocalFileView() { } void CLocalFileView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CLocalFileView) DDX_Control(pDX, IDC_FILEPATH, m_cbFilePath); DDX_Control(pDX, IDC_FILELIST, m_ctFileLocal); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CLocalFileView, CFormView) //{{AFX_MSG_MAP(CLocalFileView) ON_NOTIFY(LVN_BEGINRDRAG, IDC_FILELIST, OnBeginrdragFilelist) ON_WM_MOUSEMOVE() ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_FILELIST, OnBeginlabeleditFilelist) ON_NOTIFY(NM_DBLCLK, IDC_FILELIST, OnDblclkFilelist) ON_CBN_DROPDOWN(IDC_FILEPATH, OnDropdownFilepath) ON_WM_SIZE() ON_CBN_SELCHANGE(IDC_FILEPATH, OnSelchangeFilepath) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLocalFileView diagnostics #ifdef _DEBUG void CLocalFileView::AssertValid() const { CFormView::AssertValid(); } void CLocalFileView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CLocalFileView message handlers BOOL CLocalFileView::FindLocalFile() { if(m_pFindLocalFileThread) { ::WaitForSingleObject(m_pFindLocalFileThread->m_hThread,INFINITE); delete m_pFindLocFileThread; m_pFindLocFileThread = NULL; } if(m_pFindLocalFileThread = AfxBeginThread(CMyAppThread::FindLocalFileThread, NULL,THREAD_PRIORITY_ABOVE_NORMAL,0,CREATE_SUSPENDED,NULL)) { m_pFindLocalFileThread->m_bAutoDelete = FALSE; m_ctFileLocal.SetRedraw(FALSE); m_ctFileLocal.DeleteAllItems(); m_pFindLocalFileThread->ResumeThread(); return TRUE; } m_ctFileLocal.SetRedraw(FALSE); return FALSE; } BOOL CLocalFileView::SendFile(LPVOID pInfo) { if(m_pSendFileThread) { ::WaitForSingleObject(m_pSendFileThread->m_hThread,10); delete m_pSendFileThread; m_pSendFileThread=NULL; } if(m_pSendFileThread=AfxBeginThread(CMyAppThread::SendFileThread,(LPVOID)pInfo,THREAD_PRIORITY_ABOVE_NORMAL, 0,CREATE_SUSPENDED,NULL)) { m_pSendFileThread->m_bAutoDelete=FALSE; m_pSendFileThread->ResumeThread(); return TRUE; } else return FALSE; } void CLocalFileView::GetLocCurrentDirectory() { CString str; m_ctLocDir.GetWindowText(str); strcpy(szLocDirectory,str); } void CLocalFileView::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; } } int CLocalFileView::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 CLocalFileView::OnBeginrdragFilelist(NMHDR* pNMHDR, LRESULT* pResult) { if(m_bDragging)return; NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; *pResult = 0; int nItem=pNMListView->iItem; POINT pt=pNMListView->ptAction; m_pDragImageList=m_ctLocFile.CreateDragImage(nItem,&pt); m_bDragging=TRUE; m_pDragImageList->BeginDrag(0,CPoint(0,0)); m_pDragImageList->DragEnter(NULL,pt); SetCapture(); SetCursor(m_hDragCursor); *pResult = 0; } void CLocalFileView::OnMouseMove(UINT nFlags, CPoint point) { if(m_bDragging) { CRect rect; pServView->m_ctServFile.GetWindowRect(&rect); ClientToScreen(&point); if(rect.PtInRect(point)) SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); else SetCursor(m_hDragCursor); m_pDragImageList->DragMove(point); } CFormView::OnMouseMove(nFlags, point); } void CLocalFileView::OnBeginlabeleditFilelist(NMHDR* pNMHDR, LRESULT* pResult) { LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; *pResult = 0; } void CLocalFileView::OnDblclkFilelist(NMHDR* pNMHDR, LRESULT* pResult) { LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR; LV_ITEM * pItem=&pDispInfo->item; int nItem=pItem->iItem; CString str; str=m_ctLocFile.GetItemText(nItem,0); if(pItem->pszText) { m_ctLocFile.SetItemText(pItem->iItem,pItem->iSubItem,pItem->pszText); ::rename(str,pItem->pszText); } *pResult = 0; } void CLocalFileView::OnDropdownFilepath() { int i=m_ctLocDir.GetCount(); for(;i>m_iDirCount-1;--i) m_ctLocDir.DeleteItem(i); } void CLocalFileView::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(); } void CLocalFileView::OnSize(UINT nType, int cx, int cy) { //CFormView::OnSize(nType, cx, cy); if(m_ctLocDir.m_hWnd) m_ctLocDir.SetWindowPos(this,0,0,cx,0,SWP_NOZORDER|SWP_NOMOVE); if(m_ctLocFile.m_hWnd) { m_ctLocFile.ShowWindow(SW_HIDE); m_ctLocFile.SetWindowPos(this,0,0,cx,cy-25,SWP_NOZORDER|SWP_NOMOVE); m_ctLocFile.ShowWindow(SW_SHOW); } } BOOL CLocalFileView::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE&&m_bDragging) { m_bDragging=FALSE; CImageList::DragLeave(NULL); CImageList::EndDrag(); ReleaseCapture(); delete m_pDragImageList; return TRUE; } return CFormView::PreTranslateMessage(pMsg); } void CLocalFileView::OnSelchangeFilepath() { // TODO: Add your control notification handler code here }