MainFrm.cpp
上传用户:ywlong9188
上传日期:2022-05-31
资源大小:2656k
文件大小:7k
源码类别:

远程控制编程

开发平台:

C/C++

  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //
  3. #include "stdafx.h"
  4. #include "Proj.h"
  5. #include "palettebar.h"
  6. #include "MainFrm.h"
  7. #include "Splash.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CMainFrame
  15. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  16. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  17. ON_UPDATE_COMMAND_UI(ID_INDICATOR_DATE, OnUpdateDate)
  18. //{{AFX_MSG_MAP(CMainFrame)
  19. ON_WM_CREATE()
  20. ON_COMMAND(ID_VIEW_PALETTE_BAR, OnViewPaletteBar)
  21. ON_UPDATE_COMMAND_UI(ID_VIEW_PALETTE_BAR, OnUpdateViewPaletteBar)
  22. //}}AFX_MSG_MAP
  23. END_MESSAGE_MAP()
  24. static UINT BASED_CODE palette[] =
  25. {
  26. // same order as in the bitmap 'palette.bmp'
  27. ID_DRAW_SELECTION,
  28. ID_DRAW_LINE,
  29. ID_DRAW_RECT,
  30. ID_DRAW_ELLIPSE,
  31. ID_DRAW_POLYGON,
  32. ID_DRAW_TEXT,
  33. ID_DRAW_BAR_GRAPH,
  34. ID_DRAW_ANIMATE_TAG,
  35. ID_DRAW_CURSOR,
  36. ID_DRAW_ISA,
  37. ID_DRAW_LOOP,
  38. ID_DRAW_BUTTON,
  39. ID_DRAW_LIB
  40. };
  41. static UINT indicators[] =
  42. {
  43. ID_SEPARATOR,           // status line indicator
  44. ID_SEPARATOR,
  45. ID_INDICATOR_NUM,
  46. ID_INDICATOR_CAPS
  47. };
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CMainFrame construction/destruction
  50. CMainFrame::CMainFrame()
  51. {
  52. // TODO: add member initialization code here
  53. }
  54. CMainFrame::~CMainFrame()
  55. {
  56. }
  57. BOOL CMainFrame::CreatePaletteBar()
  58. {
  59. // TODO: Delete these three lines if you don't want the toolbar to
  60. //  be dockable
  61. if (!m_wndPaletteBar.Create(this)||!m_wndPaletteBar.LoadBitmap(IDB_PALETTE)
  62. //!m_wndPaletteBar.LoadBitmap(IDB_PALETTE) ||
  63. // !m_wndPaletteBar.SetIndicators(palette,
  64. //   sizeof(palette)/sizeof(UINT)))
  65. ||!m_wndPaletteBar.SetButtons(palette,
  66.   sizeof(palette)/sizeof(UINT)))
  67. {
  68. TRACE0("Failed to create toolbarn");
  69. return FALSE;       // fail to create
  70. }
  71. m_wndPaletteBar.SetBarStyle(m_wndPaletteBar.GetBarStyle() |
  72. CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  73. m_wndPaletteBar.SetWindowText(_T("Palette"));
  74. m_wndPaletteBar.EnableDocking(CBRS_ALIGN_ANY);
  75. EnableDocking(CBRS_ALIGN_ANY);
  76. // Create the Palette.  We are using hardcoded numbers for ease here
  77. // normally the location would be read in from an ini file.
  78. //CPoint pt(GetSystemMetrics(SM_CXSCREEN) - 100,
  79. // GetSystemMetrics(SM_CYSCREEN) / 3);
  80. //m_wndPaletteBar.SetColumns(2);
  81. //FloatControlBar(&m_wndPaletteBar, pt);
  82. DockControlBar(&m_wndPaletteBar,AFX_IDW_DOCKBAR_LEFT);  
  83. return TRUE;
  84. }
  85. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  86. {
  87. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  88. return -1;
  89. EnableDocking(CBRS_ALIGN_ANY);   
  90. if(!CreatePaletteBar())
  91. return -1;
  92. if (!m_wndToolBar.Create(this) ||
  93. !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  94. {
  95. TRACE0("Failed to create toolbarn");
  96. return -1;      // fail to create
  97. }
  98. if (!m_wndStatusBar.Create(this) ||
  99. !m_wndStatusBar.SetIndicators(indicators,
  100.   sizeof(indicators)/sizeof(UINT)))
  101. {
  102. TRACE0("Failed to create status barn");
  103. return -1;      // fail to create
  104. }
  105. // TODO: Remove this if you don't want tool tips or a resizeable toolbar
  106. m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
  107. CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
  108. // TODO: Delete these three lines if you don't want the toolbar to
  109. //  be dockable
  110. m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  111. EnableDocking(CBRS_ALIGN_ANY);
  112. DockControlBar(&m_wndToolBar);
  113. // CG: The following line was added by the Splash Screen component. CSplashWnd::ShowSplashScreen(this);
  114. ::Sleep(2000);
  115. // CG: The following block was inserted by 'Status Bar' component.
  116. {
  117. // Find out the size of the static variable 'indicators' defined
  118. // by AppWizard and copy it
  119. int nOrigSize = sizeof(indicators) / sizeof(UINT);
  120. UINT* pIndicators = new UINT[nOrigSize + 2];
  121. memcpy(pIndicators, indicators, sizeof(indicators));
  122. // Call the Status Bar Component's status bar creation function
  123. if (!InitStatusBar(pIndicators, nOrigSize, 60))
  124. {
  125. TRACE0("Failed to initialize Status Barn");
  126. return -1;
  127. }
  128. delete[] pIndicators;
  129. }
  130. m_wndStatusBar.SetPaneInfo(0,0,SBPS_STRETCH,0);
  131. DragAcceptFiles();
  132. return 0;
  133. }
  134. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  135. {
  136. // TODO: Modify the Window class or styles here by modifying
  137. //  the CREATESTRUCT cs
  138. return CFrameWnd::PreCreateWindow(cs);
  139. }
  140. /////////////////////////////////////////////////////////////////////////////
  141. // CMainFrame diagnostics
  142. #ifdef _DEBUG
  143. void CMainFrame::AssertValid() const
  144. {
  145. CFrameWnd::AssertValid();
  146. }
  147. void CMainFrame::Dump(CDumpContext& dc) const
  148. {
  149. CFrameWnd::Dump(dc);
  150. }
  151. #endif //_DEBUG
  152. /////////////////////////////////////////////////////////////////////////////
  153. // CMainFrame message handlers
  154. void CMainFrame::OnViewPaletteBar() 
  155. {
  156. BOOL bVisible = ((m_wndPaletteBar.GetStyle() & WS_VISIBLE) != 0);
  157. ShowControlBar(&m_wndPaletteBar, !bVisible, FALSE);
  158. RecalcLayout();
  159. }
  160. void CMainFrame::OnUpdateViewPaletteBar(CCmdUI* pCmdUI) 
  161. {
  162. BOOL bVisible = ((m_wndPaletteBar.GetStyle() & WS_VISIBLE) != 0);
  163. pCmdUI->SetCheck(bVisible);
  164. }
  165. void CMainFrame::ActivateFrame(int nCmdShow)
  166. {
  167. CFrameWnd::ActivateFrame(SW_SHOWMAXIMIZED);
  168. }
  169. void CMainFrame::OnUpdateDate(CCmdUI* pCmdUI)
  170. {
  171. // CG: This function was inserted by 'Status Bar' component.
  172. // Get current date and format it
  173. CTime time = CTime::GetCurrentTime();
  174. CString strDate = time.Format(_T("%A, %B %d, %y "));
  175. // BLOCK: compute the width of the date string
  176. CSize size;
  177. {
  178. HGDIOBJ hOldFont = NULL;
  179. HFONT hFont = (HFONT)m_wndStatusBar.SendMessage(WM_GETFONT);
  180. CClientDC dc(NULL);
  181. if (hFont != NULL) 
  182. hOldFont = dc.SelectObject(hFont);
  183. size = dc.GetTextExtent(strDate);
  184. if (hOldFont != NULL) 
  185. dc.SelectObject(hOldFont);
  186. }
  187. // Update the pane to reflect the current date
  188. UINT nID, nStyle;
  189. int nWidth;
  190. m_wndStatusBar.GetPaneInfo(m_nDatePaneNo, nID, nStyle, nWidth);
  191. m_wndStatusBar.SetPaneInfo(m_nDatePaneNo, nID, nStyle, size.cx);
  192. pCmdUI->SetText(strDate);
  193. pCmdUI->Enable(TRUE);
  194. }
  195. BOOL CMainFrame::InitStatusBar(UINT *pIndicators, int nSize, int nSeconds)
  196. {
  197. // CG: This function was inserted by 'Status Bar' component.
  198. // Create an index for the DATE pane
  199. m_nDatePaneNo = nSize++;
  200. pIndicators[m_nDatePaneNo] = ID_INDICATOR_DATE;
  201. // TODO: Select an appropriate time interval for updating
  202. // the status bar when idling.
  203. m_wndStatusBar.SetTimer(0x1000, nSeconds * 1000, NULL);
  204. return m_wndStatusBar.SetIndicators(pIndicators, nSize);
  205. }