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

Ftp客户端

开发平台:

Visual C++

  1. // NetManagerDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "NetManager.h"
  5. #include "NetManagerDlg.h"
  6. #include "GlobalsExtern.h"
  7. #include <afxpriv.h>
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. static UINT auIDStatusBar[] = 
  14.   ID_SEPARATOR
  15. };
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CNetManagerDlg dialog
  18. CNetManagerDlg::CNetManagerDlg(CWnd* pParent /*=NULL*/)
  19. : CDialog(CNetManagerDlg::IDD, pParent)
  20. {
  21. //{{AFX_DATA_INIT(CNetManagerDlg)
  22. m_sOutput = _T("");
  23. //}}AFX_DATA_INIT
  24. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  25.   g_pThisApp = AfxGetApp();
  26.   g_bAutoSaveSettings = true;
  27. m_hIcon = g_pThisApp->LoadIcon(IDR_MAINFRAME);
  28.   m_bDlgCreated = false;
  29.   m_bStarted = false;
  30.   m_dlgPropSheet =  new CPropertySheet;
  31.   m_pPageGeneral =  new CPageGeneral;
  32.   m_pPageFiles =    new CPageFiles;
  33.   m_pPageYou =      new CPageYou;
  34.   m_pPageNet =      new CPageNet;
  35.   m_pPagePeople =   new CPagePeople;
  36.   m_pPageMail =     new CPageMail;
  37.   m_BlinkState = true;
  38.   m_nHistoryFontSize = 8;
  39.   m_sHistoryFontFace = "Arial";
  40.   m_nOutputFontSize = 10;
  41.   m_sOutputFontFace = "Courier";
  42.   // init globals
  43.   g_History = &m_History;
  44.   g_Output = &m_Output;
  45.   g_AnimateWait = &m_AnimateWait;
  46.   g_AnimatePeople = &m_AnimatePeople;
  47.   g_AnimateNet = &m_AnimateNet;
  48. }
  49. void CNetManagerDlg::DoDataExchange(CDataExchange* pDX)
  50. {
  51. CDialog::DoDataExchange(pDX);
  52. //{{AFX_DATA_MAP(CNetManagerDlg)
  53. DDX_Control(pDX, IDC_INFOTREE, m_InfoTree);
  54. DDX_Control(pDX, IDC_ANIMATE_WAIT, m_AnimateWait);
  55. DDX_Control(pDX, IDC_ANIMATE_NET, m_AnimateNet);
  56. DDX_Control(pDX, IDC_ANIMATE_PEOPLE, m_AnimatePeople);
  57. DDX_Control(pDX, IDB_CLEAR_OUTPUT, m_ClearOutput);
  58. DDX_Text(pDX, IDC_OUTPUT, m_sOutput);
  59. //}}AFX_DATA_MAP
  60. }
  61. BEGIN_MESSAGE_MAP(CNetManagerDlg, CDialog)
  62. //{{AFX_MSG_MAP(CNetManagerDlg)
  63. ON_WM_PAINT()
  64. ON_WM_QUERYDRAGICON()
  65. ON_BN_CLICKED(IDB_SHOW_OUTPUT, OnShowOutput)
  66. ON_BN_CLICKED(IDB_CLEAR_OUTPUT, OnClearOutput)
  67. ON_BN_CLICKED(IDB_START, OnStart)
  68. ON_WM_TIMER()
  69. ON_BN_CLICKED(IDB_END, OnEnd)
  70. ON_WM_HELPINFO()
  71. ON_EN_CHANGE(IDC_OUTPUT, OnChangeOutput)
  72. ON_WM_SIZE()
  73. ON_WM_GETMINMAXINFO()
  74. ON_WM_ACTIVATE()
  75. ON_NOTIFY(TCN_SELCHANGE, IDC_TABCTRL_OUTPUT, OnSelchangeTabctrlOutput)
  76. ON_EN_CHANGE(IDC_HISTORY, OnChangeHistory)
  77. ON_NOTIFY(TVN_SELCHANGED, IDC_INFOTREE, OnSelchangedInfotree)
  78. ON_WM_SETCURSOR()
  79. ON_WM_SETTINGCHANGE()
  80. ON_WM_MENUSELECT()
  81. //}}AFX_MSG_MAP
  82. END_MESSAGE_MAP()
  83. /////////////////////////////////////////////////////////////////////////////
  84. // CNetManagerDlg message handlers
  85. void CNetManagerDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
  86. {
  87.   if(m_bDlgCreated)
  88.   {
  89.     lpMMI->ptMinTrackSize.x = DLG_MIN_WIDTH;
  90.     lpMMI->ptMaxTrackSize.x = DLG_MAX_WIDTH;
  91.     lpMMI->ptMinTrackSize.y = m_nDlgHeight;
  92.     lpMMI->ptMaxTrackSize.y = m_nDlgHeight;
  93.   }
  94. }
  95. /////////////////////////////////////////////////////////////////////////////
  96. void CNetManagerDlg::OnSize(UINT nType, int cx, int cy) 
  97. {
  98. CDialog::OnSize(nType, cx, cy);
  99.   if(m_bDlgCreated)
  100.   {
  101.     ResizeWindows();
  102.     // We need to resize the dialog to make room for control bars.
  103.   // First, figure out how big the control bars are.
  104.   CRect rcClientStart;
  105.   CRect rcClientNow;
  106.   GetClientRect(rcClientStart);
  107.   RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, reposQuery, rcClientNow);
  108.   // Now move all the controls so they are in the same relative
  109.   // position within the remaining client area as they would be
  110.   // with no control bars.
  111.   CPoint ptOffset(rcClientNow.left - rcClientStart.left, rcClientNow.top - rcClientStart.top); 
  112.   CRect  rcChild;
  113.   CWnd* pwndChild = GetWindow(GW_CHILD);
  114.   while (pwndChild)
  115.   {                               
  116.   pwndChild->GetWindowRect(rcChild);
  117.   ScreenToClient(rcChild);
  118.   rcChild.OffsetRect(ptOffset);
  119.   pwndChild->MoveWindow(rcChild, FALSE);
  120.   pwndChild = pwndChild->GetNextWindow();
  121.   }
  122.   // Adjust the dialog window dimensions
  123.   CRect rcWindow;
  124.   GetWindowRect(rcWindow);
  125.   rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
  126.   rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
  127.   MoveWindow(rcWindow, FALSE);
  128.   
  129.   // And position the control bars
  130.   RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
  131.   }
  132. /*
  133.   // for menu (more than 1 row of main menu (while resizing))
  134.   CRect rc;
  135.   GetClientRect(rc);
  136.   if(rc.Height() != m_nDlgClientHeight)
  137.     m_nDlgHeight += m_nDlgClientHeight - rc.Height();   // new height
  138. */
  139. }
  140. /////////////////////////////////////////////////////////////////////////////
  141. BOOL CNetManagerDlg::OnInitDialog()
  142. {
  143. CDialog::OnInitDialog();
  144. // Set the icon for this dialog.  The framework does this automatically
  145. //  when the application's main window is not a dialog
  146. SetIcon(m_hIcon, TRUE); // Set big icon
  147. SetIcon(m_hIcon, FALSE); // Set small icon
  148.   m_Output.SubclassDlgItem(IDC_OUTPUT, this);
  149.   m_History.SubclassDlgItem(IDC_HISTORY, this);
  150.   m_InfoWindow.SubclassDlgItem(IDC_INFOWINDOW, this);
  151.   m_OutputTabCtrl.SubclassDlgItem(IDC_TABCTRL_OUTPUT, this);
  152.   m_History.ShowWindow(SW_SHOWNA);
  153.   m_Output.ShowWindow(SW_HIDE);
  154.   m_InfoTree.ShowWindow(SW_HIDE);
  155.   m_InfoWindow.ShowWindow(SW_HIDE);
  156. // ToolTips -----------------------------------------------------------------
  157.   m_ToolTip.Create(this);
  158.   m_ToolTip.Activate(TRUE);
  159.   CWnd* pWnd = GetWindow(GW_CHILD);
  160.   while(pWnd)
  161.   {
  162.     int nID = pWnd->GetDlgCtrlID();
  163.     if (nID != -1)
  164.       m_ToolTip.AddTool(pWnd, pWnd->GetDlgCtrlID());
  165.     pWnd = pWnd->GetWindow(GW_HWNDNEXT);
  166.   }
  167. // Tab control buttons ------------------------------------------------------
  168.   m_OutputTabButtons.Create(16, 16, ILC_COLOR8 | ILC_MASK, 3, 0);
  169.   m_OutputTabButtons.Add(AfxGetApp()->LoadIcon(IDI_HISTORY));
  170.   m_OutputTabButtons.Add(AfxGetApp()->LoadIcon(IDI_OUTPUT));
  171.   m_OutputTabButtons.Add(AfxGetApp()->LoadIcon(IDI_INFO));
  172.   m_OutputTabCtrl.SetImageList(&m_OutputTabButtons);
  173.   TC_ITEM TabCtrlItem;
  174.   TabCtrlItem.mask = TCIF_TEXT | TCIF_IMAGE;
  175.   TabCtrlItem.iImage = 0;
  176.   TabCtrlItem.pszText = "History";
  177.   m_OutputTabCtrl.InsertItem(0, &TabCtrlItem);
  178.   TabCtrlItem.iImage = 1;
  179.   TabCtrlItem.pszText = "Output";
  180.   m_OutputTabCtrl.InsertItem(1, &TabCtrlItem);
  181.   TabCtrlItem.iImage = 2;
  182.   TabCtrlItem.pszText = "Info";
  183.   m_OutputTabCtrl.InsertItem(2, &TabCtrlItem);
  184. // Info Tree ----------------------------------------------------------------
  185.   m_InfoImages.Create(16, 16, ILC_COLOR8 | ILC_MASK, 2, 0);
  186.   m_InfoImages.Add(AfxGetApp()->LoadIcon(IDI_INFOROOT));
  187.   m_InfoImages.Add(AfxGetApp()->LoadIcon(IDI_INFOROOTOPEN));
  188.   m_InfoImages.Add(AfxGetApp()->LoadIcon(IDI_INFOTEXT));
  189.   m_InfoImages.Add(AfxGetApp()->LoadIcon(IDI_INFOTEXTOPEN));
  190.   m_InfoTree.SetImageList(&m_InfoImages, TVSIL_NORMAL);
  191.   HTREEITEM hTreeItem1;
  192.   HTREEITEM hTreeItem2;
  193.   hTreeItem1 = m_InfoTree.InsertItem("NetManager", 0, 1, TVI_ROOT, TVI_LAST);
  194.   m_InfoTree.SetItemData(hTreeItem1, IDS_INFO_NETMANAGER);
  195.   hTreeItem2 = m_InfoTree.InsertItem("What is NetManager?", 2, 3, hTreeItem1, TVI_LAST);
  196.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_NETMANAGER_WHATIS);
  197.   hTreeItem2 = m_InfoTree.InsertItem("Version", 2, 3, hTreeItem1, TVI_LAST);
  198.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_NETMANAGER_VERSION);
  199.   hTreeItem2 = m_InfoTree.InsertItem("What's new?", 2, 3, hTreeItem1, TVI_LAST);
  200.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_NETMANAGER_NEW);
  201.   hTreeItem2 = m_InfoTree.InsertItem("Author", 2, 3, hTreeItem1, TVI_LAST);
  202.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_NETMANAGER_AUTHOR);
  203.   hTreeItem1 = m_InfoTree.InsertItem("General Functions", 0, 1, TVI_ROOT, TVI_LAST);
  204.   m_InfoTree.SetItemData(hTreeItem1, IDS_INFO_GENERAL);
  205.   hTreeItem2 = m_InfoTree.InsertItem("Start All", 2, 3, hTreeItem1, TVI_LAST);
  206.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_GENERAL_STARTALL);
  207.   hTreeItem2 = m_InfoTree.InsertItem("End All", 2, 3, hTreeItem1, TVI_LAST);
  208.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_GENERAL_ENDALL);
  209.   hTreeItem2 = m_InfoTree.InsertItem("Automatization", 2, 3, hTreeItem1, TVI_LAST);
  210.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_GENERAL_AUTOMATIZATION);
  211.   hTreeItem1 = m_InfoTree.InsertItem("Page 1 - Utilities", 0, 1, TVI_ROOT, TVI_LAST);
  212.   m_InfoTree.SetItemData(hTreeItem1, IDS_INFO_PAGE1);
  213.   hTreeItem2 = m_InfoTree.InsertItem("Resolve Address", 2, 3, hTreeItem1, TVI_LAST);
  214.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE1_RESOLVE);
  215.   hTreeItem2 = m_InfoTree.InsertItem("Ping a Computer", 2, 3, hTreeItem1, TVI_LAST);
  216.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE1_PING);
  217.   hTreeItem2 = m_InfoTree.InsertItem("Browse Local Network", 2, 3, hTreeItem1, TVI_LAST);
  218.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE1_BROWSE);
  219.   hTreeItem2 = m_InfoTree.InsertItem("Enumerate Any Address", 2, 3, hTreeItem1, TVI_LAST);
  220.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE1_ENUMERATE);
  221.   hTreeItem1 = m_InfoTree.InsertItem("Page 2 - Files", 0, 1, TVI_ROOT, TVI_LAST);
  222.   m_InfoTree.SetItemData(hTreeItem1, IDS_INFO_PAGE2);
  223.   hTreeItem2 = m_InfoTree.InsertItem("Executables", 2, 3, hTreeItem1, TVI_LAST);
  224.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE2_EXECUTABLES);
  225.   hTreeItem2 = m_InfoTree.InsertItem("Copying", 2, 3, hTreeItem1, TVI_LAST);
  226.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE2_COPYING);
  227.   hTreeItem1 = m_InfoTree.InsertItem("Page 3 - You", 0, 1, TVI_ROOT, TVI_LAST);
  228.   m_InfoTree.SetItemData(hTreeItem1, IDS_INFO_PAGE3);
  229.   hTreeItem2 = m_InfoTree.InsertItem("On", 2, 3, hTreeItem1, TVI_LAST);
  230.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE3_ON);
  231.   hTreeItem2 = m_InfoTree.InsertItem("Off", 2, 3, hTreeItem1, TVI_LAST);
  232.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE3_OFF);
  233.   hTreeItem2 = m_InfoTree.InsertItem("HTML File", 2, 3, hTreeItem1, TVI_LAST);
  234.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE3_HTML);
  235.   hTreeItem1 = m_InfoTree.InsertItem("Page 4 - Net", 0, 1, TVI_ROOT, TVI_LAST);
  236.   m_InfoTree.SetItemData(hTreeItem1, IDS_INFO_PAGE4);
  237.   hTreeItem2 = m_InfoTree.InsertItem("Check All", 2, 3, hTreeItem1, TVI_LAST);
  238.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE4_CHECKALL);
  239.   hTreeItem2 = m_InfoTree.InsertItem("Monitoring", 2, 3, hTreeItem1, TVI_LAST);
  240.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE4_MONITORING);
  241.   hTreeItem1 = m_InfoTree.InsertItem("Page 5 - People", 0, 1, TVI_ROOT, TVI_LAST);
  242.   m_InfoTree.SetItemData(hTreeItem1, IDS_INFO_PAGE5);
  243.   hTreeItem2 = m_InfoTree.InsertItem("Inserting Data", 2, 3, hTreeItem1, TVI_LAST);
  244.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE5_INSERTING);
  245.   hTreeItem2 = m_InfoTree.InsertItem("Finger", 2, 3, hTreeItem1, TVI_LAST);
  246.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE5_FINGER);
  247.   hTreeItem2 = m_InfoTree.InsertItem("Manual Finger", 2, 3, hTreeItem1, TVI_LAST);
  248.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE5_MANUAL);
  249.   hTreeItem2 = m_InfoTree.InsertItem("Active", 2, 3, hTreeItem1, TVI_LAST);
  250.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE5_ACTIVE);
  251.   hTreeItem2 = m_InfoTree.InsertItem("Check All", 2, 3, hTreeItem1, TVI_LAST);
  252.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE5_CHECKALL);
  253.   hTreeItem2 = m_InfoTree.InsertItem("Monitoring", 2, 3, hTreeItem1, TVI_LAST);
  254.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE5_MONITORING);
  255.   hTreeItem1 = m_InfoTree.InsertItem("Page 6 - Mail", 0, 1, TVI_ROOT, TVI_LAST);
  256.   m_InfoTree.SetItemData(hTreeItem1, IDS_INFO_PAGE6);
  257.   hTreeItem2 = m_InfoTree.InsertItem("Configuring", 2, 3, hTreeItem1, TVI_LAST);
  258.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE6_CONFIGURING);
  259.   hTreeItem2 = m_InfoTree.InsertItem("Settings", 2, 3, hTreeItem1, TVI_LAST);
  260.   m_InfoTree.SetItemData(hTreeItem2, IDS_INFO_PAGE6_SETTINGS);
  261.   hTreeItem1 = m_InfoTree.InsertItem("Tips & FAQs", 0, 1, TVI_ROOT, TVI_LAST);
  262.   m_InfoTree.SetItemData(hTreeItem1, IDS_INFO_TIPSFAQS);
  263. // AVI Files ----------------------------------------------------------------
  264.   if(m_AnimateWait.Open(IDR_AVI_WAIT) == 0)
  265.     AfxMessageBox("Error - Could not insert AVI file");
  266.   
  267.   if(m_AnimatePeople.Open(IDR_AVI_PEOPLE) == 0)
  268.     AfxMessageBox("Error - Could not insert AVI file");
  269.   if(m_AnimateNet.Open(IDR_AVI_NET) == 0)
  270.     AfxMessageBox("Error - Could not insert AVI file");
  271.   m_ClearOutput.EnableWindow(FALSE);
  272.   m_pOutput = (CEdit*)GetDlgItem(IDC_OUTPUT);
  273. // Change the path for INI file ---------------------------------------------
  274.   CString sModFileName;
  275.   GetModuleFileName(NULL, sModFileName.GetBuffer(MAX_PATH), MAX_PATH);
  276.   sModFileName.ReleaseBuffer();
  277.   sModFileName.MakeReverse();
  278.   m_sIniFilePath = sModFileName.Right(sModFileName.GetLength() - sModFileName.Find('\'));
  279.   m_sIniFilePath.MakeReverse();
  280.   m_sBakIniFilePath = m_sIniFilePath + "netmanag.old";
  281.   m_sIniFilePath += "netmanag.ini";
  282.   sModFileName.MakeReverse();
  283.   free((void*)g_pThisApp->m_pszProfileName);
  284.   g_pThisApp->m_pszProfileName = _tcsdup(m_sIniFilePath);
  285. // init prop. sheet ---------------------------------------------------------
  286.   m_dlgPropSheet->AddPage(m_pPageGeneral);
  287.   m_dlgPropSheet->AddPage(m_pPageFiles);
  288.   m_dlgPropSheet->AddPage(m_pPageYou);
  289.   m_dlgPropSheet->AddPage(m_pPageNet);
  290.   m_dlgPropSheet->AddPage(m_pPagePeople);
  291.   m_dlgPropSheet->AddPage(m_pPageMail);
  292.   m_dlgPropSheet->Create(this, WS_CHILD | WS_VISIBLE | WS_TABSTOP, WS_EX_CONTROLPARENT);
  293.   m_ButtonImages.Create(16, 16, ILC_COLORDDB | ILC_MASK, 5, 0);
  294.   m_ButtonImages.Add(g_pThisApp->LoadIcon(IDI_GENERAL));
  295.   m_ButtonImages.Add(g_pThisApp->LoadIcon(IDI_FILES));
  296.   m_ButtonImages.Add(g_pThisApp->LoadIcon(IDI_YOU));
  297.   m_ButtonImages.Add(g_pThisApp->LoadIcon(IDI_NET));
  298.   m_ButtonImages.Add(g_pThisApp->LoadIcon(IDI_PEOPLE));
  299.   m_ButtonImages.Add(g_pThisApp->LoadIcon(IDI_MAIL));
  300.   CTabCtrl* pTab = m_dlgPropSheet->GetTabControl();
  301.   pTab->SetImageList(&m_ButtonImages);
  302.   TC_ITEM tcItem;
  303.   tcItem.mask = TCIF_IMAGE;
  304.   for(int i = 0; i < 6; i++)
  305.   {
  306.     tcItem.iImage = i;
  307.     pTab->SetItem(i, &tcItem);
  308.   }
  309.   CRect rcSheet;
  310.   GetWindowRect(&rcSheet);
  311.   m_dlgPropSheet->SetWindowPos(NULL, rcSheet.left - 4, rcSheet.top - 4, rcSheet.Width(), rcSheet.Height(),
  312.                 SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);
  313.   m_dlgPropSheet->SetActivePage(1);
  314.   m_dlgPropSheet->SetActivePage(2);
  315.   m_dlgPropSheet->SetActivePage(3);
  316.   m_dlgPropSheet->SetActivePage(4);
  317.   m_dlgPropSheet->SetActivePage(5);
  318.   m_dlgPropSheet->SetActivePage(0);
  319.   CFile SouborProfilu;
  320.   TRY
  321.   {
  322.     if(SouborProfilu.Open(m_sIniFilePath, CFile::modeRead))
  323.     {
  324.       CArchive archive(&SouborProfilu, CArchive::load);
  325.       TRY
  326.         Serialize(archive);
  327.         m_pPageFiles->Serialize(archive);
  328.         m_pPageYou->Serialize(archive);
  329.         m_pPageNet->Serialize(archive);
  330.         m_pPageMail->m_PageMailPop3.Serialize(archive);
  331.         m_pPageMail->m_PageMailSmtp.Serialize(archive);
  332.         m_pPagePeople->Serialize(archive);
  333.       CATCH(CMemoryException, pe)
  334.         pe->ReportError();
  335.       AND_CATCH(CArchiveException, pe)
  336.         pe->ReportError();
  337.       AND_CATCH(CFileException, pe)
  338.         pe->ReportError();
  339.       END_CATCH
  340.       archive.Close();
  341.       SouborProfilu.Close();
  342.     }
  343.   }
  344.   CATCH(CFileException, pe)
  345.     pe->ReportError();
  346.   END_CATCH
  347.   CRect rcDlg;
  348.   GetWindowRect(&rcDlg);
  349.   m_nDlgDefaultWidth = rcDlg.Width();
  350.   int nMaxWindowWidth = DLG_MAX_WIDTH;
  351.   if(m_nWindowWidth > nMaxWindowWidth)
  352.     m_nWindowWidth = m_nDlgDefaultWidth;
  353.   if(m_nWindowWidth < DLG_MIN_WIDTH)
  354.   m_nWindowWidth = m_nDlgDefaultWidth;
  355.   rcDlg.right = rcDlg.left + m_nWindowWidth;
  356.   MoveWindow(rcDlg);
  357.   ///////////////////////////////////////////////////////////////////////////
  358. // Create status bar at the bottom of the dialog window                
  359. if(m_StatusBar.Create(this))
  360. {                           
  361. m_StatusBar.SetIndicators(auIDStatusBar, sizeof(auIDStatusBar) / sizeof(UINT));
  362.     m_StatusBar.SetWindowText("NetManager");
  363.     m_StatusBar.SetPaneInfo(0, m_StatusBar.GetItemID(0), SBPS_STRETCH, NULL );
  364. }             
  365.   else
  366.     AfxMessageBox("Error - Statusbar");
  367.   // We need to resize the dialog to make room for control bars.
  368. // First, figure out how big the control bars are.
  369. CRect rcClientStart;
  370. CRect rcClientNow;
  371. GetClientRect(rcClientStart);
  372. RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, reposQuery, rcClientNow);
  373. // Now move all the controls so they are in the same relative
  374. // position within the remaining client area as they would be
  375. // with no control bars.
  376. CPoint ptOffset(rcClientNow.left - rcClientStart.left, rcClientNow.top - rcClientStart.top); 
  377. CRect  rcChild;
  378. CWnd* pwndChild = GetWindow(GW_CHILD);
  379. while (pwndChild)
  380. {                               
  381. pwndChild->GetWindowRect(rcChild);
  382. ScreenToClient(rcChild);
  383. rcChild.OffsetRect(ptOffset);
  384. pwndChild->MoveWindow(rcChild, FALSE);
  385. pwndChild = pwndChild->GetNextWindow();
  386. }
  387. // Adjust the dialog window dimensions
  388. CRect rcWindow;
  389. GetWindowRect(rcWindow);
  390. rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
  391. rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
  392. MoveWindow(rcWindow, FALSE);
  393. // And position the control bars
  394. RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
  395. // Dialog windows resizing //////////////////////////////////////////////////
  396.   GetClientRect(&rcDlg);
  397.   m_nDlgHeight = 10 + rcDlg.Height() + GetSystemMetrics(SM_CYMENUSIZE) + GetSystemMetrics(SM_CYSIZE);
  398.   ResizeWindows();
  399.   // for menu (number of lines)
  400.   CRect rc;
  401.   GetClientRect(rc);
  402.   m_nDlgClientHeight = rc.Height();
  403. /*
  404.   CRect rcOriginal;
  405.   GetClientRect(rcOriginal);
  406.   if(rcOriginal.Height() < (rc.Height() + GetSystemMetrics(SM_CYMENUSIZE)))
  407.   {
  408.     m_nDlgHeight += GetSystemMetrics(SM_CYMENUSIZE);
  409.     m_nDlgClientHeight += GetSystemMetrics(SM_CYMENUSIZE);
  410.   }
  411. */
  412. // menu ///////////////////////////////////////////////////////////////////////
  413.   CMenu* pMenu = GetMenu();
  414.   if(g_bStarting)
  415.     pMenu->CheckMenuItem(IDM_STARTING, MF_CHECKED | MF_BYCOMMAND);
  416.   else
  417.     pMenu->CheckMenuItem(IDM_STARTING, MF_UNCHECKED | MF_BYCOMMAND);
  418.   if(g_bEnding)
  419.     pMenu->CheckMenuItem(IDM_ENDING, MF_CHECKED | MF_BYCOMMAND);
  420.   else
  421.     pMenu->CheckMenuItem(IDM_ENDING, MF_UNCHECKED | MF_BYCOMMAND);
  422.   if(g_bNetMonitoring)
  423.     pMenu->CheckMenuItem(IDM_NETMONITORING, MF_CHECKED | MF_BYCOMMAND);
  424.   else
  425.     pMenu->CheckMenuItem(IDM_NETMONITORING, MF_UNCHECKED | MF_BYCOMMAND);
  426.   if(g_bPeopleMonitoring)
  427.     pMenu->CheckMenuItem(IDM_PEOPLEMONITORING, MF_CHECKED | MF_BYCOMMAND);
  428.   else
  429.     pMenu->CheckMenuItem(IDM_PEOPLEMONITORING, MF_UNCHECKED | MF_BYCOMMAND);
  430.   if(g_bAutoSaveSettings)
  431.     pMenu->CheckMenuItem(IDM_AUTOSAVE, MF_CHECKED | MF_BYCOMMAND);
  432.   else
  433.     pMenu->CheckMenuItem(IDM_AUTOSAVE, MF_UNCHECKED | MF_BYCOMMAND);
  434.   if(g_bWinNotification)
  435.     pMenu->CheckMenuItem(IDM_NOTIFICATION_WIN, MF_CHECKED | MF_BYCOMMAND);
  436.   else
  437.     pMenu->CheckMenuItem(IDM_NOTIFICATION_ICON, MF_CHECKED | MF_BYCOMMAND);
  438.   if(g_bExeImages)
  439.     pMenu->CheckMenuItem(IDM_EXEIMAGES_LARGE, MF_CHECKED | MF_BYCOMMAND);
  440.   else
  441.     pMenu->CheckMenuItem(IDM_EXEIMAGES_SMALL, MF_CHECKED | MF_BYCOMMAND);
  442.   if(g_bPeopleImages)
  443.     pMenu->CheckMenuItem(IDM_PEOPLEIMAGES_LARGE, MF_CHECKED | MF_BYCOMMAND);
  444.   else
  445.     pMenu->CheckMenuItem(IDM_PEOPLEIMAGES_SMALL, MF_CHECKED | MF_BYCOMMAND);
  446. /////////////////////////////////////////////////////////////////////////////
  447.   m_pHistoryFont = new CFont;
  448.   if(!(m_pHistoryFont->CreatePointFont(m_nHistoryFontSize * 10, m_sHistoryFontFace)))
  449.     m_pHistoryFont->CreateFont(0, 0, 1, 0, 0, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, 0, 0, NULL);
  450.   m_History.SetFont(m_pHistoryFont);
  451.   m_pOutputFont = new CFont;
  452.   if(!(m_pOutputFont->CreatePointFont(m_nOutputFontSize * 10, m_sOutputFontFace)))
  453.     m_pOutputFont->CreateFont(0, 0, 1, 0, 0, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, 0, 0, NULL);
  454.   m_Output.SetFont(m_pOutputFont);
  455.   m_pPageGeneral->CreateRootNode();
  456. // IP Address ---------------------------------------------------------------
  457.   unsigned long ulIpAddress = 0;
  458.   hostent* pHostent;
  459.   char abHostName[255];
  460.   if((!gethostname(abHostName, sizeof(abHostName)))  &&
  461.      ((pHostent = gethostbyname(abHostName)) != NULL) &&
  462.      (pHostent->h_length == 4))
  463.   {
  464.     CopyMemory(&ulIpAddress, pHostent->h_addr, 4);
  465.   }
  466.   in_addr inaddr;
  467.   inaddr.s_addr = ulIpAddress;
  468.   CString sIpAddress = inet_ntoa(inaddr);
  469.   if((pHostent = gethostbyaddr((LPCSTR)&ulIpAddress, 4, PF_INET)) != NULL)
  470.     strcpy(abHostName, pHostent->h_name);
  471.   m_pPageYou->m_sIP = sIpAddress;
  472.   m_pPageYou->m_sIPName = abHostName;
  473.   m_bDlgCreated = true;
  474. return TRUE;  // return TRUE  unless you set the focus to a control
  475. }
  476. /////////////////////////////////////////////////////////////////////////////
  477. void CNetManagerDlg::ResizeWindows()
  478. {
  479.   CRect rcDlg;
  480.   GetWindowRect(&rcDlg);
  481.   if(rcDlg.Width() > DLG_MIN_WIDTH)
  482.     GetDlgItem(IDB_SHOW_OUTPUT)->SetWindowText("Hide <<");
  483.   else
  484.     GetDlgItem(IDB_SHOW_OUTPUT)->SetWindowText("Show >>");
  485.   CRect rcTabCtrl;
  486.   m_OutputTabCtrl.GetWindowRect(&rcTabCtrl);
  487.   rcTabCtrl.right = rcDlg.right - 3;
  488.   ScreenToClient(&rcTabCtrl);
  489.   m_OutputTabCtrl.MoveWindow(rcTabCtrl);
  490.   CRect rcOutput;
  491.   m_Output.GetWindowRect(&rcOutput);
  492.   ScreenToClient(&rcOutput);
  493.   rcTabCtrl.left += 2;
  494.   rcTabCtrl.right -= 4;
  495.   rcTabCtrl.top = rcOutput.top;
  496.   rcTabCtrl.bottom -= 3;
  497.   m_Output.MoveWindow(rcTabCtrl);
  498.   m_History.MoveWindow(rcTabCtrl);
  499.   CRect rcInfoTree;
  500.   CRect rcInfoWindow;
  501.   m_InfoTree.GetWindowRect(&rcInfoTree);
  502.   m_InfoWindow.GetWindowRect(&rcInfoWindow);
  503.   ScreenToClient(&rcInfoTree);
  504.   ScreenToClient(&rcInfoWindow);
  505.   int nWork = rcTabCtrl.bottom;
  506.   rcTabCtrl.bottom = rcInfoTree.bottom;
  507.   m_InfoTree.MoveWindow(rcTabCtrl);
  508.   rcTabCtrl.top = rcInfoWindow.top;
  509.   rcTabCtrl.bottom = nWork;
  510.   m_InfoWindow.MoveWindow(rcTabCtrl);
  511. }
  512. /////////////////////////////////////////////////////////////////////////////
  513. // If you add a minimize button to your dialog, you will need the code below
  514. //  to draw the icon.  For MFC applications using the document/view model,
  515. //  this is automatically done for you by the framework.
  516. void CNetManagerDlg::OnPaint() 
  517. {
  518. if (IsIconic())
  519. {
  520. CPaintDC dc(this); // device context for painting
  521. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  522. // Center icon in client rectangle
  523. int cxIcon = GetSystemMetrics(SM_CXICON);
  524. int cyIcon = GetSystemMetrics(SM_CYICON);
  525. CRect rect;
  526. GetClientRect(&rect);
  527. int x = (rect.Width() - cxIcon + 1) / 2;
  528. int y = (rect.Height() - cyIcon + 1) / 2;
  529. // Draw the icon
  530.    dc.DrawIcon(x, y, m_hIcon);
  531. }
  532. else
  533. {
  534. CDialog::OnPaint();
  535.     DrawLogoText();
  536.     if(g_bStarting && !m_bStarted)
  537.     {
  538.       m_bStarted = true;
  539.       OnStart();
  540.     }
  541. }
  542. }
  543. /////////////////////////////////////////////////////////////////////////////
  544. // The system calls this to obtain the cursor to display while the user drags
  545. //  the minimized window.
  546. HCURSOR CNetManagerDlg::OnQueryDragIcon()
  547. {
  548. return (HCURSOR) m_hIcon;
  549. }
  550. /////////////////////////////////////////////////////////////////////////////
  551. void CNetManagerDlg::DrawLogoText()
  552. {
  553. CWindowDC dc(this);
  554.   CString m_LogoText = "NetManager";
  555.   CFont m_fontLogo;
  556.   dc.SetBkMode(TRANSPARENT);
  557.   CRect rectText;
  558.   rectText.left = 400;
  559.   rectText.top = GetSystemMetrics(SM_CYSIZE) + 2;
  560.   rectText.bottom = rectText.top + 18;
  561.   rectText.right = 650;
  562.   CFont* OldFont = dc.SelectObject(&m_fontLogo);
  563.   COLORREF OldColor = dc.SetTextColor(::GetSysColor( COLOR_3DHILIGHT));  // draw text in DC
  564.   dc.DrawText(m_LogoText, rectText + CPoint(1,1), DT_SINGLELINE | DT_LEFT | DT_VCENTER);
  565.   dc.SetTextColor(::GetSysColor( COLOR_3DSHADOW));
  566.   dc.DrawText(m_LogoText, rectText, DT_SINGLELINE | DT_LEFT | DT_VCENTER);
  567.   dc.SetTextColor(OldColor);    // restore old text color
  568.   dc.SelectObject(OldFont);     // restore old font
  569. }
  570. /////////////////////////////////////////////////////////////////////////////
  571. void CNetManagerDlg::OnCancel() 
  572. {
  573.   int nResult = MessageBox("Really Quit???", NULL, MB_ICONQUESTION | MB_YESNO);
  574.   if(nResult != IDNO)
  575.   {
  576.     if(g_bEnding)
  577.       OnEnd();
  578.     if(g_bAutoSaveSettings)
  579.     {
  580.       SaveSettings();
  581.     }
  582.     CDialog::OnCancel();
  583.   }
  584. }
  585. /////////////////////////////////////////////////////////////////////////////
  586. void CNetManagerDlg::OnShowOutput() 
  587. {
  588.   CRect rect;
  589.   GetWindowRect(&rect);
  590.   if(rect.Width() > DLG_MIN_WIDTH)
  591.     HideOutput();
  592.   else
  593.     ShowOutput();
  594. }
  595. /////////////////////////////////////////////////////////////////////////////
  596. void CNetManagerDlg::ShowOutput()
  597. {
  598.   CRect rcDlg;
  599.   GetWindowRect(&rcDlg);
  600.   rcDlg.right = rcDlg.left + m_nDlgDefaultWidth;
  601.   GetDlgItem(IDB_SHOW_OUTPUT)->SetWindowText("Show >>");
  602.   MoveWindow(rcDlg);
  603. }
  604. /////////////////////////////////////////////////////////////////////////////
  605. void CNetManagerDlg::HideOutput()
  606. {
  607.   CRect rcDlg;
  608.   GetWindowRect(&rcDlg);
  609.   rcDlg.right = rcDlg.left + DLG_MIN_WIDTH;
  610.   GetDlgItem(IDB_SHOW_OUTPUT)->SetWindowText("Hide <<");
  611.   MoveWindow(rcDlg);
  612. }
  613. /////////////////////////////////////////////////////////////////////////////
  614. void CNetManagerDlg::OnStart() 
  615. {
  616.   m_dlgPropSheet->SetActivePage(0);
  617.   g_WriteToHistory(TRUE, ">>> NETMANAGER FUNCTIONS STARTED <<<");
  618.   // files
  619.   if(m_pPageFiles->m_bCopyOnStart)
  620.     m_pPageFiles->FilesCopy();
  621.   int j = m_pPageFiles->m_aExeFiles.GetSize();
  622.   for(int i = 0; i < j; i++)
  623.   {
  624.     if(m_pPageFiles->m_aExeFiles[i].nAutoStart)
  625.       m_pPageFiles->FilesExecute(i);
  626.   }
  627.   // net
  628.   if(m_pPageNet->m_bOnStart)
  629.   {
  630.     g_AnimateWait->Play(0, -1, -1);
  631.     CString sOutput;
  632.     m_pPageNet->CheckAll(sOutput);
  633.     g_WriteToHistory(TRUE, sOutput);
  634.   }
  635.   // people
  636.   if(m_pPagePeople->m_bOnStart)
  637.   {
  638.     g_AnimateWait->Play(0, -1, -1);
  639.     m_pPagePeople->ResetServersAndUsers();
  640.     CString sOutput;
  641.     m_pPagePeople->CheckAll(sOutput);
  642.     g_WriteToHistory(TRUE, sOutput);
  643.   }
  644.   // you
  645.   if(m_pPageYou->m_bOnlineOnStart)
  646.     m_pPageYou->OnOnline();
  647. }
  648. /////////////////////////////////////////////////////////////////////////////
  649. void CNetManagerDlg::OnEnd() 
  650. {
  651.   m_dlgPropSheet->SetActivePage(0);
  652.   g_WriteToHistory(TRUE, ">>> NETMANAGER FUNCTIONS FINISHED <<<");
  653.   if(m_pPageFiles->m_bReturnOnEnd)
  654.     m_pPageFiles->FilesReturn();
  655.   if(m_pPageFiles->m_bDeleteOnEnd)
  656.     m_pPageFiles->FilesDelete();
  657.   if(m_pPageYou->m_bOfflineOnEnd)
  658.     m_pPageYou->OnOffline();
  659.   // people
  660.   if(m_pPagePeople->m_bOnEnd)
  661.   {
  662.     g_AnimateWait->Play(0, -1, -1);
  663.     m_pPagePeople->ResetServersAndUsers();
  664.     CString sOutput;
  665.     m_pPagePeople->CheckAll(sOutput);
  666.     g_WriteToHistory(TRUE, sOutput);
  667.   }
  668.   // net
  669.   if(m_pPageNet->m_bOnEnd)
  670.   {
  671.     g_AnimateWait->Play(0, -1, -1);
  672.     CString sOutput;
  673.     m_pPageNet->CheckAll(sOutput);
  674.     g_WriteToHistory(TRUE, sOutput);
  675.   }
  676. }
  677. /////////////////////////////////////////////////////////////////////////////
  678. void CNetManagerDlg::OnTimer(UINT nIDEvent) 
  679. {
  680.   if(nIDEvent == TIMER_NET_ID)
  681.   {
  682.     CString sOutput;
  683.     if(m_pPageNet->CheckAll(sOutput))
  684.     {
  685.       MessageBeep(0);
  686.       if(g_bWinNotification)
  687.       {
  688.         ShowWindow(SW_SHOWMINIMIZED);
  689.         ShowWindow(SW_RESTORE);
  690.       }
  691.       else
  692.       {
  693.         m_BlinkState = true;
  694.         m_BlinkIcon = g_pThisApp->LoadIcon(IDI_NET);
  695.         SetTimer(TIMER_ICON_BLINKING_ID, 500, NULL);
  696.       }
  697.       g_WriteToHistory(TRUE, sOutput);
  698.     }
  699.   }
  700.   if(nIDEvent == TIMER_PEOPLE_ID)
  701.   {
  702.     CString sOutput;
  703.     if(m_pPagePeople->CheckAll(sOutput))
  704.     {
  705.       MessageBeep(0);
  706.       if(g_bWinNotification)
  707.       {
  708.         ShowWindow(SW_SHOWMINIMIZED);
  709.         ShowWindow(SW_RESTORE);
  710.       }
  711.       else
  712.       {
  713.         SetTimer(TIMER_ICON_BLINKING_ID, 500, NULL);
  714.         m_BlinkIcon = g_pThisApp->LoadIcon(IDI_PEOPLE);
  715.       }
  716.       g_WriteToHistory(TRUE, sOutput);
  717.     }
  718.   }
  719.   if(nIDEvent == TIMER_ICON_BLINKING_ID)
  720.   {
  721.     if(m_BlinkState ^= true)
  722.     {
  723.       g_pMainWnd->SetIcon(g_pThisApp->LoadIcon(IDR_MAINFRAME), FALSE);
  724.       g_pMainWnd->SetWindowText("NetManager");
  725.     }
  726.     else
  727.     {
  728.       g_pMainWnd->SetIcon(m_BlinkIcon, FALSE);
  729.       g_pMainWnd->SetWindowText("");
  730.     }
  731.   }
  732. CDialog::OnTimer(nIDEvent);
  733. }
  734. /////////////////////////////////////////////////////////////////////////////
  735. void CNetManagerDlg::Serialize(CArchive& ar) 
  736. {
  737.   CString sItem;
  738. if (ar.IsStoring())
  739. { // storing code
  740.     CRect rect;
  741.     GetWindowRect(&rect);
  742.     m_nWindowWidth = rect.Width();
  743.     ar << g_bStarting;
  744.     ar << g_bEnding;
  745.     ar << g_bNetMonitoring;
  746.     ar << g_bPeopleMonitoring;
  747.     ar << g_bAutoSaveSettings;
  748.     ar << m_nHistoryFontSize;
  749.     ar << m_sHistoryFontFace;
  750.     ar << m_nOutputFontSize;
  751.     ar << m_sOutputFontFace;
  752.     ar << g_bWinNotification;
  753.     ar << g_bExeImages;
  754.     ar << g_bPeopleImages;
  755.     ar << m_nWindowWidth;
  756. }
  757. else
  758. { // loading code
  759.     ar >> g_bStarting;
  760.     ar >> g_bEnding;
  761.     ar >> g_bNetMonitoring;
  762.     ar >> g_bPeopleMonitoring;
  763.     ar >> g_bAutoSaveSettings;
  764.     ar >> m_nHistoryFontSize;
  765.     ar >> m_sHistoryFontFace;
  766.     ar >> m_nOutputFontSize;
  767.     ar >> m_sOutputFontFace;
  768.     ar >> g_bWinNotification;
  769.     ar >> g_bExeImages;
  770.     ar >> g_bPeopleImages;
  771.     ar >> m_nWindowWidth;
  772.   }
  773. }
  774. /////////////////////////////////////////////////////////////////////////////
  775. void CNetManagerDlg::OnClearOutput() 
  776. {
  777.   if(m_OutputTabCtrl.GetCurSel() == 0)
  778.   {
  779.     m_History.SetReadOnly(FALSE);
  780.     m_History.SetSel(0, -1);
  781.     m_History.Clear();
  782.     m_History.SetReadOnly();
  783.   }
  784.   else
  785.   {
  786.     m_Output.SetReadOnly(FALSE);
  787.     m_Output.SetSel(0, -1);
  788.     m_Output.Clear();
  789.     m_Output.SetReadOnly();
  790.   }
  791. }
  792. /////////////////////////////////////////////////////////////////////////////
  793. void CNetManagerDlg::OnChangeHistory() 
  794. {
  795.   CString sHistory;
  796.   m_History.GetWindowText(sHistory);
  797.   if(sHistory == "" && m_OutputTabCtrl.GetCurSel() == 0)
  798.   {
  799.     m_ClearOutput.EnableWindow(FALSE);
  800.     g_pMainWnd->GetMenu()->EnableMenuItem(IDM_OUTPUT_CLEAR, MF_GRAYED);
  801.   }
  802.   else
  803.   {
  804.     m_ClearOutput.EnableWindow(TRUE);
  805.     g_pMainWnd->GetMenu()->EnableMenuItem(IDM_OUTPUT_CLEAR, MF_ENABLED);
  806.   }
  807. }
  808. /////////////////////////////////////////////////////////////////////////////
  809. void CNetManagerDlg::OnChangeOutput() 
  810. {
  811.   CString sOutput;
  812.   m_Output.GetWindowText(sOutput);
  813.   if(sOutput == "" && m_OutputTabCtrl.GetCurSel() == 1)
  814.   {
  815.     m_ClearOutput.EnableWindow(FALSE);
  816.     g_pMainWnd->GetMenu()->EnableMenuItem(IDM_OUTPUT_CLEAR, MF_GRAYED);
  817.   }
  818.   else
  819.   {
  820.     m_ClearOutput.EnableWindow(TRUE);
  821.     g_pMainWnd->GetMenu()->EnableMenuItem(IDM_OUTPUT_CLEAR, MF_ENABLED);
  822.   }
  823. }
  824. /////////////////////////////////////////////////////////////////////////////
  825. BOOL CNetManagerDlg::OnHelpInfo(HELPINFO* pHelpInfo) 
  826. {
  827.   GoToHelp();
  828. return 0;     //CDialog::OnHelpInfo(pHelpInfo);
  829. }
  830. /////////////////////////////////////////////////////////////////////////////
  831. void CNetManagerDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
  832. {
  833. CDialog::OnActivate(nState, pWndOther, bMinimized);
  834.   KillTimer(TIMER_ICON_BLINKING_ID);
  835.   g_pMainWnd->SetIcon(g_pThisApp->LoadIcon(IDR_MAINFRAME), FALSE);
  836.   g_pMainWnd->SetWindowText("NetManager");
  837. }
  838. /////////////////////////////////////////////////////////////////////////////
  839. void CNetManagerDlg::OnSelchangeTabctrlOutput(NMHDR* pNMHDR, LRESULT* pResult) 
  840. {
  841.   switch(m_OutputTabCtrl.GetCurSel())
  842. {
  843.     case 0:
  844.       OnChangeHistory();
  845.       m_History.ShowWindow(SW_SHOWNA);
  846.       m_Output.ShowWindow(SW_HIDE);
  847.       m_InfoTree.ShowWindow(SW_HIDE);
  848.       m_InfoWindow.ShowWindow(SW_HIDE);
  849.       m_History.SetSel(-1, -1);
  850.       break;
  851.     case 1:
  852.       OnChangeOutput();
  853.       m_Output.ShowWindow(SW_SHOWNA);
  854.       m_History.ShowWindow(SW_HIDE);
  855.       m_InfoTree.ShowWindow(SW_HIDE);
  856.       m_InfoWindow.ShowWindow(SW_HIDE);
  857.       m_Output.SetSel(-1, -1);
  858.       break;
  859.     case 2:
  860.       GoToHelp();
  861.       break;
  862.   }
  863. *pResult = 0;
  864. }
  865. /////////////////////////////////////////////////////////////////////////////
  866. void CNetManagerDlg::GoToHelp() 
  867. {
  868.   m_OutputTabCtrl.SetCurSel(2);
  869.   m_InfoTree.ShowWindow(SW_SHOWNA);
  870.   m_InfoWindow.ShowWindow(SW_SHOWNA);
  871.   m_ClearOutput.EnableWindow(FALSE);
  872.   m_Output.ShowWindow(SW_HIDE);
  873.   m_History.ShowWindow(SW_HIDE);
  874. }
  875. /////////////////////////////////////////////////////////////////////////////
  876. void CNetManagerDlg::OnSelchangedInfotree(NMHDR* pNMHDR, LRESULT* pResult) 
  877. {
  878. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  879.   CString sText;
  880.   sText.LoadString(m_InfoTree.GetItemData(m_InfoTree.GetSelectedItem()));
  881.   sText = g_MakeWindowsTextLines(sText);
  882.   m_InfoWindow.SetSel(0, -1);
  883.   m_InfoWindow.ReplaceSel(sText);
  884.   m_InfoWindow.SetSel(-1, -1);
  885. *pResult = 0;
  886. }
  887. /////////////////////////////////////////////////////////////////////////////
  888. BOOL CNetManagerDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
  889. {
  890.   // if the cursor is not over a child window control, revert
  891.   // to the default status bar text
  892.   if(pWnd == this)
  893.     SetPaneText();
  894.   else
  895.   {
  896.     if(DYNAMIC_DOWNCAST(CComboBox, pWnd->GetOwner()))
  897.       SetPaneText(pWnd->GetOwner()->GetDlgCtrlID());    // only for combobox
  898.     else
  899.       SetPaneText(pWnd->GetDlgCtrlID());               // others controls
  900.   }
  901. return CDialog::OnSetCursor(pWnd, nHitTest, message);
  902. }
  903. /////////////////////////////////////////////////////////////////////////////
  904. void CNetManagerDlg::SetPaneText(UINT nID)
  905. {
  906.   CString sText;
  907.   if(!sText.LoadString(nID) || nID == (UINT)m_StatusBar.GetDlgCtrlID())
  908.     sText = "NetManager";
  909.   m_StatusBar.SetPaneText(0, sText);
  910. }
  911. /////////////////////////////////////////////////////////////////////////////
  912. BOOL CNetManagerDlg::PreTranslateMessage(MSG* pMsg) 
  913. {
  914.   // transate the message based on TTM_WINDOWFROMPOINT
  915.   MSG msg = *pMsg;
  916.   msg.hwnd = (HWND)m_ToolTip.SendMessage(TTM_WINDOWFROMPOINT, 0, (LPARAM)&msg.pt);
  917.   CPoint pt = pMsg->pt;
  918.   if (msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST)
  919.           ::ScreenToClient(msg.hwnd, &pt);
  920.   msg.lParam = MAKELONG(pt.x, pt.y);
  921.   // Let the ToolTip process this message.
  922.   m_ToolTip.RelayEvent(&msg);
  923. return CDialog::PreTranslateMessage(pMsg);
  924. }
  925. /////////////////////////////////////////////////////////////////////////////
  926. void CNetManagerDlg::OnSettingChange(UINT uFlags, LPCTSTR lpszSection) 
  927. {
  928. CDialog::OnSettingChange(uFlags, lpszSection);
  929.   // for menu (more than 1 row of main menu (while resizing))
  930.   CRect rc;
  931.   GetClientRect(rc);
  932.   if(rc.Height() != m_nDlgClientHeight)
  933.     m_nDlgHeight += m_nDlgClientHeight - rc.Height();   // new height
  934.   RedrawWindow();
  935.   GetWindowRect(rc);
  936.   MoveWindow(rc);
  937. }
  938. /////////////////////////////////////////////////////////////////////////////
  939. void CNetManagerDlg::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu) 
  940. {
  941. CDialog::OnMenuSelect(nItemID, nFlags, hSysMenu);
  942.   TCHAR szFullText[256];
  943.   CString cstStatusText;
  944.   if (nItemID != 0) // will be zero on a separator
  945.   {
  946.     AfxLoadString(nItemID, szFullText);     // this is the command id, not the button index
  947.     AfxExtractSubString(cstStatusText, szFullText, 0, 'n');
  948.     m_StatusBar.SetPaneText(0, cstStatusText);
  949.   }
  950. }
  951. /////////////////////////////////////////////////////////////////////////////
  952. void CNetManagerDlg::SaveSettings()
  953. {
  954.   TRY                       // backup the old settings
  955.   {
  956.     CFile::Remove(m_sBakIniFilePath);
  957.   }
  958.   CATCH(CFileException, pe)
  959.   {
  960.   //pe->ReportError();
  961.   }
  962.   END_CATCH
  963.   TRY
  964.   {
  965.     CFile::Rename(m_sIniFilePath, m_sBakIniFilePath);
  966.   }
  967.   CATCH(CFileException, pe)
  968.   {
  969.   //pe->ReportError();
  970.   }
  971.   END_CATCH
  972.   CFile SouborProfilu;      // save settings
  973.   TRY
  974.   {
  975.     WriteToFile:
  976.     if(SouborProfilu.Open(m_sIniFilePath, CFile::modeCreate | CFile::modeWrite))
  977.     {
  978.       CArchive archive(&SouborProfilu, CArchive::store);
  979.       TRY
  980.         m_dlgPropSheet->SetActivePage(0);
  981.         Serialize(archive);
  982.         m_pPageFiles->Serialize(archive);
  983.         m_pPageYou->Serialize(archive);
  984.         m_pPageNet->Serialize(archive);
  985.         m_pPageMail->m_PageMailPop3.Serialize(archive);
  986.         m_pPageMail->m_PageMailSmtp.Serialize(archive);
  987.         m_pPagePeople->Serialize(archive);
  988.         g_WriteToHistory(TRUE, ">>> SETTINGS SAVED <<<");
  989.       CATCH(CMemoryException, pe)
  990.         pe->ReportError();
  991.       AND_CATCH(CArchiveException, pe)
  992.         pe->ReportError();
  993.       AND_CATCH(CFileException, pe)
  994.         pe->ReportError();
  995.       END_CATCH
  996.       archive.Close();
  997.       SouborProfilu.Close();
  998.     }
  999.     else
  1000.     {
  1001.       int nResult = MessageBox("Error writing", NULL, MB_ICONERROR | MB_RETRYCANCEL);
  1002.       if(nResult == IDRETRY)
  1003.         goto WriteToFile;
  1004.     }
  1005.   }
  1006.   CATCH(CFileException, pe)
  1007.     pe->ReportError();
  1008.   END_CATCH
  1009. }