PageFiles.cpp
上传用户:geanq888
上传日期:2007-01-03
资源大小:316k
文件大小:14k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // PageFiles.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "NetManager.h"
  5. #include "PageFiles.h"
  6. #include "GlobalsExtern.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CPageFiles property page
  14. IMPLEMENT_DYNCREATE(CPageFiles, CPropertyPage)
  15. CPageFiles::CPageFiles() : CPropertyPage(CPageFiles::IDD)
  16. {
  17. //{{AFX_DATA_INIT(CPageFiles)
  18. m_sSourceCopyFile = _T("");
  19. m_sDestCopyFile = _T("");
  20. m_bDeleteOnEnd = FALSE;
  21. m_bReturnOnEnd = FALSE;
  22. m_bCopyOnStart = FALSE;
  23. //}}AFX_DATA_INIT
  24.   m_nColumnWidth = 100;
  25. }
  26. CPageFiles::~CPageFiles()
  27. {
  28. }
  29. void CPageFiles::DoDataExchange(CDataExchange* pDX)
  30. {
  31. CPropertyPage::DoDataExchange(pDX);
  32. //{{AFX_DATA_MAP(CPageFiles)
  33. DDX_Control(pDX, IDC_FILESSPIN, m_FilesSpin);
  34. DDX_Control(pDX, IDB_AUTOSTART, m_AutoStart);
  35. DDX_Control(pDX, IDC_FILEPATH, m_FilePath);
  36. DDX_Control(pDX, IDC_FILE_DEST, m_DestCopyFile);
  37. DDX_Control(pDX, IDC_FILE_SOURCE, m_SourceCopyFile);
  38. DDX_Text(pDX, IDC_FILE_SOURCE, m_sSourceCopyFile);
  39. DDX_Text(pDX, IDC_FILE_DEST, m_sDestCopyFile);
  40. DDX_Check(pDX, IDB_ONEND_DELETE, m_bDeleteOnEnd);
  41. DDX_Check(pDX, IDB_ONEND_RETURN, m_bReturnOnEnd);
  42. DDX_Check(pDX, IDB_ONSTART_COPY, m_bCopyOnStart);
  43. //}}AFX_DATA_MAP
  44. }
  45. BEGIN_MESSAGE_MAP(CPageFiles, CPropertyPage)
  46. //{{AFX_MSG_MAP(CPageFiles)
  47. ON_BN_CLICKED(IDC_COPY_FILE, OnCopyFile)
  48. ON_BN_CLICKED(IDC_DELETE_FILE, OnDeleteFile)
  49. ON_BN_CLICKED(IDC_RETURN_FILE, OnReturnFile)
  50. ON_BN_CLICKED(IDC_BROWSE_SOURCEFILE, OnBrowseSourceFile)
  51. ON_BN_CLICKED(IDC_BROWSE_DESTFILE, OnBrowseDestFile)
  52. ON_BN_CLICKED(IDC_ADD_EXE, OnAddExe)
  53. ON_BN_CLICKED(IDC_REMOVE_EXE, OnRemoveExe)
  54. ON_BN_CLICKED(IDC_EXECUTE_EXE, OnExecuteExe)
  55. ON_BN_CLICKED(IDB_AUTOSTART, OnAutostart)
  56. ON_NOTIFY(UDN_DELTAPOS, IDC_FILESSPIN, OnDeltaposFilesspin)
  57. //}}AFX_MSG_MAP
  58. END_MESSAGE_MAP()
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CPageFiles message handlers
  61. UINT g_AddIcon(LPVOID pParam)
  62. {
  63.   CPtrArray* paAddIcon = ((CPtrArray*)pParam);
  64.   CPageFilesExeList* pExeFiles = (CPageFilesExeList*)paAddIcon->GetAt(0);
  65.   ARRAY_EXEFILES* paExeFiles = (ARRAY_EXEFILES*)paAddIcon->GetAt(1);
  66.   CImageList* pImagesSmall = (CImageList*)paAddIcon->GetAt(2);
  67.   CImageList* pImagesLarge = (CImageList*)paAddIcon->GetAt(3);
  68.   CString sIconPath;
  69.   LPSTR psIconPath;
  70.   int j = paExeFiles->GetSize();
  71.   for(int i = 0; i < j; i++)
  72.   {
  73.     sIconPath = paExeFiles->GetAt(i).sPath;
  74.     psIconPath = sIconPath.GetBuffer(MAX_PATH);
  75.     WORD wIconIndex = 0;
  76.     HICON hExeIcon;
  77.     if((hExeIcon = ExtractIcon(AfxGetInstanceHandle(), psIconPath, 0)) != NULL)
  78.     {
  79.       pImagesSmall->Add(hExeIcon);
  80.       pImagesLarge->Add(hExeIcon);
  81.     }
  82.     else if((hExeIcon = ExtractAssociatedIcon(AfxGetInstanceHandle(), psIconPath, &wIconIndex)) != NULL)
  83.     {
  84.       pImagesSmall->Add(hExeIcon);
  85.       pImagesLarge->Add(hExeIcon);
  86.     }
  87.     sIconPath.ReleaseBuffer();
  88.     pExeFiles->Update(i);
  89.   }
  90.   paAddIcon->RemoveAll();
  91.   delete paAddIcon;
  92.   return 0;
  93. }
  94. /////////////////////////////////////////////////////////////////////////////
  95. BOOL CPageFiles::OnInitDialog() 
  96. {
  97. CPropertyPage::OnInitDialog();
  98.   m_ToolTip.Create(this);
  99.   m_ToolTip.Activate(TRUE);
  100.   CWnd* pWnd = GetWindow(GW_CHILD);
  101.   while(pWnd)
  102.   {
  103.     int nID = pWnd->GetDlgCtrlID();
  104.     if (nID != -1)
  105.       m_ToolTip.AddTool(pWnd, pWnd->GetDlgCtrlID());
  106.     pWnd = pWnd->GetWindow(GW_HWNDNEXT);
  107.   }
  108.   m_ExeFiles.SubclassDlgItem(IDC_EXE_FILES, this);
  109. // image list ---------------------------------------------------------------
  110.   m_ImagesSmall.Create(16, 16, ILC_COLORDDB | ILC_MASK, 1, 100);
  111.   m_ImagesLarge.Create(32, 32, ILC_COLORDDB | ILC_MASK, 1, 100);
  112.   m_ImagesStates.Create(16, 16, ILC_COLORDDB | ILC_MASK, 2, 0);
  113.   m_ImagesStates.Add(g_pThisApp->LoadIcon(IDI_UNCHECKED));
  114.   m_ImagesStates.Add(g_pThisApp->LoadIcon(IDI_CHECKED));
  115. m_ExeFiles.SetImageList(&m_ImagesStates, LVSIL_STATE);
  116. return TRUE;  // return TRUE unless you set the focus to a control
  117.               // EXCEPTION: OCX Property Pages should return FALSE
  118. }
  119. /////////////////////////////////////////////////////////////////////////////
  120. void CPageFiles::SetSmallImages()
  121. {
  122.   m_ExeFiles.SetImageList(&m_ImagesSmall, LVSIL_SMALL);
  123.   m_ExeFiles.SetColumnWidth(0, m_FilesSpin.GetPos());
  124. }
  125. /////////////////////////////////////////////////////////////////////////////
  126. void CPageFiles::SetLargeImages()
  127. {
  128.   m_ExeFiles.SetImageList(&m_ImagesLarge, LVSIL_SMALL);
  129.   m_ExeFiles.SetColumnWidth(0, m_FilesSpin.GetPos());
  130. }
  131. /////////////////////////////////////////////////////////////////////////////
  132. UINT g_Execute(LPVOID pParam)
  133. {
  134.   CString sFileToExe = ((CStringArray*)pParam)->GetAt(0);
  135.   CString sFileName = ((CStringArray*)pParam)->GetAt(1);
  136.   ((CStringArray*)pParam)->RemoveAll();
  137.   delete ((CStringArray*)pParam);
  138.   if((int)ShellExecute(::GetDesktopWindow(), _T("open"), sFileToExe, NULL, NULL, SW_NORMAL) < 33)
  139.     g_WriteToHistory(TRUE, "[Files] Error - Execute File " + sFileToExe);
  140.   else
  141.     g_WriteToHistory(TRUE, "[Files] Executed " + sFileName);
  142.   return 0;
  143. }
  144. /////////////////////////////////////////////////////////////////////////////
  145. void CPageFiles::FilesExecute(int nWhich) 
  146. {
  147.   g_AnimateWait->Play(0, -1, -1);
  148.   CString sFileToExe;
  149.   CStringArray* pasFiles = new CStringArray;
  150.   pasFiles->Add(m_aExeFiles[nWhich].sPath);
  151.   pasFiles->Add(m_ExeFiles.GetItemText(nWhich, 0));
  152.   AfxBeginThread(g_Execute, pasFiles);
  153. }
  154. /////////////////////////////////////////////////////////////////////////////
  155. void CPageFiles::OnCopyFile() 
  156. {
  157.   UpdateData();
  158.   FilesCopy();
  159. }
  160. /////////////////////////////////////////////////////////////////////////////
  161. void CPageFiles::FilesCopy() 
  162. {
  163.   g_AnimateWait->Play(0, -1, -1);
  164.   if(!CopyFile(m_sSourceCopyFile, m_sDestCopyFile, FALSE))
  165.     g_WriteToHistory(TRUE, "[Files] Error - Copy file " + m_sSourceCopyFile + " -> " + m_sDestCopyFile);
  166.   else
  167.     g_WriteToHistory(TRUE, "[Files] File copied (" + m_sSourceCopyFile + " -> " + m_sDestCopyFile + ")");
  168. }
  169. /////////////////////////////////////////////////////////////////////////////
  170. void CPageFiles::OnReturnFile() 
  171. {
  172.   UpdateData();
  173.   FilesReturn();
  174. }
  175. /////////////////////////////////////////////////////////////////////////////
  176. void CPageFiles::FilesReturn() 
  177. {
  178.   g_AnimateWait->Play(0, -1, -1);
  179.   if(!CopyFile(m_sDestCopyFile, m_sSourceCopyFile, FALSE))
  180.     g_WriteToHistory(TRUE, "[Files] Error - Return file " + m_sDestCopyFile + " -> " + m_sSourceCopyFile);
  181.   else
  182.     g_WriteToHistory(TRUE, "[Files] File returned (" + m_sDestCopyFile + " -> " + m_sSourceCopyFile + ")");
  183. }
  184. /////////////////////////////////////////////////////////////////////////////
  185. void CPageFiles::OnDeleteFile() 
  186. {
  187.   UpdateData();
  188.   FilesDelete();
  189. }
  190. /////////////////////////////////////////////////////////////////////////////
  191. void CPageFiles::FilesDelete() 
  192. {
  193.   g_AnimateWait->Play(0, -1, -1);
  194.   if(!DeleteFile(m_sDestCopyFile))
  195.     g_WriteToHistory(TRUE, "[Files] Error - Delete file (" + m_sDestCopyFile + ")");
  196.   else
  197.     g_WriteToHistory(TRUE, "[Files] File deleted (" + m_sDestCopyFile + ")");
  198. }
  199. /////////////////////////////////////////////////////////////////////////////
  200. void CPageFiles::OnBrowseSourceFile() 
  201. {
  202.   UpdateData();
  203.   CFileDialog BrowseDialog(TRUE);
  204.   if(BrowseDialog.DoModal() == IDOK)
  205.   {
  206.     m_sSourceCopyFile = BrowseDialog.GetPathName();
  207.     m_SourceCopyFile.SetWindowText(m_sSourceCopyFile);
  208.   }
  209. }
  210. /////////////////////////////////////////////////////////////////////////////
  211. void CPageFiles::OnBrowseDestFile() 
  212. {
  213.   UpdateData();
  214.   CFileDialog BrowseDialog(TRUE);
  215.   if(BrowseDialog.DoModal() == IDOK)
  216.   {
  217.     m_sDestCopyFile = BrowseDialog.GetPathName();
  218.     m_DestCopyFile.SetWindowText(m_sDestCopyFile);
  219.   }
  220. }
  221. /////////////////////////////////////////////////////////////////////////////
  222. void CPageFiles::OnAddExe() 
  223. {
  224.   CFileDialog AddExeDialog(TRUE);
  225.   if(AddExeDialog.DoModal() == IDOK)
  226.     AddExe(AddExeDialog.GetPathName());
  227. }
  228. /////////////////////////////////////////////////////////////////////////////
  229. void CPageFiles::AddExe(CString sPath)
  230. {
  231.   EXEFILE exefile;
  232.   exefile.sPath = sPath;
  233.   exefile.nAutoStart = 0;
  234.   CString sName = sPath;
  235.   sName.MakeReverse();
  236.   sName = sName.Left(sName.Find('\'));
  237.   sName.MakeReverse();
  238.   exefile.sName = sName;
  239.   int i = m_ExeFiles.InsertItem(m_ExeFiles.GetItemCount(), sName);
  240.   if(i != -1)
  241.   {
  242.     m_aExeFiles.Add(exefile);
  243.     HICON hExeIcon;
  244.     char* psIconPath;
  245.     WORD wIconIndex = 0;
  246.     psIconPath = sPath.GetBuffer(MAX_PATH);
  247.     if((hExeIcon = ExtractIcon(AfxGetInstanceHandle(), psIconPath, 0)) != NULL)
  248.     {
  249.       m_ImagesSmall.Add(hExeIcon);
  250.       m_ImagesLarge.Add(hExeIcon);
  251.     }
  252.     else if((hExeIcon = ExtractAssociatedIcon(AfxGetInstanceHandle(), psIconPath, &wIconIndex)) != NULL)
  253.     {
  254.       m_ImagesSmall.Add(hExeIcon);
  255.       m_ImagesLarge.Add(hExeIcon);
  256.     }
  257.     sPath.ReleaseBuffer();
  258.     m_ExeFiles.SetItem(i, NULL, LVIF_IMAGE, NULL, i, NULL, NULL, NULL);
  259.     m_ExeFiles.SetItemState(i, INDEXTOSTATEIMAGEMASK(1), LVIS_STATEIMAGEMASK);
  260.     g_WriteToHistory(TRUE, "[Files] Added " + sName);
  261.   }
  262. }
  263. /////////////////////////////////////////////////////////////////////////////
  264. void CPageFiles::OnRemoveExe() 
  265. {
  266.   if(m_ExeFiles.GetSelectedCount() != 0)
  267.   {
  268.     if(MessageBox("Remove item(s)???", NULL, MB_ICONQUESTION | MB_YESNO) == IDYES)
  269.     {
  270.       int nItem = -1;
  271.       while((nItem = m_ExeFiles.GetNextItem(nItem, LVNI_SELECTED)) != -1)
  272.       {
  273.         g_WriteToHistory(TRUE, "[Files] Removed " + m_ExeFiles.GetItemText(nItem, 0));
  274.         m_ExeFiles.DeleteItem(nItem);
  275.         m_aExeFiles.RemoveAt(nItem);
  276.         m_ImagesSmall.Remove(nItem);
  277.         m_ImagesLarge.Remove(nItem);
  278.         m_FilePath.SetWindowText("");
  279.         nItem = -1;
  280.       }
  281.       int j = m_ExeFiles.GetItemCount();
  282.       for(int i = 0; i < j; i++)
  283.       {
  284.         m_ExeFiles.SetItem(i, NULL, LVIF_IMAGE, NULL, i, NULL, NULL, NULL);
  285.         m_ExeFiles.SetItemState(i, INDEXTOSTATEIMAGEMASK(m_aExeFiles[i].nAutoStart + 1), LVIS_STATEIMAGEMASK);
  286.       }
  287.     }
  288.   }
  289. }
  290. /////////////////////////////////////////////////////////////////////////////
  291. void CPageFiles::OnExecuteExe() 
  292. {
  293.   if(m_ExeFiles.GetSelectedCount() != 0)
  294.   {
  295.     int nWhichItem = 0;
  296.     if(m_ExeFiles.GetSelectedCount() == 1)
  297.     {
  298.       while(m_ExeFiles.GetItemState(nWhichItem, LVIS_SELECTED) != LVIS_SELECTED)
  299.         nWhichItem++;
  300.     }
  301.     FilesExecute(nWhichItem);
  302.   }
  303. }
  304. /////////////////////////////////////////////////////////////////////////////
  305. void CPageFiles::OnAutostart() 
  306. {
  307.   if(m_ExeFiles.GetSelectedCount() != 0)
  308.     m_ExeFiles.SwitchExeAuto();
  309. }
  310. /////////////////////////////////////////////////////////////////////////////
  311. BOOL CPageFiles::PreTranslateMessage(MSG* pMsg) 
  312. {
  313.   // transate the message based on TTM_WINDOWFROMPOINT
  314.   MSG msg = *pMsg;
  315.   msg.hwnd = (HWND)m_ToolTip.SendMessage(TTM_WINDOWFROMPOINT, 0, (LPARAM)&msg.pt);
  316.   CPoint pt = pMsg->pt;
  317.   if (msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST)
  318.           ::ScreenToClient(msg.hwnd, &pt);
  319.   msg.lParam = MAKELONG(pt.x, pt.y);
  320.   // Let the ToolTip process this message.
  321.   m_ToolTip.RelayEvent(&msg);
  322.   if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
  323.   {
  324.     switch(GetFocus()->GetDlgCtrlID())
  325.     {
  326.       case IDC_FILE_SOURCE:
  327.         NextDlgCtrl();
  328.         break;
  329.       case IDC_FILE_DEST:
  330.         NextDlgCtrl();
  331.         break;
  332.     }
  333.   }
  334. return CPropertyPage::PreTranslateMessage(pMsg);
  335. }
  336. /////////////////////////////////////////////////////////////////////////////
  337. void CPageFiles::OnDeltaposFilesspin(NMHDR* pNMHDR, LRESULT* pResult) 
  338. {
  339. NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
  340.   m_ExeFiles.SetColumnWidth(0, m_FilesSpin.GetPos());
  341. *pResult = 0;
  342. }
  343. /////////////////////////////////////////////////////////////////////////////
  344. void CPageFiles::Serialize(CArchive& ar) 
  345. {
  346. if (ar.IsStoring())
  347. { // storing code
  348.     ar << m_ExeFiles.GetColumnWidth(0);
  349.     int j = m_aExeFiles.GetSize();
  350.     ar << j;
  351.     for(int i = 0; i < j; i++)
  352.     {
  353.       ar << m_aExeFiles[i].sName;
  354.       ar << m_aExeFiles[i].sPath;
  355.       ar << m_aExeFiles[i].nAutoStart;
  356.     }
  357.     ar << m_sSourceCopyFile;
  358.     ar << m_sDestCopyFile;
  359.     ar << m_bCopyOnStart;
  360.     ar << m_bReturnOnEnd;
  361.     ar << m_bDeleteOnEnd;
  362. }
  363. else
  364. { // loading code
  365.     ar >> m_nColumnWidth;
  366.     m_FilesSpin.SetRange(32, 400);
  367.     m_FilesSpin.SetPos(m_nColumnWidth);
  368.     m_ExeFiles.SetColumnWidth(0, m_nColumnWidth);
  369.     EXEFILE exefile;
  370.     int j;;
  371.     ar >> j;
  372.     for(int i = 0; i < j; i++)
  373.     {
  374.       ar >> exefile.sName;
  375.       ar >> exefile.sPath;
  376.       ar >> exefile.nAutoStart;
  377.       m_aExeFiles.Add(exefile);
  378.       m_ExeFiles.InsertItem(i, m_aExeFiles[i].sName);
  379.       m_ExeFiles.SetItem(i, NULL, LVIF_IMAGE, NULL, i, NULL, NULL, NULL);
  380.       m_ExeFiles.SetItemState(i, INDEXTOSTATEIMAGEMASK(m_aExeFiles[i].nAutoStart + 1), LVIS_STATEIMAGEMASK);
  381.     }
  382.     CPtrArray* paIcon = new CPtrArray;
  383.     paIcon->Add(&m_ExeFiles);
  384.     paIcon->Add(&m_aExeFiles);
  385.     paIcon->Add(&m_ImagesSmall);
  386.     paIcon->Add(&m_ImagesLarge);
  387.     AfxBeginThread(g_AddIcon, paIcon);
  388.     ar >> m_sSourceCopyFile;
  389.     ar >> m_sDestCopyFile;
  390.     ar >> m_bCopyOnStart;
  391.     ar >> m_bReturnOnEnd;
  392.     ar >> m_bDeleteOnEnd;
  393.     if(!g_bExeImages)
  394.       SetSmallImages();
  395.     else
  396.       SetLargeImages();
  397. }
  398. }
  399. /////////////////////////////////////////////////////////////////////////////