home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 June / PCWorld_2003-06_cd.bin / KOMUNIK / MIRRORIT / SRC / MAINFRM.CPP < prev    next >
C/C++ Source or Header  |  1999-01-02  |  6KB  |  203 lines

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "MirrorIt.h"
  6.  
  7. #include "MainFrm.h"
  8. #include "MirrorItDoc.h"
  9.  
  10. #ifdef _DEBUG
  11. #define new DEBUG_NEW
  12. #undef THIS_FILE
  13. static char THIS_FILE[] = __FILE__;
  14. #endif
  15.  
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CMainFrame
  18.  
  19. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  20.  
  21. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  22.     //{{AFX_MSG_MAP(CMainFrame)
  23.     ON_WM_CREATE()
  24.     ON_WM_DROPFILES()
  25.     ON_WM_CLOSE()
  26.     //}}AFX_MSG_MAP
  27.     // Global help commands
  28.     ON_COMMAND(ID_HELP_FINDER, CFrameWnd::OnHelpFinder)
  29.     ON_COMMAND(ID_HELP, CFrameWnd::OnHelp)
  30.     ON_COMMAND(ID_CONTEXT_HELP, CFrameWnd::OnContextHelp)
  31.     ON_COMMAND(ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder)
  32. END_MESSAGE_MAP()
  33.  
  34. static UINT indicators[] =
  35. {
  36.     ID_SEPARATOR,           // status line indicator
  37.     ID_INDICATOR_CAPS,
  38.     ID_INDICATOR_NUM,
  39.     ID_INDICATOR_SCRL,
  40. };
  41.  
  42. /////////////////////////////////////////////////////////////////////////////
  43. // CMainFrame construction/destruction
  44.  
  45. CMainFrame::CMainFrame()
  46. {
  47.     // TODO: add member initialization code here
  48.     
  49. }
  50.  
  51. CMainFrame::~CMainFrame()
  52. {
  53. }
  54.  
  55. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  56. {
  57.     if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  58.         return -1;
  59.     
  60.     if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  61.         | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  62.         !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  63.     {
  64.         TRACE0("Failed to create toolbar\n");
  65.         return -1;      // fail to create
  66.     }
  67.  
  68.     if (!m_wndStatusBar.Create(this) ||
  69.         !m_wndStatusBar.SetIndicators(indicators,
  70.           sizeof(indicators)/sizeof(UINT)))
  71.     {
  72.         TRACE0("Failed to create status bar\n");
  73.         return -1;      // fail to create
  74.     }
  75.  
  76.     // TODO: Remove this if you don't want tool tips or a resizeable toolbar
  77.     m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
  78.         CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  79.  
  80.     // TODO: Delete these three lines if you don't want the toolbar to
  81.     //  be dockable
  82.     m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  83.     EnableDocking(CBRS_ALIGN_ANY);
  84.     DockControlBar(&m_wndToolBar);
  85.  
  86.     LoadBarState("Bar");
  87.     return 0;
  88. }
  89.  
  90. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  91. {
  92.     int s, t, b, r, l;
  93.  
  94.     CWinApp* app = AfxGetApp();
  95.  
  96.     // only restore if there is a previously saved position
  97.     if ((s = app -> GetProfileInt("Window", "ShowCmd", -1)) != -1 &&
  98.         (t = app -> GetProfileInt("Window", "Top", -1)) != -1 &&
  99.         (l = app -> GetProfileInt("Window", "Left", -1)) != -1 &&
  100.         (b = app -> GetProfileInt("Window", "Bottom", -1)) != -1 &&
  101.         (r = app -> GetProfileInt("Window", "Right", -1)) != -1)
  102.     {
  103.  
  104.         // restore the window's status
  105.         app -> m_nCmdShow = s;
  106.  
  107.         // restore the window's width and height
  108.         cs.cx = r - l;
  109.         cs.cy = b - t;
  110.  
  111.         // the following correction is needed when the taskbar is
  112.         // at the left or top and it is not "auto-hidden"
  113.         RECT workArea;
  114.         SystemParametersInfo(SPI_GETWORKAREA, 0, &workArea, 0);
  115.         l += workArea.left;
  116.         t += workArea.top;
  117.  
  118.         // make sure the window is not completely out of sight
  119.         int max_x = GetSystemMetrics(SM_CXSCREEN) -
  120.                         GetSystemMetrics(SM_CXICON);
  121.         int max_y = GetSystemMetrics(SM_CYSCREEN) -
  122.                         GetSystemMetrics(SM_CYICON);
  123.         cs.x = min(l, max_x);
  124.         cs.y = min(t, max_y);
  125.     }
  126.  
  127.     return CFrameWnd::PreCreateWindow(cs);
  128. }
  129.  
  130. /////////////////////////////////////////////////////////////////////////////
  131. // CMainFrame diagnostics
  132.  
  133. #ifdef _DEBUG
  134. void CMainFrame::AssertValid() const
  135. {
  136.     CFrameWnd::AssertValid();
  137. }
  138.  
  139. void CMainFrame::Dump(CDumpContext& dc) const
  140. {
  141.     CFrameWnd::Dump(dc);
  142. }
  143.  
  144. #endif //_DEBUG
  145.  
  146. /////////////////////////////////////////////////////////////////////////////
  147. // CMainFrame message handlers
  148.  
  149. void CMainFrame::OnDropFiles(HDROP hDropInfo) 
  150. {
  151.     CMirrorItDoc *pDoc = (CMirrorItDoc *)GetActiveDocument();
  152.     if (pDoc)
  153.     {
  154.         UINT nFiles = ::DragQueryFile(hDropInfo, (UINT)-1, NULL, 0);
  155.  
  156.         CWinApp* pApp = AfxGetApp();
  157.         for (UINT iFile = 0; iFile < nFiles; iFile++)
  158.         {
  159.             TCHAR szFileName[_MAX_PATH];
  160.             ::DragQueryFile(hDropInfo, iFile, szFileName, _MAX_PATH);
  161.             CString filename(szFileName);
  162.             CString sessionname(szFileName);
  163.  
  164.             int i = sessionname.ReverseFind('\\');
  165.             if (i >= 0)
  166.                 sessionname = sessionname.Mid(i + 1);
  167.  
  168.             i = sessionname.ReverseFind('.');
  169.             if (i >= 0)
  170.             {
  171.                 CString ext = sessionname.Mid(i + 1);
  172.  
  173.                 sessionname = sessionname.Left(sessionname.GetLength() - 4);
  174.                 ext.MakeLower();
  175.                 if (!ext.Compare("url"))
  176.                 {
  177.                     pDoc -> AddSession(sessionname, "");
  178.                     continue;
  179.                 }
  180.             }
  181.             pApp->OpenDocumentFile(szFileName);
  182.         }
  183.         ::DragFinish(hDropInfo);
  184.         return;
  185.     }
  186.     CFrameWnd::OnDropFiles(hDropInfo);
  187. }
  188.  
  189. void CMainFrame::OnClose() 
  190. {
  191.     SaveBarState("Bar");
  192.  
  193.     WINDOWPLACEMENT wp;
  194.     GetWindowPlacement(&wp);
  195.     AfxGetApp() -> WriteProfileInt("Window", "ShowCmd", wp.showCmd);
  196.     AfxGetApp() -> WriteProfileInt("Window", "Top", wp.rcNormalPosition.top);
  197.     AfxGetApp() -> WriteProfileInt("Window", "Bottom", wp.rcNormalPosition.bottom);
  198.     AfxGetApp() -> WriteProfileInt("Window", "Left", wp.rcNormalPosition.left);
  199.     AfxGetApp() -> WriteProfileInt("Window", "Right", wp.rcNormalPosition.right);
  200.  
  201.     CFrameWnd::OnClose();
  202. }
  203.