| | |
| | | |
| | | // Servo.cpp : 定义应用程序的类行为。 |
| | | |
| | | // Servo.cpp : 定义应用程序的类行为。 |
| | | // |
| | | |
| | | #include "stdafx.h" |
| | |
| | | #include "ServoDlg.h" |
| | | #include "ServoGraph.h" |
| | | #include "AlarmManager.h" |
| | | #include "SECSRuntimeManager.h" |
| | | #include "TransferManager.h" |
| | | #include "SystemLogManager.h" |
| | | #include "UserManager.h" |
| | | #include "RecipeManager.h" |
| | | #include "VerticalLine.h" |
| | | #include "HorizontalLine.h" |
| | | #include "EqsGraphWnd.h" |
| | | #include "MapPosWnd.h" |
| | | #include "HmTab.h" |
| | | #include "CControlJobManagerDlg.h" |
| | | #include "ToolUnits.h" |
| | | #include "CUserManager2.h" |
| | | |
| | | |
| | | // 声明全局变量,用于管理 GDI+ 初始化 |
| | | // 声明全局变量,用于管理 GDI+ 初始化 |
| | | ULONG_PTR g_diplusToken; |
| | | GdiplusStartupInput g_diplusStartupInput; |
| | | |
| | |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | | // CServoApp 构造 |
| | | // CServoApp 构造 |
| | | |
| | | CServoApp::CServoApp() |
| | | { |
| | | // 支持重新启动管理器 |
| | | // 支持重新启动管理器 |
| | | m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; |
| | | |
| | | // TODO: 在此处添加构造代码, |
| | | // 将所有重要的初始化放置在 InitInstance 中 |
| | | // TODO: 在此处添加构造代码, |
| | | // 将所有重要的初始化放置在 InitInstance 中 |
| | | m_nVersionNumber = 8; |
| | | m_strVersionName = _T("1.0.08"); |
| | | } |
| | | |
| | | |
| | | // 唯一的一个 CServoApp 对象 |
| | | // 唯一的一个 CServoApp 对象 |
| | | |
| | | CServoApp theApp; |
| | | |
| | | |
| | | // CServoApp 初始化 |
| | | // CServoApp 初始化 |
| | | |
| | | BOOL CServoApp::InitInstance() |
| | | { |
| | | // TODO: 调用 AfxInitRichEdit2() 以初始化 richedit2 库。\n" // 如果一个运行在 Windows XP 上的应用程序清单指定要 |
| | | // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, |
| | | //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。 |
| | | // TODO: 调用 AfxInitRichEdit2() 以初始化 richedit2 库。\n" // 如果一个运行在 Windows XP 上的应用程序清单指定要 |
| | | // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, |
| | | //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。 |
| | | INITCOMMONCONTROLSEX InitCtrls; |
| | | InitCtrls.dwSize = sizeof(InitCtrls); |
| | | // 将它设置为包括所有要在应用程序中使用的 |
| | | // 公共控件类。 |
| | | // 将它设置为包括所有要在应用程序中使用的 |
| | | // 公共控件类。 |
| | | InitCtrls.dwICC = ICC_WIN95_CLASSES; |
| | | InitCommonControlsEx(&InitCtrls); |
| | | |
| | |
| | | |
| | | AfxEnableControlContainer(); |
| | | |
| | | // 创建 shell 管理器,以防对话框包含 |
| | | // 任何 shell 树视图控件或 shell 列表视图控件。 |
| | | // 创建 shell 管理器,以防对话框包含 |
| | | // 任何 shell 树视图控件或 shell 列表视图控件。 |
| | | CShellManager *pShellManager = new CShellManager; |
| | | |
| | | // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题 |
| | | // 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题 |
| | | CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); |
| | | |
| | | // 标准初始化 |
| | | // 如果未使用这些功能并希望减小 |
| | | // 最终可执行文件的大小,则应移除下列 |
| | | // 不需要的特定初始化例程 |
| | | // 更改用于存储设置的注册表项 |
| | | // TODO: 应适当修改该字符串, |
| | | // 例如修改为公司或组织名 |
| | | SetRegistryKey(_T("应用程序向导生成的本地应用程序")); |
| | | // 标准初始化 |
| | | // 如果未使用这些功能并希望减小 |
| | | // 最终可执行文件的大小,则应移除下列 |
| | | // 不需要的特定初始化例程 |
| | | // 更改用于存储设置的注册表项 |
| | | // TODO: 应适当修改该字符串, |
| | | // 例如修改为公司或组织名 |
| | | SetRegistryKey(_T("应用程序向导生成的本地应用程序")); |
| | | |
| | | |
| | | // 本程序文件目录 |
| | | // 本程序文件目录 |
| | | TCHAR sDrive[_MAX_DRIVE]; |
| | | TCHAR sDir[_MAX_DIR]; |
| | | TCHAR sFilename[_MAX_FNAME], sAppFilename[_MAX_FNAME]; |
| | |
| | | m_model.setWorkDir((LPTSTR)(LPCTSTR)m_strAppDir); |
| | | |
| | | |
| | | // 注册控件 |
| | | // 用户数据库管理 |
| | | CString strDir = m_strAppDir + _T("\\DB"); |
| | | CUserManager2::getInstance().init((LPTSTR)(LPCTSTR)strDir); |
| | | |
| | | |
| | | // 注册控件 |
| | | CServoGraph::RegisterWndClass(); |
| | | CVerticalLine::RegisterWndClass(); |
| | | CHorizontalLine::RegisterWndClass(); |
| | |
| | | CHmTab::RegisterWndClass(); |
| | | |
| | | |
| | | // 初始化Rx库 |
| | | // 初始化Rx库 |
| | | RX_Init(); |
| | | HSMS_Initialize(); |
| | | |
| | | |
| | | // 初始化 GDI+ |
| | | // 初始化 GDI+ |
| | | InitGDIPlus(); |
| | | |
| | | |
| | | // 初始化 MFC RichEdit 控件 |
| | | // 初始化 MFC RichEdit 控件 |
| | | AfxInitRichEdit2(); |
| | | |
| | | |
| | | // 初始化报警管理器 |
| | | // 初始化报警管理器 |
| | | try { |
| | | if (!AlarmManager::getInstance().initAlarmTable()) { |
| | | AfxMessageBox("初始化报警管理器失败!"); |
| | | AfxMessageBox("初始化报警管理器失败!"); |
| | | return FALSE; |
| | | } |
| | | } |
| | | catch (const std::exception& ex) { |
| | | CString errorMsg; |
| | | errorMsg.Format(_T("初始化报警管理器失败:%s"), CString(ex.what())); |
| | | AfxMessageBox(errorMsg, MB_ICONERROR); |
| | | return FALSE; |
| | | } |
| | | AlarmManager::getInstance().insertMockData(); |
| | | |
| | | // 初始化SECS运行设置管理库 |
| | | try { |
| | | if (!SECSRuntimeManager::getInstance().initRuntimeSetting()) { |
| | | AfxMessageBox("初始化SECS运行设置失败!"); |
| | | return FALSE; |
| | | } |
| | | } |
| | | catch (const std::exception& ex) { |
| | | CString errorMsg; |
| | | errorMsg.Format(_T("初始化SECS运行设置失败:%s"), CString(ex.what())); |
| | | errorMsg.Format(_T("初始化报警管理器失败:%s"), CString(ex.what())); |
| | | AfxMessageBox(errorMsg, MB_ICONERROR); |
| | | return FALSE; |
| | | } |
| | | |
| | | // 初始化搬运记录管理库 |
| | | // 初始化搬运记录管理库 |
| | | try { |
| | | if (!TransferManager::getInstance().initTransferTable()) { |
| | | AfxMessageBox("初始化搬运记录管理库设置失败!"); |
| | | AfxMessageBox("初始化搬运记录管理库设置失败!"); |
| | | return FALSE; |
| | | } |
| | | } |
| | | catch (const std::exception& ex) { |
| | | CString errorMsg; |
| | | errorMsg.Format(_T("初始化搬运记录管理库设置失败:%s"), CString(ex.what())); |
| | | errorMsg.Format(_T("初始化搬运记录管理库设置失败:%s"), CString(ex.what())); |
| | | AfxMessageBox(errorMsg, MB_ICONERROR); |
| | | return FALSE; |
| | | } |
| | | |
| | | // 初始化运行日志管理库 |
| | | // 初始化运行日志管理库 |
| | | try { |
| | | if (!SystemLogManager::getInstance().initializeLogTable()) { |
| | | AfxMessageBox("初始化运行日志管理库失败!"); |
| | | if (!SystemLogManager::getInstance().initSystemLogTable()) { |
| | | AfxMessageBox("初始化运行日志管理库失败!"); |
| | | return FALSE; |
| | | } |
| | | } |
| | | catch (const std::exception& ex) { |
| | | CString errorMsg; |
| | | errorMsg.Format(_T("初始化运行日志管理库失败:%s"), CString(ex.what())); |
| | | errorMsg.Format(_T("初始化运行日志管理库失败:%s"), CString(ex.what())); |
| | | AfxMessageBox(errorMsg, MB_ICONERROR); |
| | | return FALSE; |
| | | } |
| | | |
| | | // 初始化用户管理库 |
| | | // 初始化用户管理库 |
| | | try { |
| | | UserManager& userManager = UserManager::getInstance(); |
| | | #if !defined(_DEBUG) |
| | |
| | | } |
| | | catch (const std::exception& ex) { |
| | | CString errorMsg; |
| | | errorMsg.Format(_T("初始化用户管理库失败:%s"), CString(ex.what())); |
| | | errorMsg.Format(_T("初始化用户管理库失败:%s"), CString(ex.what())); |
| | | AfxMessageBox(errorMsg, MB_ICONERROR); |
| | | return FALSE; |
| | | } |
| | | |
| | | // 初始化配方管理库 |
| | | try { |
| | | if (!RecipeManager::getInstance().initRecipeTable()) { |
| | | AfxMessageBox("初始化配方管理库失败!"); |
| | | return FALSE; |
| | | } |
| | | } |
| | | catch (const std::exception& ex) { |
| | | CString errorMsg; |
| | | errorMsg.Format(_T("初始化配方管理库失败:%s"), CString(ex.what())); |
| | | AfxMessageBox(errorMsg, MB_ICONERROR); |
| | | return FALSE; |
| | | } |
| | | |
| | | |
| | | CServoDlg dlg; |
| | |
| | | INT_PTR nResponse = dlg.DoModal(); |
| | | if (nResponse == IDOK) |
| | | { |
| | | // TODO: 在此放置处理何时用 |
| | | // “确定”来关闭对话框的代码 |
| | | // TODO: 在此放置处理何时用 |
| | | // “确定”来关闭对话框的代码 |
| | | } |
| | | else if (nResponse == IDCANCEL) |
| | | { |
| | | // TODO: 在此放置处理何时用 |
| | | // “取消”来关闭对话框的代码 |
| | | // TODO: 在此放置处理何时用 |
| | | // “取消”来关闭对话框的代码 |
| | | } |
| | | else if (nResponse == -1) |
| | | { |
| | | TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n"); |
| | | TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); |
| | | TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n"); |
| | | TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n"); |
| | | } |
| | | |
| | | // 删除上面创建的 shell 管理器。 |
| | | // 删除上面创建的 shell 管理器。 |
| | | if (pShellManager != NULL) |
| | | { |
| | | delete pShellManager; |
| | | } |
| | | |
| | | // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, |
| | | // 而不是启动应用程序的消息泵。 |
| | | // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, |
| | | // 而不是启动应用程序的消息泵。 |
| | | return FALSE; |
| | | } |
| | | |
| | | int CServoApp::ExitInstance() |
| | | { |
| | | CControlJobManagerDlg::FreeState(); |
| | | m_model.term(); |
| | | HSMS_Term(); |
| | | RX_Term(); |
| | | UX_Shutdown(); |
| | | |
| | | // 清理 GDI+ |
| | | // 清理 GDI+ |
| | | TermGDIPlus(); |
| | | |
| | | // 销毁报警表 |
| | | // 销毁报警表 |
| | | AlarmManager::getInstance().termAlarmTable(); |
| | | |
| | | // 销毁SECS运行设置管理库 |
| | | SECSRuntimeManager::getInstance().termRuntimeSetting(); |
| | | |
| | | // 销毁搬运记录管理库 |
| | | // 销毁搬运记录管理库 |
| | | TransferManager::getInstance().termTransferTable(); |
| | | |
| | | // 销毁运行日志 |
| | | SystemLogManager::getInstance().termSystemLogTable(); |
| | | |
| | | // 销毁用户表 |
| | | #if !defined(_DEBUG) |
| | | // 清除 UserManager 的无操作检测 |
| | | UserManager::getInstance().terminateIdleDetection(); |
| | | KillTimer(1); |
| | | #endif |
| | | |
| | | // 销毁配方表 |
| | | RecipeManager::getInstance().termRecipeTable(); |
| | | |
| | | return CWinApp::ExitInstance(); |
| | | } |
| | | |
| | | // 初始化 GDI+ |
| | | // 初始化 GDI+ |
| | | void CServoApp::InitGDIPlus() |
| | | { |
| | | // 初始化 GDI+ 图形库 |
| | | // 初始化 GDI+ 图形库 |
| | | GdiplusStartup(&g_diplusToken, &g_diplusStartupInput, NULL); |
| | | } |
| | | |
| | | // 清理 GDI+ |
| | | // 清理 GDI+ |
| | | void CServoApp::TermGDIPlus() |
| | | { |
| | | // 清理 GDI+ 图形库 |
| | | // 清理 GDI+ 图形库 |
| | | GdiplusShutdown(g_diplusToken); |
| | | } |