TransmitFileDlg.cpp
上传用户:tjfeida
上传日期:2013-03-10
资源大小:1917k
文件大小:7k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // TransmitFileDlg.cpp : implementation file
  2. //
  3. /*********************************************
  4. **该文件是属于WolfFTP工程中的。如果有什么问题
  5. **请联系
  6. **         tablejiang@21cn.com
  7. **或者访问
  8. **         http://wolfftp.51.net
  9. **以得到最新的支持。
  10. *********************************************/
  11. #include "stdafx.h"
  12. #include "quickftp.h"
  13. #include "TransmitFileDlg.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CTransmitFileDlg dialog
  21. CTransmitFileDlg::CTransmitFileDlg(CWnd* pParent /*=NULL*/)
  22. : CDialog(CTransmitFileDlg::IDD, pParent)
  23. {
  24. //{{AFX_DATA_INIT(CTransmitFileDlg)
  25. // NOTE: the ClassWizard will add member initialization here
  26. //}}AFX_DATA_INIT
  27. m_FileQueue.SetSaveFileName( "BkTransmit.QFQ" ) ;
  28. }
  29. void CTransmitFileDlg::DoDataExchange(CDataExchange* pDX)
  30. {
  31. CDialog::DoDataExchange(pDX);
  32. //{{AFX_DATA_MAP(CTransmitFileDlg)
  33. // NOTE: the ClassWizard will add DDX and DDV calls here
  34. //}}AFX_DATA_MAP
  35. }
  36. BEGIN_MESSAGE_MAP(CTransmitFileDlg, CDialog)
  37. //{{AFX_MSG_MAP(CTransmitFileDlg)
  38. ON_WM_SIZE()
  39. ON_WM_CLOSE()
  40. ON_WM_DESTROY()
  41. ON_COMMAND(IDR_BACK_RUN, OnBackRun)
  42. ON_COMMAND(IDR_BACK_STOP, OnBackStop)
  43. ON_COMMAND(IDR_BACK_SELALL, OnBackSelall)
  44. ON_COMMAND(IDR_BACK_STOPALL, OnBackStopall)
  45. //}}AFX_MSG_MAP
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CTransmitFileDlg message handlers
  49. void CTransmitFileDlg::OnOK() 
  50. {
  51. // TODO: Add extra validation here
  52. //CDialog::OnOK();
  53. }
  54. void CTransmitFileDlg::OnCancel() 
  55. {
  56. // TODO: Add extra cleanup here
  57. ShowWindow( SW_HIDE ) ;
  58. //CDialog::OnCancel();
  59. }
  60. BOOL CTransmitFileDlg::OnInitDialog() 
  61. {
  62. CDialog::OnInitDialog();
  63. // TODO: Add extra initialization here
  64. m_Bar.Create( WS_CHILD|WS_VISIBLE|CCS_BOTTOM|SBARS_SIZEGRIP,
  65.           CRect(0,0,0,0), this, 0x413 )  ;
  66. RECT rect ;
  67. GetWindowRect( &rect ) ;
  68. rect.top = rect.bottom - 20 ;
  69. m_Bar.SetControlPos( rect.right - rect.left ) ;
  70. m_Bar.MoveWindow( &rect ) ;
  71. m_Bar.SetPos( 0 ) ;
  72. InitList( ) ;
  73. m_Transmit.m_hParentWnd = m_hWnd ;
  74. m_FileQueue.m_hParentWnd = m_hWnd ;
  75. return TRUE;  // return TRUE unless you set the focus to a control
  76.               // EXCEPTION: OCX Property Pages should return FALSE
  77. }
  78. BOOL CTransmitFileDlg::InitList()
  79. {
  80. RECT rect ;
  81. GetClientRect( &rect ) ;
  82. rect.bottom -= 20 ;
  83. m_ListCtrl.Create( WS_CHILD|WS_VISIBLE|LVS_REPORT , 
  84. rect , this , IDC_TRANSMITFILELIST ) ;
  85. m_ListCtrl.SetRowFullSelect( ) ;
  86. m_ListCtrl.SetParentWnd( m_hWnd ) ;
  87. RefreshJobList( ) ;
  88. return true ;
  89. }
  90. void CTransmitFileDlg::OnSize(UINT nType, int cx, int cy) 
  91. {
  92. CDialog::OnSize(nType, cx, cy);
  93. // TODO: Add your message handler code here
  94. RECT rect ;
  95. GetClientRect( &rect ) ;
  96. rect.bottom -= 20 ;
  97. if( m_ListCtrl.m_hWnd )
  98. m_ListCtrl.MoveWindow( &rect , true ) ;
  99. if( m_Bar.m_hWnd )
  100. {
  101. GetWindowRect( &rect ) ;
  102. m_Bar.SetControlPos( rect.right - rect.left ) ;
  103. //Must move the window ,it will auto move to bottom 
  104. m_Bar.MoveWindow( 0 , 0 , 100 , 100 ) ;
  105. }
  106. }
  107. BOOL CTransmitFileDlg::StartTransmitFile( )
  108. {
  109. RefreshJobList( ) ;
  110. m_Transmit.SetFileQueue( &m_FileQueue ) ;
  111. m_Transmit.SetParentWnd( m_hWnd ) ;
  112. m_Transmit.StartTransmit( m_hWnd ) ;
  113. return true ;
  114. }
  115. LRESULT CTransmitFileDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  116. {
  117. // TODO: Add your specialized code here and/or call the base class
  118. switch( message )
  119. {
  120. case REFRESH_WND_MSG :
  121. {
  122. RefreshJobList( ) ;
  123. }
  124. break ;
  125. case FTP_TRANSMIT_DATA_MSG :
  126. {
  127. m_Bar.SetPos( wParam ) ;
  128. m_Bar.SetSpeed( lParam ) ;
  129. }
  130. break ;
  131. case SEND_TRANSMIT_FILENAME_MSG :
  132. {
  133. char* pName ;
  134. pName = (char*)wParam ;
  135. m_Bar.SetDisplayString( pName ) ;
  136. delete pName ;
  137. }
  138. break ;
  139. case JOBLIST_KEYDOWN_MSG :
  140. {
  141. switch( wParam )
  142. {
  143. case VK_DELETE :
  144. DeleteSelectItem( ) ;
  145. break ;
  146. default :
  147. break ;
  148. }
  149. }
  150. break ;
  151. case JOBLIST_RBTN_UP_MSG :
  152. {
  153. POINT point ;
  154. GetCursorPos( &point ) ;
  155. ScreenToClient( &point ) ;
  156. CMenu PopMenu ;
  157. CPoint myPoint ;
  158. myPoint = point ;
  159. ClientToScreen( &myPoint );
  160. PopMenu.LoadMenu( IDR_MAINFRAME ) ;
  161. CMenu *pPopMenu = PopMenu.GetSubMenu( 5 ) ;
  162. pPopMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON , myPoint.x , myPoint.y , this ) ;
  163. PopMenu.DestroyMenu() ;
  164. }
  165. break ;
  166. default :
  167. break ;
  168. }
  169. return CDialog::DefWindowProc(message, wParam, lParam);
  170. }
  171. BOOL CTransmitFileDlg::RefreshJobList()
  172. {
  173. m_ListCtrl.DeleteAllItems( ) ;
  174. FTPFILEINFO* pCur ;
  175. m_FileQueue.LockTheFileList( ) ;
  176. pCur = m_FileQueue.m_pFileTransmitQueue ;
  177. int iItem = 0 ;
  178. while( pCur != NULL )
  179. {
  180. m_ListCtrl.AddItem( pCur , 0 ) ;
  181. pCur = pCur->pNext ;
  182. iItem ++ ;
  183. }
  184. m_FileQueue.UnLockTheFileList() ;
  185. return true ;
  186. }
  187. BOOL CTransmitFileDlg::AddToBkQueue(FTPFILEINFO *pFileInfo)
  188. {
  189. m_FileQueue.AddItem( pFileInfo ) ;
  190. RefreshJobList( ) ;
  191. return true ;
  192. }
  193. void CTransmitFileDlg::OnClose() 
  194. {
  195. // TODO: Add your message handler code here and/or call default
  196. CDialog::OnClose();
  197. }
  198. void CTransmitFileDlg::OnDestroy() 
  199. {
  200. CDialog::OnDestroy();
  201. m_FileQueue.DeleteAllFileQueue( ) ;
  202. // TODO: Add your message handler code here
  203. }
  204. BOOL CTransmitFileDlg::DeleteSelectItem()
  205. {
  206. FTPFILEINFO FtpFile ;
  207. UINT iSelectCount = m_ListCtrl.GetSelectedCount( ) ;
  208. if( iSelectCount <= 0 )
  209. return true ;
  210. int iItem  = -1 ;
  211. for( UINT i= 0 ; i < iSelectCount ; i ++ )
  212. {
  213. iItem = m_ListCtrl.GetNextItem( iItem , LVNI_SELECTED ) ;
  214. m_ListCtrl.GetItemInfo( iItem , &FtpFile ) ;
  215. m_FileQueue.DeleteItem( &FtpFile ) ;
  216. }
  217. RefreshJobList( ) ;
  218. return true ;
  219. }
  220. BOOL CTransmitFileDlg::SetSelectItemStatus(int iState)
  221. {
  222. FTPFILEINFO FtpFile ;
  223. UINT iSelectCount = m_ListCtrl.GetSelectedCount( ) ;
  224. if( iSelectCount <= 0 )
  225. return true ;
  226. int iItem  = -1 ;
  227. for( UINT i= 0 ; i < iSelectCount ; i ++ )
  228. {
  229. iItem = m_ListCtrl.GetNextItem( iItem , LVNI_SELECTED ) ;
  230. m_ListCtrl.GetItemInfo( iItem , &FtpFile ) ;
  231. if( iState == FILE_STATE_STOP )
  232. {
  233. if( FtpFile.state == FILE_STATE_RUNNING )
  234. {
  235. m_Transmit.StopNowCommand( ) ;
  236. }
  237. }
  238. m_FileQueue.SetItemState( iState , &FtpFile ) ;
  239. }
  240. RefreshJobList( ) ;
  241. return true ;
  242. }
  243. void CTransmitFileDlg::OnBackRun() 
  244. {
  245. // TODO: Add your command handler code here
  246. SetSelectItemStatus( FILE_STATE_READY ) ;
  247. StartTransmitFile( ) ;
  248. }
  249. void CTransmitFileDlg::OnBackStop() 
  250. {
  251. // TODO: Add your command handler code here
  252. m_Transmit.SetStopSign( false ) ;
  253. SetSelectItemStatus( FILE_STATE_STOP ) ;
  254. }
  255. void CTransmitFileDlg::OnBackSelall() 
  256. {
  257. // TODO: Add your command handler code here
  258. m_ListCtrl.SelectAllItem( ) ;
  259. }
  260. BOOL CTransmitFileDlg::StopAllTransmitTask()
  261. {
  262. FTPFILEINFO FtpFile ;
  263. UINT iSelectCount = m_ListCtrl.GetItemCount( ) ;
  264. if( iSelectCount <= 0 )
  265. return true ;
  266. int iItem  ;
  267. for( UINT i= 0 ; i < iSelectCount ; i ++ )
  268. {
  269. iItem = i ;
  270. m_ListCtrl.GetItemInfo( iItem , &FtpFile ) ;
  271. if( FtpFile.state == FILE_STATE_RUNNING )
  272. {
  273. m_Transmit.StopNowCommand( ) ;
  274. }
  275. m_FileQueue.SetItemState( FILE_STATE_STOP , &FtpFile ) ;
  276. }
  277. RefreshJobList( ) ;
  278. return true ;
  279. }
  280. void CTransmitFileDlg::OnBackStopall() 
  281. {
  282. // TODO: Add your command handler code here
  283. m_Transmit.SetStopSign( false ) ;
  284. StopAllTransmitTask( ) ;
  285. }