|
// Servo.cpp : ¶¨ÒåÓ¦ÓóÌÐòµÄÀàÐÐΪ¡£
|
//
|
|
#include "stdafx.h"
|
#include "Servo.h"
|
#include "ServoDlg.h"
|
#include "ServoGraph.h"
|
#include "AlarmManager.h"
|
#include "SECSRuntimeManager.h"
|
#include "ProductionLogManager.h"
|
#include "VerticalLine.h"
|
#include "EqsGraphWnd.h"
|
#include "MapPosWnd.h"
|
#include "HmTab.h"
|
|
|
// ÉùÃ÷È«¾Ö±äÁ¿£¬ÓÃÓÚ¹ÜÀí GDI+ ³õʼ»¯
|
ULONG_PTR g_diplusToken;
|
GdiplusStartupInput g_diplusStartupInput;
|
|
#ifdef _DEBUG
|
#define new DEBUG_NEW
|
#endif
|
|
|
// CServoApp
|
|
BEGIN_MESSAGE_MAP(CServoApp, CWinApp)
|
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
|
END_MESSAGE_MAP()
|
|
|
// CServoApp ¹¹Ôì
|
|
CServoApp::CServoApp()
|
{
|
// Ö§³ÖÖØÐÂÆô¶¯¹ÜÀíÆ÷
|
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
|
|
// TODO: ÔÚ´Ë´¦Ìí¼Ó¹¹Ôì´úÂ룬
|
// ½«ËùÓÐÖØÒªµÄ³õʼ»¯·ÅÖÃÔÚ InitInstance ÖÐ
|
}
|
|
|
// ΨһµÄÒ»¸ö CServoApp ¶ÔÏó
|
|
CServoApp theApp;
|
|
|
// CServoApp ³õʼ»¯
|
|
BOOL CServoApp::InitInstance()
|
{
|
// Èç¹ûÒ»¸öÔËÐÐÔÚ Windows XP ÉϵÄÓ¦ÓóÌÐòÇåµ¥Ö¸¶¨Òª
|
// ʹÓà ComCtl32.dll °æ±¾ 6 »ò¸ü¸ß°æ±¾À´ÆôÓÿÉÊÓ»¯·½Ê½£¬
|
//ÔòÐèÒª InitCommonControlsEx()¡£ ·ñÔò£¬½«ÎÞ·¨´´½¨´°¿Ú¡£
|
INITCOMMONCONTROLSEX InitCtrls;
|
InitCtrls.dwSize = sizeof(InitCtrls);
|
// ½«ËüÉèÖÃΪ°üÀ¨ËùÓÐÒªÔÚÓ¦ÓóÌÐòÖÐʹÓõÄ
|
// ¹«¹²¿Ø¼þÀà¡£
|
InitCtrls.dwICC = ICC_WIN95_CLASSES;
|
InitCommonControlsEx(&InitCtrls);
|
|
CWinApp::InitInstance();
|
|
|
AfxEnableControlContainer();
|
|
// ´´½¨ shell ¹ÜÀíÆ÷£¬ÒÔ·À¶Ô»°¿ò°üº¬
|
// ÈκΠshell Ê÷ÊÓͼ¿Ø¼þ»ò shell ÁбíÊÓͼ¿Ø¼þ¡£
|
CShellManager *pShellManager = new CShellManager;
|
|
// ¼¤»î¡°Windows Native¡±ÊÓ¾õ¹ÜÀíÆ÷£¬ÒÔ±ãÔÚ MFC ¿Ø¼þÖÐÆôÓÃÖ÷Ìâ
|
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
|
|
// ±ê×¼³õʼ»¯
|
// Èç¹ûδʹÓÃÕâЩ¹¦Äܲ¢Ï£Íû¼õС
|
// ×îÖÕ¿ÉÖ´ÐÐÎļþµÄ´óС£¬ÔòÓ¦ÒÆ³ýÏÂÁÐ
|
// ²»ÐèÒªµÄÌØ¶¨³õʼ»¯Àý³Ì
|
// ¸ü¸ÄÓÃÓÚ´æ´¢ÉèÖõÄ×¢²á±íÏî
|
// TODO: Ó¦Êʵ±Ð޸ĸÃ×Ö·û´®£¬
|
// ÀýÈçÐÞ¸ÄΪ¹«Ë¾»ò×éÖ¯Ãû
|
SetRegistryKey(_T("Ó¦ÓóÌÐòÏòµ¼Éú³ÉµÄ±¾µØÓ¦ÓóÌÐò"));
|
|
|
// ±¾³ÌÐòÎļþĿ¼
|
TCHAR sDrive[_MAX_DRIVE];
|
TCHAR sDir[_MAX_DIR];
|
TCHAR sFilename[_MAX_FNAME], sAppFilename[_MAX_FNAME];
|
TCHAR sExt[_MAX_EXT];
|
GetModuleFileName(AfxGetInstanceHandle(), sAppFilename, _MAX_FNAME);
|
_tsplitpath_s(sAppFilename, sDrive, sDir, sFilename, sExt);
|
m_strAppDir = CString(sDrive) + CString(sDir);
|
m_strAppFile = CString(sFilename);
|
m_model.setWorkDir((LPTSTR)(LPCTSTR)m_strAppDir);
|
|
|
// ×¢²á¿Ø¼þ
|
CServoGraph::RegisterWndClass();
|
CVerticalLine::RegisterWndClass();
|
CEqsGraphWnd::RegisterWndClass();
|
CMapPosWnd::RegisterWndClass();
|
CHmTab::RegisterWndClass();
|
|
|
// ³õʼ»¯Rx¿â
|
RX_Init();
|
HSMS_Initialize();
|
|
|
// ³õʼ»¯ GDI+
|
InitGDIPlus();
|
|
|
// ³õʼ»¯±¨¾¯¹ÜÀíÆ÷
|
try {
|
if (!AlarmManager::getInstance().initAlarmTable()) {
|
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();
|
|
|
// ³õʼ»¯Éú²úÂÄÀú¹ÜÀíÆ÷
|
try {
|
if (!ProductionLogManager::getInstance().initProductionTable()) {
|
AfxMessageBox("³õʼ»¯Éú²úÂÄÀú¹ÜÀíÆ÷ʧ°Ü£¡");
|
return FALSE;
|
}
|
}
|
catch (const std::exception& ex) {
|
CString errorMsg;
|
errorMsg.Format(_T("³õʼ»¯Éú²úÂÄÀú¹ÜÀíÆ÷ʧ°Ü£º%s"), CString(ex.what()));
|
AfxMessageBox(errorMsg, MB_ICONERROR);
|
return FALSE;
|
}
|
|
|
// ³õʼ»¯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()));
|
AfxMessageBox(errorMsg, MB_ICONERROR);
|
return FALSE;
|
}
|
|
|
CServoDlg dlg;
|
m_pMainWnd = &dlg;
|
INT_PTR nResponse = dlg.DoModal();
|
if (nResponse == IDOK)
|
{
|
// TODO: ÔÚ´Ë·ÅÖô¦ÀíºÎʱÓÃ
|
// ¡°È·¶¨¡±À´¹Ø±Õ¶Ô»°¿òµÄ´úÂë
|
}
|
else if (nResponse == IDCANCEL)
|
{
|
// TODO: ÔÚ´Ë·ÅÖô¦ÀíºÎʱÓÃ
|
// ¡°È¡Ïû¡±À´¹Ø±Õ¶Ô»°¿òµÄ´úÂë
|
}
|
else if (nResponse == -1)
|
{
|
TRACE(traceAppMsg, 0, "¾¯¸æ: ¶Ô»°¿ò´´½¨Ê§°Ü£¬Ó¦ÓóÌÐò½«ÒâÍâÖÕÖ¹¡£\n");
|
TRACE(traceAppMsg, 0, "¾¯¸æ: Èç¹ûÄúÔÚ¶Ô»°¿òÉÏʹÓà MFC ¿Ø¼þ£¬ÔòÎÞ·¨ #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS¡£\n");
|
}
|
|
// ɾ³ýÉÏÃæ´´½¨µÄ shell ¹ÜÀíÆ÷¡£
|
if (pShellManager != NULL)
|
{
|
delete pShellManager;
|
}
|
|
// ÓÉÓÚ¶Ô»°¿òÒѹرգ¬ËùÒÔ½«·µ»Ø FALSE ÒÔ±ãÍ˳öÓ¦ÓóÌÐò£¬
|
// ¶ø²»ÊÇÆô¶¯Ó¦ÓóÌÐòµÄÏûÏ¢±Ã¡£
|
return FALSE;
|
}
|
|
int CServoApp::ExitInstance()
|
{
|
m_model.term();
|
HSMS_Term();
|
RX_Term();
|
|
// ÇåÀí GDI+
|
TermGDIPlus();
|
|
// Ïú»Ù±¨¾¯±í
|
AlarmManager::getInstance().termAlarmTable();
|
|
// Ïú»ÙSECSÔËÐÐÉèÖùÜÀí¿â
|
SECSRuntimeManager::getInstance().termRuntimeSetting();
|
|
return CWinApp::ExitInstance();
|
}
|
|
// ³õʼ»¯ GDI+
|
void CServoApp::InitGDIPlus()
|
{
|
// ³õʼ»¯ GDI+ ͼÐοâ
|
GdiplusStartup(&g_diplusToken, &g_diplusStartupInput, NULL);
|
}
|
|
// ÇåÀí GDI+
|
void CServoApp::TermGDIPlus()
|
{
|
// ÇåÀí GDI+ ͼÐοâ
|
GdiplusShutdown(g_diplusToken);
|
}
|