修改三方通话功能,在发起三方通话时,先保持住主叫,然后再拉回主叫到会议

DisplayWnd.cpp 7.2KB

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