MainFrm.cpp 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. /**************************************************************************************************
  2. 版本所有(C), 2020-2022, 北京普达迪泰
  3. ***************************************************************************************************
  4. 文 件 名: MainFrm.cpp
  5. 功能描述: 程序主框架
  6. 版 本 号: 1.00初版
  7. 作 者: HYF
  8. 生成日期; 2021-12-20
  9. 最近修改:
  10. 函数列表:
  11. 修改历史:
  12. 1.日 期 :2021-12-20
  13. 作 者 : HYF
  14. 修改内容 : 创建文件
  15. **************************************************************************************************/
  16. // MainFrm.cpp: CMainFrame 类的实现
  17. #include "pch.h"
  18. #include "Dms.h"
  19. #include "MainFrm.h"
  20. #include "StartView.h"
  21. #include "StaticTask.h"
  22. #include "DynamicTask.h"
  23. #include "EquipTypeView.h"
  24. #include "ReportView.h"
  25. #include "IDPMSManager.h"
  26. #ifdef _DEBUG
  27. #define new DEBUG_NEW
  28. #endif
  29. #define TIMER_SECOND 1
  30. // CMainFrame
  31. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
  32. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  33. ON_WM_CREATE()
  34. //ON_COMMAND(IDM_EQUIPMENT_VIEW, &CMainFrame::OnEquipmentView)
  35. //ON_COMMAND(IDM_REPORT_VIEW, &CMainFrame::OnReportView)
  36. //ON_COMMAND(IDM_START, &CMainFrame::OnStartView)
  37. //ON_COMMAND(IDM_HELP, &CMainFrame::OnHelp)
  38. ON_UPDATE_COMMAND_UI(ID_INDICATOR_TIME, OnUpdateStatusTime)
  39. ON_WM_GETMINMAXINFO()
  40. ON_MESSAGE(WM_START_STATIC, &CMainFrame::OnStartStaticTask)
  41. ON_MESSAGE(WM_START_DYNAMIC, &CMainFrame::OnStartDynamicTask)
  42. ON_MESSAGE(WM_BACK_TO_START, &CMainFrame::OnBackToStart)
  43. ON_WM_DESTROY()
  44. ON_WM_TIMER()
  45. END_MESSAGE_MAP()
  46. static UINT indicators[] =
  47. {
  48. ID_SEPARATOR, // 状态行指示器
  49. ID_INDICATOR_TIME,
  50. ID_INDICATOR_CAPS,
  51. ID_INDICATOR_NUM,
  52. ID_INDICATOR_SCRL,
  53. };
  54. // CMainFrame 构造/析构
  55. CMainFrame::CMainFrame() noexcept
  56. {
  57. m_CurViewId = IDD_VIEW_START;
  58. }
  59. CMainFrame::~CMainFrame()
  60. {
  61. }
  62. /**************************************************************************************************
  63. 函 数 名 :OnCreate
  64. 功能描述 :创建窗口初始化
  65. 输入参数 :无
  66. 输出参数 :无
  67. 返 回 值 :void
  68. **************************************************************************************************/
  69. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  70. {
  71. this->SetMenu(NULL);
  72. if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  73. return -1;
  74. if (!m_wndStatusBar.Create(this))
  75. {
  76. TRACE0("未能创建状态栏\n");
  77. return -1; // 未能创建
  78. }
  79. m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
  80. m_wndStatusBar.SetPaneInfo(1, ID_INDICATOR_TIME, SBPS_NORMAL, 120);
  81. // 初始化IDPMS
  82. IDPMSManager *pManager = IDPMSManager::GetManager();
  83. // 时间定时器
  84. SetTimer(TIMER_SECOND, 1000, NULL);
  85. return 0;
  86. }
  87. // 窗口风格
  88. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  89. {
  90. if( !CFrameWnd::PreCreateWindow(cs) )
  91. return FALSE;
  92. cs.style &= -FWS_ADDTOTITLE;
  93. cs.style &= ~WS_THICKFRAME;
  94. cs.style |= WS_DLGFRAME;
  95. return TRUE;
  96. }
  97. // CMainFrame 诊断
  98. #ifdef _DEBUG
  99. void CMainFrame::AssertValid() const
  100. {
  101. CFrameWnd::AssertValid();
  102. }
  103. void CMainFrame::Dump(CDumpContext& dc) const
  104. {
  105. CFrameWnd::Dump(dc);
  106. }
  107. #endif //_DEBUG
  108. /**************************************************************************************************
  109. 函 数 名 :ActivateFrame
  110. 功能描述 :初始化窗口大小状态
  111. 输入参数 :无
  112. 输出参数 :无
  113. 返 回 值 :void
  114. **************************************************************************************************/
  115. void CMainFrame::ActivateFrame(int nCmdShow)
  116. {
  117. nCmdShow = SW_SHOWMAXIMIZED;
  118. CFrameWnd::ActivateFrame(nCmdShow);
  119. }
  120. /**************************************************************************************************
  121. 函 数 名 :SwitchToForm
  122. 功能描述 :视图切换
  123. 输入参数 :nForm-视图资源ID
  124. 输出参数 :无
  125. 返 回 值 :void
  126. **************************************************************************************************/
  127. void CMainFrame::SwitchToForm(int nForm, DWORD taskId)
  128. {
  129. if (m_CurViewId == nForm) return;
  130. // 当前视图
  131. CView *pOldActiveView = this->GetActiveView();
  132. // 新视图
  133. CView *pNewActiveView = (CView *)this->GetDlgItem(nForm);
  134. if (pNewActiveView == NULL) {
  135. switch (nForm) {
  136. case IDD_VIEW_START:
  137. pNewActiveView = (CView *)new CStartView();
  138. break;
  139. case IDD_VIEW_STATIC_TASK:
  140. pNewActiveView = (CView *)new CStaticTask();
  141. break;
  142. case IDD_VIEW_DYNAMIC_TASK:
  143. pNewActiveView = (CView *)new CDynamicTask();
  144. break;
  145. }
  146. // 创建新视图
  147. CCreateContext context;
  148. context.m_pCurrentDoc = pOldActiveView->GetDocument();
  149. pNewActiveView->Create(NULL, NULL, WS_CHILD, CFrameWnd::rectDefault, this, nForm, &context);
  150. pNewActiveView->OnInitialUpdate();
  151. }
  152. // 显示
  153. this->SetActiveView(pNewActiveView);
  154. pNewActiveView->ShowWindow(SW_SHOW);
  155. pOldActiveView->ShowWindow(SW_HIDE);
  156. if (pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CStartView)) {
  157. pOldActiveView->SetDlgCtrlID(IDD_VIEW_START);
  158. }
  159. else if (pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CStaticTask)) {
  160. pOldActiveView->SetDlgCtrlID(IDD_VIEW_STATIC_TASK);
  161. }
  162. else if (pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CDynamicTask)) {
  163. pOldActiveView->SetDlgCtrlID(IDD_VIEW_DYNAMIC_TASK);
  164. }
  165. pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
  166. //delete pOldActiveView;
  167. // 调用初始化设置
  168. if (nForm == IDD_VIEW_STATIC_TASK) {
  169. CStaticTask *pStaticTask = (CStaticTask *)pNewActiveView;
  170. pStaticTask->InitFormData(taskId);
  171. }
  172. else if (nForm == IDD_VIEW_DYNAMIC_TASK) {
  173. CDynamicTask *pDynamicTask = (CDynamicTask *)pNewActiveView;
  174. pDynamicTask->InitFormData(taskId);
  175. }
  176. else if (nForm == IDD_VIEW_START) {
  177. CStartView *pStartView = (CStartView *)pNewActiveView;
  178. pStartView->InitFormData();
  179. }
  180. pNewActiveView->UpdateWindow();
  181. // 设整布局
  182. this->RecalcLayout();
  183. m_CurViewId = nForm;
  184. }
  185. // CMainFrame 消息处理程序
  186. /**************************************************************************************************
  187. 函 数 名 :OnEquipmentView
  188. 功能描述 :显示设备管理视图
  189. 输入参数 :无
  190. 输出参数 :无
  191. 返 回 值 :void
  192. **************************************************************************************************/
  193. void CMainFrame::OnEquipmentView()
  194. {
  195. EquipTypeView dlg;
  196. if (dlg.DoModal() == IDOK)
  197. {
  198. }
  199. }
  200. /**************************************************************************************************
  201. 函 数 名 :OnReportView
  202. 功能描述 :显示测量报告视图
  203. 输入参数 :无
  204. 输出参数 :无
  205. 返 回 值 :void
  206. **************************************************************************************************/
  207. void CMainFrame::OnReportView()
  208. {
  209. ReportView dlg;
  210. if (dlg.DoModal() == IDOK) {
  211. }
  212. }
  213. /**************************************************************************************************
  214. 函 数 名 :OnStartView
  215. 功能描述 :显示“开始”视图
  216. 输入参数 :无
  217. 输出参数 :无
  218. 返 回 值 :void
  219. **************************************************************************************************/
  220. void CMainFrame::OnStartView()
  221. {
  222. this->SwitchToForm(IDD_VIEW_START, 0);
  223. }
  224. // 帮助
  225. void CMainFrame::OnHelp()
  226. {
  227. // TODO: 在此添加命令处理程序代码
  228. }
  229. // 更新窗口标题
  230. void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle)
  231. {
  232. CString szAppName;
  233. szAppName.Format(AFX_IDS_APP_TITLE);
  234. this->SetWindowText(szAppName);
  235. //CFrameWnd::OnUpdateFrameTitle(bAddToTitle);
  236. }
  237. // 设置窗口最大、最小、位置等初始信息
  238. void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
  239. {
  240. lpMMI->ptMinTrackSize.x = 1550;
  241. lpMMI->ptMinTrackSize.y = 920;
  242. CFrameWnd::OnGetMinMaxInfo(lpMMI);
  243. }
  244. /**************************************************************************************************
  245. 函 数 名 :OnStartStaticTask
  246. 功能描述 :显示“静态任务”视图
  247. 输入参数 :无
  248. 输出参数 :无
  249. 返 回 值 :void
  250. **************************************************************************************************/
  251. afx_msg LRESULT CMainFrame::OnStartStaticTask(WPARAM wParam, LPARAM lParam)
  252. {
  253. DWORD taskId = (DWORD)wParam;
  254. this->SwitchToForm(IDD_VIEW_STATIC_TASK, taskId);
  255. return 0;
  256. }
  257. /**************************************************************************************************
  258. 函 数 名 :OnStartDynamicTask
  259. 功能描述 :显示“动态任务”视图
  260. 输入参数 :无
  261. 输出参数 :无
  262. 返 回 值 :void
  263. **************************************************************************************************/
  264. afx_msg LRESULT CMainFrame::OnStartDynamicTask(WPARAM wParam, LPARAM lParam)
  265. {
  266. DWORD taskId = (DWORD)wParam;
  267. this->SwitchToForm(IDD_VIEW_DYNAMIC_TASK, taskId);
  268. return 0;
  269. }
  270. /**************************************************************************************************
  271. 函 数 名 :OnBackToStart
  272. 功能描述 :返回开始任务视图
  273. 输入参数 :无
  274. 输出参数 :无
  275. 返 回 值 :void
  276. **************************************************************************************************/
  277. afx_msg LRESULT CMainFrame::OnBackToStart(WPARAM wParam, LPARAM lParam)
  278. {
  279. this->SwitchToForm(IDD_VIEW_START, 0);
  280. return 0;
  281. }
  282. void CMainFrame::OnDestroy()
  283. {
  284. CFrameWnd::OnDestroy();
  285. KillTimer(TIMER_SECOND);
  286. }
  287. void CMainFrame::OnUpdateStatusTime(CCmdUI *pCmdUI)
  288. {
  289. pCmdUI->Enable(TRUE);
  290. }
  291. void CMainFrame::OnTimer(UINT_PTR nIDEvent)
  292. {
  293. CString szTime;
  294. CTime tTime = CTime::GetCurrentTime();
  295. switch (nIDEvent)
  296. {
  297. case TIMER_SECOND:
  298. szTime = tTime.Format(_T("%Y-%m-%d %H:%M:%S"));
  299. m_wndStatusBar.SetPaneText(1, szTime);
  300. break;
  301. default:
  302. break;
  303. }
  304. }