// DisplayWnd.cpp : 实现文件 // #include "stdafx.h" #include "CTI.h" #include "DisplayWnd.h" #include "DockPane.h" #include "ViewMgr.h" #include "CtiCore.h" extern volatile unsigned long ThreadCounter; #pragma region AboutDlg class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 virtual BOOL OnInitDialog(); // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BOOL CAboutDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // TODO: 在此添加额外的初始化 CStatic* pLogoCtrl = (CStatic*)GetDlgItem(IDC_STATIC_LOGO); #ifdef _VERSION_EHANG HBITMAP bm = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BMP_LOGO_EHANG)); if (bm != NULL) pLogoCtrl->SetBitmap(bm); SetDlgItemText(IDC_STATIC_ABOUT_VERSION, _T("毅航Ehangcom_CTI子系统V4.0")); SetDlgItemText(IDC_STATIC_ABOUT_RIGHT, _T("Copyright (C) 2015 广州市毅航互联通信股份有限公司")); #else pLogoCtrl->ModifyStyle(SS_BITMAP, SS_ICON); HICON Icon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MAINFRAME)); if (Icon != NULL) pLogoCtrl->SetIcon(Icon); SetDlgItemText(IDC_STATIC_ABOUT_VERSION, _T("河南华谊中间件_CTI子系统V5.0")); SetDlgItemText(IDC_STATIC_ABOUT_RIGHT, _T("Copyright (C) 2015 河南华谊网络科技有限公司")); #endif return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() #pragma endregion // CDisplayWnd IMPLEMENT_DYNCREATE(CDisplayWnd, CFrameWndEx) CDisplayWnd::CDisplayWnd() { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } CDisplayWnd::~CDisplayWnd() { } /***************************************************************** **【函数名称】 __InsertMenuItem **【函数功能】 插入新的菜单项 **【参数】 **【返回值】 ****************************************************************/ BOOL CDisplayWnd::InsertMenuItem(UINT beforeItemId, UINT NewItemId, UINT NewItemName) { CMenu* pMenu = GetMenu(); ASSERT(pMenu != NULL); MENUITEMINFO MenuInfo; memset(&MenuInfo, 0, sizeof(MenuInfo)); MenuInfo.cbSize = sizeof(MenuInfo); MenuInfo.fMask = MIIM_ID | MIIM_STRING; MenuInfo.wID = NewItemId; CString Name; Name.LoadString(NewItemName); MenuInfo.dwTypeData = Name.GetBuffer(0); return pMenu->InsertMenuItem(beforeItemId, &MenuInfo); } /***************************************************************** **【函数名称】 Show **【函数功能】 显示窗口 **【参数】 **【返回值】 ****************************************************************/ void CDisplayWnd::Show(void) { LoadFrame(IDR_MAINFRAME); ShowWindow(SW_SHOWMAXIMIZED); UpdateWindow(); CViewMgr::GetInstance().setup(this); } /***************************************************************** **【函数名称】 OnNewPane **【函数功能】 新增Pane的处理函数 **【参数】 **【返回值】 ****************************************************************/ void CDisplayWnd::OnNewPane(CDockPane* pPane) { ASSERT(pPane != NULL); DockPane(pPane); } BEGIN_MESSAGE_MAP(CDisplayWnd, CFrameWndEx) ON_MESSAGE(WM_CORE_EVENT, OnCoreEvent) ON_WM_CREATE() ON_WM_CLOSE() ON_COMMAND(ID_MENU_ABOUT, &CDisplayWnd::OnMenuAbout) ON_COMMAND(ID_MENU_LOG, &CDisplayWnd::OnMenuLog) ON_COMMAND(ID_MENU_RES, &CDisplayWnd::OnMenuRes) ON_COMMAND(ID_MENU_EXIT, &CDisplayWnd::OnMenuExit) ON_COMMAND(ID_MENU_LOG_START, &CDisplayWnd::OnMenuLogStart) ON_COMMAND(ID_MENU_LOG_STOP, &CDisplayWnd::OnMenuLogStop) ON_COMMAND(ID_MENU_VIEW_EXT, &CDisplayWnd::OnMenuViewExten) ON_COMMAND(ID_MENU_VIEW_TRUNK, &CDisplayWnd::OnMenuViewTrunk) ON_COMMAND(ID_MENU_VIEW_VOIP, &CDisplayWnd::OnMenuViewVoip) ON_COMMAND(ID_MENU_VIEW_IVR, &CDisplayWnd::OnMenuViewIvr) ON_COMMAND(ID_MENU_VIEW_MEETING, &CDisplayWnd::OnMenuViewMeeting) ON_COMMAND(ID_MENU_VIEW_FAX, &CDisplayWnd::OnMenuViewFax) ON_UPDATE_COMMAND_UI(ID_MENU_LOG_START, &CDisplayWnd::OnUpdateMenuLogStart) ON_UPDATE_COMMAND_UI(ID_MENU_LOG_STOP, &CDisplayWnd::OnUpdateMenuLogStop) ON_WM_SYSCOMMAND() ON_WM_TIMER() END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // 状态行指示器 IDS_STR_PRODUCT, IDS_STR_RIGHT, }; // CDisplayWnd 消息处理程序 LRESULT CDisplayWnd::OnCoreEvent(WPARAM wParam, LPARAM lParam) { UINT Event = (UINT)wParam; switch (Event) { case CORE_EVENT_DEV_RES_TYPE: CViewMgr::GetInstance().procResType(lParam); break; case CORE_EVENT_DEV_CLOSE: { //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{UI}: 与设备连接中断,系统在10秒后退出,稍后将自行重启!")); //SetTimer(ms_QuitTimer, 10 * 1000, NULL); ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{UI}: 与设备连接中断,系统将尝试重新建立连接。")); if (ThreadCounter == 0) // ych FS退出启动重连 { AfxBeginThread(((CCTIApp*)AfxGetApp())->StageStartThread, AfxGetApp()); } } break; case CORE_EVENT_DEV_INITEND: { } break; } return 0; } int CDisplayWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWndEx::OnCreate(lpCreateStruct) == -1) return -1; // 设置主窗口标记 ::SetProp(m_hWnd, AfxGetApp()->m_pszAppName, (HANDLE)1); // 设置图标 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // 添加菜单 CMenu menu; menu.LoadMenu(IDR_MAINFRAME); SetMenu(&menu); menu.Detach(); if (!m_wndStatusBar.Create(this)) { TRACE0("未能创建状态栏\n"); return -1; // 未能创建 } m_wndStatusBar.SetIndicators(indicators, sizeof(indicators) / sizeof(UINT)); // 设置停靠属性 /*GetDockingManager()->DisableRestoreDockState(TRUE); EnableLoadDockState(FALSE);*/ EnableDocking(CBRS_ALIGN_ANY); CDockingManager::SetDockingMode(DT_SMART); EnableAutoHidePanes(CBRS_ALIGN_ANY); return 0; } void CDisplayWnd::OnClose() { CCtiCore::GetInstance().stop(); //手动关闭CTI后进程依然存在(偶尔出现) CCtiCore::GetInstance().KillProcess(NULL, _T("CTI_中间件系统")); CFrameWndEx::OnClose(); } void CDisplayWnd::OnMenuAbout() { CAboutDlg Dlg; Dlg.DoModal(); } void CDisplayWnd::OnMenuLog() { // TODO: 在此添加命令处理程序代码 CViewMgr::GetInstance().showLogView(); } void CDisplayWnd::OnMenuRes() { // TODO: 在此添加命令处理程序代码 CViewMgr::GetInstance().showResView(); } void CDisplayWnd::OnMenuExit() { // TODO: 在此添加命令处理程序代码 PostMessage(WM_SYSCOMMAND, SC_CLOSE); } void CDisplayWnd::OnMenuLogStart() { // TODO: 在此添加命令处理程序代码 ILogger::getInstance().start(); } void CDisplayWnd::OnMenuLogStop() { // TODO: 在此添加命令处理程序代码 ILogger::getInstance().stop(); } void CDisplayWnd::OnUpdateMenuLogStart(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 if (ILogger::getInstance().isStart()) pCmdUI->SetCheck(); else pCmdUI->SetCheck(0); } void CDisplayWnd::OnUpdateMenuLogStop(CCmdUI *pCmdUI) { // TODO: 在此添加命令更新用户界面处理程序代码 if (ILogger::getInstance().isStart()) pCmdUI->SetCheck(0); else pCmdUI->SetCheck(1); } void CDisplayWnd::OnMenuViewExten() { CViewMgr::GetInstance().showResView(DEV_RES_TYPE_EXT); } void CDisplayWnd::OnMenuViewTrunk() { CViewMgr::GetInstance().showResView(DEV_RES_TYPE_TRUNK); } void CDisplayWnd::OnMenuViewVoip() { CViewMgr::GetInstance().showResView(DEV_RES_TYPE_VOIP); } void CDisplayWnd::OnMenuViewIvr() { CViewMgr::GetInstance().showResView(DEV_RES_TYPE_IVR); } void CDisplayWnd::OnMenuViewMeeting() { CViewMgr::GetInstance().showResView(DEV_RES_TYPE_CONFERENCE); } void CDisplayWnd::OnMenuViewFax() { CViewMgr::GetInstance().showResView(DEV_RES_TYPE_FAX); } void CDisplayWnd::OnSysCommand(UINT nID, LPARAM lParam) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nID == SC_CLOSE) { if (MessageBox(_T("确定要退出CTI系统吗"), _T("提示"), MB_OKCANCEL) == IDCANCEL) return; } CFrameWndEx::OnSysCommand(nID, lParam); } void CDisplayWnd::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nIDEvent == ms_QuitTimer) { KillTimer(nIDEvent); PostMessage(WM_CLOSE); } CFrameWndEx::OnTimer(nIDEvent); }