MiddleWares_YiHe 郑州颐和医院随访系统中间件

DisplayWnd.cpp 8.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. // DisplayWnd.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "CTI.h"
  5. #include "DisplayWnd.h"
  6. #include "DockPane.h"
  7. #include "ViewMgr.h"
  8. #include "CtiCore.h"
  9. extern volatile unsigned long ThreadCounter;
  10. #pragma region AboutDlg
  11. class CAboutDlg : public CDialogEx
  12. {
  13. public:
  14. CAboutDlg();
  15. // 对话框数据
  16. enum { IDD = IDD_ABOUTBOX };
  17. protected:
  18. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  19. virtual BOOL OnInitDialog();
  20. // 实现
  21. protected:
  22. DECLARE_MESSAGE_MAP()
  23. };
  24. CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
  25. {
  26. }
  27. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  28. {
  29. CDialogEx::DoDataExchange(pDX);
  30. }
  31. BOOL CAboutDlg::OnInitDialog()
  32. {
  33. CDialogEx::OnInitDialog();
  34. // TODO: 在此添加额外的初始化
  35. CStatic* pLogoCtrl = (CStatic*)GetDlgItem(IDC_STATIC_LOGO);
  36. #ifdef _VERSION_EHANG
  37. HBITMAP bm = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BMP_LOGO_EHANG));
  38. if (bm != NULL)
  39. pLogoCtrl->SetBitmap(bm);
  40. SetDlgItemText(IDC_STATIC_ABOUT_VERSION, _T("毅航Ehangcom_CTI子系统V4.0"));
  41. SetDlgItemText(IDC_STATIC_ABOUT_RIGHT, _T("Copyright (C) 2015 广州市毅航互联通信股份有限公司"));
  42. #else
  43. pLogoCtrl->ModifyStyle(SS_BITMAP, SS_ICON);
  44. HICON Icon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MAINFRAME));
  45. if (Icon != NULL)
  46. pLogoCtrl->SetIcon(Icon);
  47. SetDlgItemText(IDC_STATIC_ABOUT_VERSION, _T("河南华谊中间件_CTI子系统V5.0"));
  48. SetDlgItemText(IDC_STATIC_ABOUT_RIGHT, _T("Copyright (C) 2015 河南华谊网络科技有限公司"));
  49. #endif
  50. return TRUE; // return TRUE unless you set the focus to a control
  51. // 异常: OCX 属性页应返回 FALSE
  52. }
  53. BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
  54. END_MESSAGE_MAP()
  55. #pragma endregion
  56. // CDisplayWnd
  57. IMPLEMENT_DYNCREATE(CDisplayWnd, CFrameWndEx)
  58. CDisplayWnd::CDisplayWnd()
  59. {
  60. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  61. }
  62. CDisplayWnd::~CDisplayWnd()
  63. {
  64. }
  65. /*****************************************************************
  66. **【函数名称】 __InsertMenuItem
  67. **【函数功能】 插入新的菜单项
  68. **【参数】
  69. **【返回值】
  70. ****************************************************************/
  71. BOOL CDisplayWnd::InsertMenuItem(UINT beforeItemId, UINT NewItemId, UINT NewItemName)
  72. {
  73. CMenu* pMenu = GetMenu();
  74. ASSERT(pMenu != NULL);
  75. MENUITEMINFO MenuInfo;
  76. memset(&MenuInfo, 0, sizeof(MenuInfo));
  77. MenuInfo.cbSize = sizeof(MenuInfo);
  78. MenuInfo.fMask = MIIM_ID | MIIM_STRING;
  79. MenuInfo.wID = NewItemId;
  80. CString Name;
  81. Name.LoadString(NewItemName);
  82. MenuInfo.dwTypeData = Name.GetBuffer(0);
  83. return pMenu->InsertMenuItem(beforeItemId, &MenuInfo);
  84. }
  85. /*****************************************************************
  86. **【函数名称】 Show
  87. **【函数功能】 显示窗口
  88. **【参数】
  89. **【返回值】
  90. ****************************************************************/
  91. void CDisplayWnd::Show(void)
  92. {
  93. LoadFrame(IDR_MAINFRAME);
  94. ShowWindow(SW_SHOWMAXIMIZED);
  95. UpdateWindow();
  96. CViewMgr::GetInstance().setup(this);
  97. }
  98. /*****************************************************************
  99. **【函数名称】 OnNewPane
  100. **【函数功能】 新增Pane的处理函数
  101. **【参数】
  102. **【返回值】
  103. ****************************************************************/
  104. void CDisplayWnd::OnNewPane(CDockPane* pPane)
  105. {
  106. ASSERT(pPane != NULL);
  107. DockPane(pPane);
  108. }
  109. BEGIN_MESSAGE_MAP(CDisplayWnd, CFrameWndEx)
  110. ON_MESSAGE(WM_CORE_EVENT, OnCoreEvent)
  111. ON_WM_CREATE()
  112. ON_WM_CLOSE()
  113. ON_COMMAND(ID_MENU_ABOUT, &CDisplayWnd::OnMenuAbout)
  114. ON_COMMAND(ID_MENU_LOG, &CDisplayWnd::OnMenuLog)
  115. ON_COMMAND(ID_MENU_RES, &CDisplayWnd::OnMenuRes)
  116. ON_COMMAND(ID_MENU_EXIT, &CDisplayWnd::OnMenuExit)
  117. ON_COMMAND(ID_MENU_LOG_START, &CDisplayWnd::OnMenuLogStart)
  118. ON_COMMAND(ID_MENU_LOG_STOP, &CDisplayWnd::OnMenuLogStop)
  119. ON_COMMAND(ID_MENU_VIEW_EXT, &CDisplayWnd::OnMenuViewExten)
  120. ON_COMMAND(ID_MENU_VIEW_TRUNK, &CDisplayWnd::OnMenuViewTrunk)
  121. ON_COMMAND(ID_MENU_VIEW_VOIP, &CDisplayWnd::OnMenuViewVoip)
  122. ON_COMMAND(ID_MENU_VIEW_IVR, &CDisplayWnd::OnMenuViewIvr)
  123. ON_COMMAND(ID_MENU_VIEW_MEETING, &CDisplayWnd::OnMenuViewMeeting)
  124. ON_COMMAND(ID_MENU_VIEW_FAX, &CDisplayWnd::OnMenuViewFax)
  125. ON_UPDATE_COMMAND_UI(ID_MENU_LOG_START, &CDisplayWnd::OnUpdateMenuLogStart)
  126. ON_UPDATE_COMMAND_UI(ID_MENU_LOG_STOP, &CDisplayWnd::OnUpdateMenuLogStop)
  127. ON_WM_SYSCOMMAND()
  128. ON_WM_TIMER()
  129. END_MESSAGE_MAP()
  130. static UINT indicators[] =
  131. {
  132. ID_SEPARATOR, // 状态行指示器
  133. IDS_STR_PRODUCT,
  134. IDS_STR_RIGHT,
  135. };
  136. // CDisplayWnd 消息处理程序
  137. LRESULT CDisplayWnd::OnCoreEvent(WPARAM wParam, LPARAM lParam)
  138. {
  139. UINT Event = (UINT)wParam;
  140. switch (Event)
  141. {
  142. case CORE_EVENT_DEV_RES_TYPE:
  143. CViewMgr::GetInstance().procResType(lParam);
  144. break;
  145. case CORE_EVENT_DEV_CLOSE:
  146. {
  147. //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{UI}: 与设备连接中断,系统在10秒后退出,稍后将自行重启!"));
  148. //SetTimer(ms_QuitTimer, 10 * 1000, NULL);
  149. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{UI}: 与设备连接中断,系统将尝试重新建立连接。"));
  150. if (ThreadCounter == 0) // ych FS退出启动重连
  151. {
  152. AfxBeginThread(((CCTIApp*)AfxGetApp())->StageStartThread, AfxGetApp());
  153. }
  154. }
  155. break;
  156. case CORE_EVENT_DEV_INITEND:
  157. {
  158. }
  159. break;
  160. }
  161. return 0;
  162. }
  163. int CDisplayWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
  164. {
  165. if (CFrameWndEx::OnCreate(lpCreateStruct) == -1)
  166. return -1;
  167. // 设置主窗口标记
  168. ::SetProp(m_hWnd, AfxGetApp()->m_pszAppName, (HANDLE)1);
  169. // 设置图标
  170. SetIcon(m_hIcon, TRUE); // 设置大图标
  171. SetIcon(m_hIcon, FALSE); // 设置小图标
  172. // 添加菜单
  173. CMenu menu;
  174. menu.LoadMenu(IDR_MAINFRAME);
  175. SetMenu(&menu);
  176. menu.Detach();
  177. if (!m_wndStatusBar.Create(this))
  178. {
  179. TRACE0("未能创建状态栏\n");
  180. return -1; // 未能创建
  181. }
  182. m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT));
  183. // 设置停靠属性
  184. /*GetDockingManager()->DisableRestoreDockState(TRUE);
  185. EnableLoadDockState(FALSE);*/
  186. EnableDocking(CBRS_ALIGN_ANY);
  187. CDockingManager::SetDockingMode(DT_SMART);
  188. EnableAutoHidePanes(CBRS_ALIGN_ANY);
  189. return 0;
  190. }
  191. void CDisplayWnd::OnClose()
  192. {
  193. CCtiCore::GetInstance().stop();
  194. //手动关闭CTI后进程依然存在(偶尔出现)
  195. CCtiCore::GetInstance().KillProcess(NULL, _T("CTI_中间件系统"));
  196. CFrameWndEx::OnClose();
  197. }
  198. void CDisplayWnd::OnMenuAbout()
  199. {
  200. CAboutDlg Dlg;
  201. Dlg.DoModal();
  202. }
  203. void CDisplayWnd::OnMenuLog()
  204. {
  205. // TODO: 在此添加命令处理程序代码
  206. CViewMgr::GetInstance().showLogView();
  207. }
  208. void CDisplayWnd::OnMenuRes()
  209. {
  210. // TODO: 在此添加命令处理程序代码
  211. CViewMgr::GetInstance().showResView();
  212. }
  213. void CDisplayWnd::OnMenuExit()
  214. {
  215. // TODO: 在此添加命令处理程序代码
  216. PostMessage(WM_SYSCOMMAND, SC_CLOSE);
  217. }
  218. void CDisplayWnd::OnMenuLogStart()
  219. {
  220. // TODO: 在此添加命令处理程序代码
  221. ILogger::getInstance().start();
  222. }
  223. void CDisplayWnd::OnMenuLogStop()
  224. {
  225. // TODO: 在此添加命令处理程序代码
  226. ILogger::getInstance().stop();
  227. }
  228. void CDisplayWnd::OnUpdateMenuLogStart(CCmdUI *pCmdUI)
  229. {
  230. // TODO: 在此添加命令更新用户界面处理程序代码
  231. if (ILogger::getInstance().isStart())
  232. pCmdUI->SetCheck();
  233. else
  234. pCmdUI->SetCheck(0);
  235. }
  236. void CDisplayWnd::OnUpdateMenuLogStop(CCmdUI *pCmdUI)
  237. {
  238. // TODO: 在此添加命令更新用户界面处理程序代码
  239. if (ILogger::getInstance().isStart())
  240. pCmdUI->SetCheck(0);
  241. else
  242. pCmdUI->SetCheck(1);
  243. }
  244. void CDisplayWnd::OnMenuViewExten()
  245. {
  246. CViewMgr::GetInstance().showResView(DEV_RES_TYPE_EXT);
  247. }
  248. void CDisplayWnd::OnMenuViewTrunk()
  249. {
  250. CViewMgr::GetInstance().showResView(DEV_RES_TYPE_TRUNK);
  251. }
  252. void CDisplayWnd::OnMenuViewVoip()
  253. {
  254. CViewMgr::GetInstance().showResView(DEV_RES_TYPE_VOIP);
  255. }
  256. void CDisplayWnd::OnMenuViewIvr()
  257. {
  258. CViewMgr::GetInstance().showResView(DEV_RES_TYPE_IVR);
  259. }
  260. void CDisplayWnd::OnMenuViewMeeting()
  261. {
  262. CViewMgr::GetInstance().showResView(DEV_RES_TYPE_CONFERENCE);
  263. }
  264. void CDisplayWnd::OnMenuViewFax()
  265. {
  266. CViewMgr::GetInstance().showResView(DEV_RES_TYPE_FAX);
  267. }
  268. void CDisplayWnd::OnSysCommand(UINT nID, LPARAM lParam)
  269. {
  270. // TODO: 在此添加消息处理程序代码和/或调用默认值
  271. if (nID == SC_CLOSE)
  272. {
  273. if (MessageBox(_T("确定要退出CTI系统吗"), _T("提示"), MB_OKCANCEL) == IDCANCEL)
  274. return;
  275. }
  276. CFrameWndEx::OnSysCommand(nID, lParam);
  277. }
  278. void CDisplayWnd::OnTimer(UINT_PTR nIDEvent)
  279. {
  280. // TODO: 在此添加消息处理程序代码和/或调用默认值
  281. if (nIDEvent == ms_QuitTimer)
  282. {
  283. KillTimer(nIDEvent);
  284. PostMessage(WM_CLOSE);
  285. }
  286. CFrameWndEx::OnTimer(nIDEvent);
  287. }