/************************************************************************************************** 版本所有(C), 2020-2022, 北京普达迪泰 *************************************************************************************************** 文 件 名: MainFrm.cpp 功能描述: 程序主框架 版 本 号: 1.00初版 作 者: HYF 生成日期; 2021-12-20 最近修改: 函数列表: 修改历史: 1.日 期 :2021-12-20 作 者 : HYF 修改内容 : 创建文件 **************************************************************************************************/ // MainFrm.cpp: CMainFrame 类的实现 #include "pch.h" #include "Dms.h" #include "MainFrm.h" #include "StartView.h" #include "StaticTask.h" #include "DynamicTask.h" #include "EquipTypeView.h" #include "ReportView.h" #include "IDPMSManager.h" #ifdef _DEBUG #define new DEBUG_NEW #endif #define TIMER_SECOND 1 // CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_CREATE() //ON_COMMAND(IDM_EQUIPMENT_VIEW, &CMainFrame::OnEquipmentView) //ON_COMMAND(IDM_REPORT_VIEW, &CMainFrame::OnReportView) //ON_COMMAND(IDM_START, &CMainFrame::OnStartView) //ON_COMMAND(IDM_HELP, &CMainFrame::OnHelp) ON_UPDATE_COMMAND_UI(ID_INDICATOR_TIME, OnUpdateStatusTime) ON_WM_GETMINMAXINFO() ON_MESSAGE(WM_START_STATIC, &CMainFrame::OnStartStaticTask) ON_MESSAGE(WM_START_DYNAMIC, &CMainFrame::OnStartDynamicTask) ON_MESSAGE(WM_BACK_TO_START, &CMainFrame::OnBackToStart) ON_WM_DESTROY() ON_WM_TIMER() END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // 状态行指示器 ID_INDICATOR_TIME, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; // CMainFrame 构造/析构 CMainFrame::CMainFrame() noexcept { m_CurViewId = IDD_VIEW_START; } CMainFrame::~CMainFrame() { } /************************************************************************************************** 函 数 名 :OnCreate 功能描述 :创建窗口初始化 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { this->SetMenu(NULL); if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndStatusBar.Create(this)) { TRACE0("未能创建状态栏\n"); return -1; // 未能创建 } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)); m_wndStatusBar.SetPaneInfo(1, ID_INDICATOR_TIME, SBPS_NORMAL, 120); // 初始化IDPMS IDPMSManager *pManager = IDPMSManager::GetManager(); // 时间定时器 SetTimer(TIMER_SECOND, 1000, NULL); return 0; } // 窗口风格 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; cs.style &= -FWS_ADDTOTITLE; cs.style &= ~WS_THICKFRAME; cs.style |= WS_DLGFRAME; return TRUE; } // CMainFrame 诊断 #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG /************************************************************************************************** 函 数 名 :ActivateFrame 功能描述 :初始化窗口大小状态 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ void CMainFrame::ActivateFrame(int nCmdShow) { nCmdShow = SW_SHOWMAXIMIZED; CFrameWnd::ActivateFrame(nCmdShow); } /************************************************************************************************** 函 数 名 :SwitchToForm 功能描述 :视图切换 输入参数 :nForm-视图资源ID 输出参数 :无 返 回 值 :void **************************************************************************************************/ void CMainFrame::SwitchToForm(int nForm, DWORD taskId) { if (m_CurViewId == nForm) return; // 当前视图 CView *pOldActiveView = this->GetActiveView(); // 新视图 CView *pNewActiveView = (CView *)this->GetDlgItem(nForm); if (pNewActiveView == NULL) { switch (nForm) { case IDD_VIEW_START: pNewActiveView = (CView *)new CStartView(); break; case IDD_VIEW_STATIC_TASK: pNewActiveView = (CView *)new CStaticTask(); break; case IDD_VIEW_DYNAMIC_TASK: pNewActiveView = (CView *)new CDynamicTask(); break; } // 创建新视图 CCreateContext context; context.m_pCurrentDoc = pOldActiveView->GetDocument(); pNewActiveView->Create(NULL, NULL, WS_CHILD, CFrameWnd::rectDefault, this, nForm, &context); pNewActiveView->OnInitialUpdate(); } // 显示 this->SetActiveView(pNewActiveView); pNewActiveView->ShowWindow(SW_SHOW); pOldActiveView->ShowWindow(SW_HIDE); if (pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CStartView)) { pOldActiveView->SetDlgCtrlID(IDD_VIEW_START); } else if (pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CStaticTask)) { pOldActiveView->SetDlgCtrlID(IDD_VIEW_STATIC_TASK); } else if (pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CDynamicTask)) { pOldActiveView->SetDlgCtrlID(IDD_VIEW_DYNAMIC_TASK); } pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); //delete pOldActiveView; // 调用初始化设置 if (nForm == IDD_VIEW_STATIC_TASK) { CStaticTask *pStaticTask = (CStaticTask *)pNewActiveView; pStaticTask->InitFormData(taskId); } else if (nForm == IDD_VIEW_DYNAMIC_TASK) { CDynamicTask *pDynamicTask = (CDynamicTask *)pNewActiveView; pDynamicTask->InitFormData(taskId); } else if (nForm == IDD_VIEW_START) { CStartView *pStartView = (CStartView *)pNewActiveView; pStartView->InitFormData(); } pNewActiveView->UpdateWindow(); // 设整布局 this->RecalcLayout(); m_CurViewId = nForm; } // CMainFrame 消息处理程序 /************************************************************************************************** 函 数 名 :OnEquipmentView 功能描述 :显示设备管理视图 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ void CMainFrame::OnEquipmentView() { EquipTypeView dlg; if (dlg.DoModal() == IDOK) { } } /************************************************************************************************** 函 数 名 :OnReportView 功能描述 :显示测量报告视图 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ void CMainFrame::OnReportView() { ReportView dlg; if (dlg.DoModal() == IDOK) { } } /************************************************************************************************** 函 数 名 :OnStartView 功能描述 :显示“开始”视图 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ void CMainFrame::OnStartView() { this->SwitchToForm(IDD_VIEW_START, 0); } // 帮助 void CMainFrame::OnHelp() { // TODO: 在此添加命令处理程序代码 } // 更新窗口标题 void CMainFrame::OnUpdateFrameTitle(BOOL bAddToTitle) { CString szAppName; szAppName.Format(AFX_IDS_APP_TITLE); this->SetWindowText(szAppName); //CFrameWnd::OnUpdateFrameTitle(bAddToTitle); } // 设置窗口最大、最小、位置等初始信息 void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI) { lpMMI->ptMinTrackSize.x = 1550; lpMMI->ptMinTrackSize.y = 920; CFrameWnd::OnGetMinMaxInfo(lpMMI); } /************************************************************************************************** 函 数 名 :OnStartStaticTask 功能描述 :显示“静态任务”视图 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ afx_msg LRESULT CMainFrame::OnStartStaticTask(WPARAM wParam, LPARAM lParam) { DWORD taskId = (DWORD)wParam; this->SwitchToForm(IDD_VIEW_STATIC_TASK, taskId); return 0; } /************************************************************************************************** 函 数 名 :OnStartDynamicTask 功能描述 :显示“动态任务”视图 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ afx_msg LRESULT CMainFrame::OnStartDynamicTask(WPARAM wParam, LPARAM lParam) { DWORD taskId = (DWORD)wParam; this->SwitchToForm(IDD_VIEW_DYNAMIC_TASK, taskId); return 0; } /************************************************************************************************** 函 数 名 :OnBackToStart 功能描述 :返回开始任务视图 输入参数 :无 输出参数 :无 返 回 值 :void **************************************************************************************************/ afx_msg LRESULT CMainFrame::OnBackToStart(WPARAM wParam, LPARAM lParam) { this->SwitchToForm(IDD_VIEW_START, 0); return 0; } void CMainFrame::OnDestroy() { CFrameWnd::OnDestroy(); KillTimer(TIMER_SECOND); } void CMainFrame::OnUpdateStatusTime(CCmdUI *pCmdUI) { pCmdUI->Enable(TRUE); } void CMainFrame::OnTimer(UINT_PTR nIDEvent) { CString szTime; CTime tTime = CTime::GetCurrentTime(); switch (nIDEvent) { case TIMER_SECOND: szTime = tTime.Format(_T("%Y-%m-%d %H:%M:%S")); m_wndStatusBar.SetPaneText(1, szTime); break; default: break; } }