CTSManager.cpp 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. 
  2. // CTSManager.cpp: 定义应用程序的类行为。
  3. //
  4. #include "pch.h"
  5. #include "framework.h"
  6. #include "afxwinappex.h"
  7. #include "afxdialogex.h"
  8. #include "CTSManager.h"
  9. #include "MainFrm.h"
  10. #include "ChildFrm.h"
  11. #include "CTSManagerDoc.h"
  12. #include "CTSManagerView.h"
  13. #include "test.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #endif
  17. #include "Database.h"
  18. // CCTSManagerApp
  19. BEGIN_MESSAGE_MAP(CCTSManagerApp, CWinAppEx)
  20. ON_COMMAND(ID_APP_ABOUT, &CCTSManagerApp::OnAppAbout)
  21. // 基于文件的标准文档命令
  22. ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew)
  23. ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen)
  24. // 标准打印设置命令
  25. ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinAppEx::OnFilePrintSetup)
  26. END_MESSAGE_MAP()
  27. // CCTSManagerApp 构造
  28. CCTSManagerApp::CCTSManagerApp() noexcept
  29. {
  30. m_bHiColorIcons = TRUE;
  31. // 支持重新启动管理器
  32. m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS;
  33. #ifdef _MANAGED
  34. // 如果应用程序是利用公共语言运行时支持(/clr)构建的,则:
  35. // 1) 必须有此附加设置,“重新启动管理器”支持才能正常工作。
  36. // 2) 在您的项目中,您必须按照生成顺序向 System.Windows.Forms 添加引用。
  37. System::Windows::Forms::Application::SetUnhandledExceptionMode(System::Windows::Forms::UnhandledExceptionMode::ThrowException);
  38. #endif
  39. // TODO: 将以下应用程序 ID 字符串替换为唯一的 ID 字符串;建议的字符串格式
  40. //为 CompanyName.ProductName.SubProduct.VersionInformation
  41. SetAppID(_T("CTSManager.AppID.NoVersion"));
  42. // TODO: 在此处添加构造代码,
  43. // 将所有重要的初始化放置在 InitInstance 中
  44. }
  45. // 唯一的 CCTSManagerApp 对象
  46. CCTSManagerApp theApp;
  47. // CCTSManagerApp 初始化
  48. BOOL CCTSManagerApp::InitInstance()
  49. {
  50. // 如果一个运行在 Windows XP 上的应用程序清单指定要
  51. // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
  52. //则需要 InitCommonControlsEx()。 否则,将无法创建窗口。
  53. INITCOMMONCONTROLSEX InitCtrls;
  54. InitCtrls.dwSize = sizeof(InitCtrls);
  55. // 将它设置为包括所有要在应用程序中使用的
  56. // 公共控件类。
  57. InitCtrls.dwICC = ICC_WIN95_CLASSES;
  58. InitCommonControlsEx(&InitCtrls);
  59. CWinAppEx::InitInstance();
  60. // 获取模块的目录;
  61. TCHAR szDrive[MAX_PATH] = { 0 };
  62. TCHAR szDir[MAX_PATH] = { 0 };
  63. TCHAR szExt[MAX_PATH] = { 0 };
  64. ::GetModuleFileName(NULL, Global::g_szCurModulePath, sizeof(Global::g_szCurModulePath) / sizeof(TCHAR));
  65. _tsplitpath_s(Global::g_szCurModulePath, szDrive, szDir, Global::g_szFna, szExt);
  66. #ifdef _DEBUG
  67. ::GetCurrentDirectory(MAX_PATH, Global::g_szCurModuleDir);
  68. _tcscat_s(Global::g_szCurModuleDir, _T("\\"));
  69. #else
  70. _tcscpy_s(Global::g_szCurModuleDir, szDrive);
  71. _tcscat_s(Global::g_szCurModuleDir, szDir);
  72. #endif
  73. Global::GetConfig();
  74. //GdiplusStartupInput gdiplusStartupInput;
  75. //GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
  76. #if 0 // 用例演示;
  77. // 创建mysql对象;
  78. MYSQL* pConn = mysql_init(NULL); // 会调用mysql_library_init;
  79. // 如果要多线程使用,必须在线程开始处调用;
  80. mysql_thread_init(); //在mysql_init后调用;
  81. const char* perr = mysql_error(pConn);
  82. if (pConn) {
  83. // 创建连接;
  84. if (mysql_real_connect(pConn, _STR_HOST_, _STR_USER_, _STR_PASSWD_, _STR_DBNAME_, 0, NULL, 0)) {
  85. // 查询数据库的表;
  86. if (mysql_query(pConn, "show tables;"))
  87. {
  88. return FALSE;
  89. }
  90. // 获取数据;
  91. MYSQL_RES* pres = mysql_store_result(pConn);
  92. if (pres != NULL) {
  93. MYSQL_ROW row;
  94. unsigned int rlen = mysql_num_fields(pres);
  95. // 打印行数据;
  96. while ((row = mysql_fetch_row(pres))) {
  97. for (unsigned int i = 0; i < rlen; i++) {
  98. OutputDebugString(mysql_fetch_field(pres)->name);
  99. OutputDebugString("=");
  100. OutputDebugString(row[i]);
  101. OutputDebugString("\n");
  102. }
  103. }
  104. // 释放结果内存;
  105. mysql_free_result(pres);
  106. }
  107. }
  108. // 释放连接对象;
  109. mysql_close(pConn);
  110. }
  111. // 对应mysql_thread_init,在线程结束时调用;
  112. mysql_thread_end();
  113. // 释放mysql库;
  114. mysql_library_end();
  115. #endif
  116. #ifdef _DEBUG
  117. TestCase_Soc();
  118. TestCase_Brand();
  119. TestCase_User();
  120. #else
  121. CDatabase::GetInstance()->Init(Global::g_szDBAddress, Global::g_szDBAccount, Global::g_szDBPassword, Global::g_szDBName);
  122. #endif
  123. // 初始化 OLE 库
  124. if (!AfxOleInit())
  125. {
  126. AfxMessageBox(IDP_OLE_INIT_FAILED);
  127. return FALSE;
  128. }
  129. AfxEnableControlContainer();
  130. EnableTaskbarInteraction();
  131. // 使用 RichEdit 控件需要 AfxInitRichEdit2()
  132. // AfxInitRichEdit2();
  133. // 标准初始化
  134. // 如果未使用这些功能并希望减小
  135. // 最终可执行文件的大小,则应移除下列
  136. // 不需要的特定初始化例程
  137. // 更改用于存储设置的注册表项
  138. // TODO: 应适当修改该字符串,
  139. // 例如修改为公司或组织名
  140. SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
  141. LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU)
  142. InitContextMenuManager();
  143. InitShellManager();
  144. InitKeyboardManager();
  145. InitTooltipManager();
  146. CMFCToolTipInfo ttParams;
  147. ttParams.m_bVislManagerTheme = TRUE;
  148. theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL,
  149. RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams);
  150. // 注册应用程序的文档模板。 文档模板
  151. // 将用作文档、框架窗口和视图之间的连接
  152. CMultiDocTemplate* pDocTemplate;
  153. pDocTemplate = new CMultiDocTemplate(IDR_CTSManagerTYPE,
  154. RUNTIME_CLASS(CCTSManagerDoc),
  155. RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
  156. RUNTIME_CLASS(CCTSManagerView));
  157. if (!pDocTemplate)
  158. return FALSE;
  159. AddDocTemplate(pDocTemplate);
  160. // 创建主 MDI 框架窗口
  161. CMainFrame* pMainFrame = new CMainFrame;
  162. pMainFrame->m_pDoc = (CCTSManagerDoc*)pDocTemplate->CreateNewDocument();
  163. if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
  164. {
  165. delete pMainFrame;
  166. return FALSE;
  167. }
  168. m_pMainWnd = pMainFrame;
  169. // 分析标准 shell 命令、DDE、打开文件操作的命令行
  170. CCommandLineInfo cmdInfo;
  171. cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
  172. ParseCommandLine(cmdInfo);
  173. // 调度在命令行中指定的命令。 如果
  174. // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。
  175. if (!ProcessShellCommand(cmdInfo))
  176. return FALSE;
  177. // 主窗口已初始化,因此显示它并对其进行更新
  178. pMainFrame->ShowWindow(m_nCmdShow);
  179. pMainFrame->UpdateWindow();
  180. return TRUE;
  181. }
  182. int CCTSManagerApp::ExitInstance()
  183. {
  184. //TODO: 处理可能已添加的附加资源
  185. AfxOleTerm(FALSE);
  186. CDatabase* pdb = CDatabase::GetInstance();
  187. if (pdb)
  188. delete pdb;
  189. pdb = NULL;
  190. //Gdiplus::GdiplusShutdown(m_gdiplusToken);
  191. return CWinAppEx::ExitInstance();
  192. }
  193. // CCTSManagerApp 消息处理程序
  194. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  195. class CAboutDlg : public CDialogEx
  196. {
  197. public:
  198. CAboutDlg() noexcept;
  199. // 对话框数据
  200. #ifdef AFX_DESIGN_TIME
  201. enum { IDD = IDD_ABOUTBOX };
  202. #endif
  203. protected:
  204. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  205. // 实现
  206. protected:
  207. DECLARE_MESSAGE_MAP()
  208. };
  209. CAboutDlg::CAboutDlg() noexcept : CDialogEx(IDD_ABOUTBOX)
  210. {
  211. }
  212. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  213. {
  214. CDialogEx::DoDataExchange(pDX);
  215. }
  216. BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
  217. END_MESSAGE_MAP()
  218. // 用于运行对话框的应用程序命令
  219. void CCTSManagerApp::OnAppAbout()
  220. {
  221. CAboutDlg aboutDlg;
  222. aboutDlg.DoModal();
  223. }
  224. // CCTSManagerApp 自定义加载/保存方法
  225. void CCTSManagerApp::PreLoadState()
  226. {
  227. BOOL bNameValid;
  228. CString strName;
  229. bNameValid = strName.LoadString(IDS_EDIT_MENU);
  230. ASSERT(bNameValid);
  231. GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT);
  232. bNameValid = strName.LoadString(IDS_EXPLORER);
  233. ASSERT(bNameValid);
  234. GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EXPLORER);
  235. }
  236. void CCTSManagerApp::LoadCustomState()
  237. {
  238. }
  239. void CCTSManagerApp::SaveCustomState()
  240. {
  241. }
  242. // CCTSManagerApp 消息处理程序