// BoounionPLC.cpp : ¶¨ÒåÓ¦ÓóÌÐòµÄÀàÐÐΪ¡£ // #include "stdafx.h" #include "BoounionPLC.h" #include "BoounionPLCDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CBoounionPLCApp BEGIN_MESSAGE_MAP(CBoounionPLCApp, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP() // CBoounionPLCApp ¹¹Ôì CBoounionPLCApp::CBoounionPLCApp() { // Ö§³ÖÖØÐÂÆô¶¯¹ÜÀíÆ÷ m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; // TODO: ÔÚ´Ë´¦Ìí¼Ó¹¹Ôì´úÂ룬 // ½«ËùÓÐÖØÒªµÄ³õʼ»¯·ÅÖÃÔÚ InitInstance ÖÐ } // ΨһµÄÒ»¸ö CBoounionPLCApp ¶ÔÏó CBoounionPLCApp theApp; // CBoounionPLCApp ³õʼ»¯ BOOL CBoounionPLCApp::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); CString strIniFile; strIniFile.Format(_T("%s\\BoounionPLCconfiguration.ini"), (LPTSTR)(LPCTSTR)m_strAppDir); int plcTimeout = GetPrivateProfileInt("PLC", "Timeout", 700, strIniFile); int plcBufSize = GetPrivateProfileInt("PLC", "BufSize", 20, strIniFile); int plcPacketSize = GetPrivateProfileInt("PLC", "PacketSize", 80, strIniFile); MCL_Initialize(); MCL_SetTimeout(plcTimeout); MCL_SetMaxActionSize(plcBufSize); MCL_SetPacketSize(plcPacketSize); RX_Init(); m_hAppMutex = CreateMutexA(NULL, FALSE, _T("BoounionPLC")); if (GetLastError() == ERROR_ALREADY_EXISTS) { AfxMessageBox(_T("ÒѾ­ÔËÐÐÁËÒ»¸öʵÀý£¬Æô¶¯Ê§°Ü!")); return FALSE; } CBoounionPLCDlg 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 CBoounionPLCApp::ExitInstance() { m_model.term(); RX_Term(); MCL_Term(); CloseHandle(m_hAppMutex); return CWinApp::ExitInstance(); }