// Servo.cpp : ¶¨ÒåÓ¦ÓóÌÐòµÄÀàÐÐΪ¡£ // #include "stdafx.h" #include "Servo.h" #include "ServoDlg.h" #include "ServoGraph.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(); // ³õʼ»¯Rx¿â RX_Init(); HSMS_Initialize(); // ³õʼ»¯ GDI+ InitGDIPlus(); 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(); return CWinApp::ExitInstance(); } // ³õʼ»¯ GDI+ void CServoApp::InitGDIPlus() { // ³õʼ»¯ GDI+ ͼÐοâ GdiplusStartup(&g_diplusToken, &g_diplusStartupInput, NULL); } // ÇåÀí GDI+ void CServoApp::TermGDIPlus() { // ÇåÀí GDI+ ͼÐοâ GdiplusShutdown(g_diplusToken); }