www.gusucode.com > 极速FTP客户端程序(VC++版)-源码程序 > 极速FTP客户端程序(VC++版)-源码程序\code\DownloadFileView.cpp
//Download by http://www.NewXing.com // DownloadFileView.cpp : implementation file // /********************************************* **该文件是属于WolfFTP工程中的。如果有什么问题 **请联系 ** tablejiang@21cn.com **或者访问 ** http://wolfftp.51.net **以得到最新的支持。 *********************************************/ #include "stdafx.h" #include "QuickFTP.h" #include "DownloadFileView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDownloadFileView IMPLEMENT_DYNCREATE(CDownloadFileView, CView) CDownloadFileView::CDownloadFileView() { m_pFileQueueHead = NULL ; m_pFileQueue = NULL ; } CDownloadFileView::~CDownloadFileView() { } BEGIN_MESSAGE_MAP(CDownloadFileView, CView) //{{AFX_MSG_MAP(CDownloadFileView) ON_WM_SIZE() ON_WM_CREATE() ON_COMMAND(IDR_QUEUE_RUN, OnQueueRun) ON_COMMAND(IDR_QUEUE_STOP, OnQueueStop) ON_COMMAND(ID_SELECT_ALL, OnSelectAll) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDownloadFileView drawing void CDownloadFileView::OnDraw(CDC* pDC) { CQuickFTPDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code here } ///////////////////////////////////////////////////////////////////////////// // CDownloadFileView diagnostics #ifdef _DEBUG void CDownloadFileView::AssertValid() const { CView::AssertValid(); } void CDownloadFileView::Dump(CDumpContext& dc) const { CView::Dump(dc); } #endif //_DEBUG CQuickFTPDoc* CDownloadFileView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CQuickFTPDoc))); return (CQuickFTPDoc*)m_pDocument; } ///////////////////////////////////////////////////////////////////////////// // CDownloadFileView message handlers void CDownloadFileView::OnInitialUpdate() { CView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class } BOOL CDownloadFileView::InitList() { RefreshList( ) ; return true ; } void CDownloadFileView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); // TODO: Add your message handler code here RECT rect ; if( m_ListCtrl.m_hWnd != NULL ) { GetClientRect( &rect ) ; m_ListCtrl.MoveWindow( &rect , true ) ; } } void CDownloadFileView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { // TODO: Add your specialized code here and/or call the base class //get document . CQuickFTPDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); //the file queue change. m_pFileQueue = pDoc->m_pFileQueue ; } /**************************************************** ** @Description ** Refresh the job list. ** ** @Parameter ** void ** ** @Return: ** @Author: Table.JHM.太子 ** e-mail: tablejiang@21cn.com ** @Date: 2001 3 26 ****************************************************/ BOOL CDownloadFileView::RefreshList() { //we must delete previous item . if( m_ListCtrl.m_hWnd != NULL ) m_ListCtrl.DeleteAllItems( ) ; //if no file queue return . if( m_pFileQueue == NULL ) return true ; //if no item ,return m_pFileQueueHead = m_pFileQueue->m_pFileTransmitQueue ; if( m_pFileQueueHead == NULL ) return true ; // add item . FTPFILEINFO* pCur ; int iItem = 0 ; pCur = m_pFileQueueHead ; while( pCur != NULL ) { m_ListCtrl.AddItem( pCur , iItem ) ; iItem ++ ; pCur = pCur->pNext ; } return true ; } LRESULT CDownloadFileView::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class switch( message ) { case REFRESH_WND_MSG : { //refresh RefreshList( ) ; } break ; case JOBLIST_KEYDOWN_MSG : { switch( wParam ) { case VK_DELETE : //delete item. DeleteSelectItem( ) ; break ; default : break ; } } break ; case JOBLIST_RBTN_UP_MSG : { POINT point ; //get cursort position. GetCursorPos( &point ) ; CMenu PopMenu ; PopMenu.LoadMenu( IDR_MAINFRAME ) ; CMenu *pPopMenu = PopMenu.GetSubMenu( 4 ) ; pPopMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON , point.x , point.y , this ) ; PopMenu.DestroyMenu() ; } break ; default : break ; } return CView::DefWindowProc(message, wParam, lParam); } int CDownloadFileView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here RECT rect ; GetClientRect( &rect ) ; //create list. m_ListCtrl.Create( WS_CHILD|WS_VISIBLE|LVS_REPORT, rect , this , IDC_DOWNJOBLIST ) ; //set full select. m_ListCtrl.SetRowFullSelect( ) ; m_ListCtrl.SetParentWnd( m_hWnd ) ; InitList( ) ; return 0; } /**************************************************** ** @Description ** set transmit file queue . ** ** @Parameter ** ** ** @Return: ** @Author: Table.JHM.太子 ** e-mail: tablejiang@21cn.com ** @Date: 2001 3 26 ****************************************************/ BOOL CDownloadFileView::SetFileQueue(CFileQueue *pQueue) { m_pFileQueue = pQueue ; m_pFileQueue->m_hParentWnd = m_hWnd ; RefreshList( ) ; return true ; } /**************************************************** ** @Description ** Delete the select task . ** ** @Parameter ** void ** ** @Return: success return true ,else false . ** @Author: Table.JHM.太子 ** e-mail: tablejiang@21cn.com ** @Date: 2001 3 26 ****************************************************/ BOOL CDownloadFileView::DeleteSelectItem() { FTPFILEINFO FtpFile ; UINT iSelectCount = m_ListCtrl.GetSelectedCount( ) ; if( iSelectCount <= 0 ) return true ; int iItem = -1 ; for( UINT i= 0 ; i < iSelectCount ; i ++ ) { iItem = m_ListCtrl.GetNextItem( iItem , LVNI_SELECTED ) ; m_ListCtrl.GetItemInfo( iItem , &FtpFile ) ; m_pFileQueue->DeleteItem( &FtpFile ) ; } RefreshList( ) ; return true ; } /**************************************************** ** @Description ** set select task status . ** ** @Parameter ** ** ** @Return: ** @Author: Table.JHM.太子 ** e-mail: tablejiang@21cn.com ** @Date: 2001 3 26 ****************************************************/ BOOL CDownloadFileView::SetSelectItemStatus(int iState) { FTPFILEINFO FtpFile ; UINT iSelectCount = m_ListCtrl.GetSelectedCount( ) ; if( iSelectCount <= 0 ) return true ; int iItem = -1 ; for( UINT i= 0 ; i < iSelectCount ; i ++ ) { iItem = m_ListCtrl.GetNextItem( iItem , LVNI_SELECTED ) ; m_ListCtrl.GetItemInfo( iItem , &FtpFile ) ; //if want stop the item . if( iState == FILE_STATE_STOP ) { if( FtpFile.state == FILE_STATE_RUNNING ) { m_pFtp->StopNowCommand( ) ; } } m_pFileQueue->SetItemState( iState , &FtpFile ) ; } RefreshList( ) ; return true ; } void CDownloadFileView::OnQueueRun() { // TODO: Add your command handler code here SetSelectItemStatus( FILE_STATE_READY ) ; m_pFtp->RunJobList( ) ; } void CDownloadFileView::OnQueueStop() { // TODO: Add your command handler code here m_pFtp->SetStopSign( false ) ; SetSelectItemStatus( FILE_STATE_STOP ) ; } void CDownloadFileView::OnSelectAll() { // TODO: Add your command handler code here m_ListCtrl.SelectAllItem( ) ; }