// DialogCfgIpo.cpp : 实现文件 // #include "stdafx.h" #include "FirstStep.h" #include "DialogCfgIpo.h" #include "Config.h" // CDialogCfgIpo 对话框 IMPLEMENT_DYNAMIC(CDialogCfgIpo, CDialogEx) CDialogCfgIpo::CDialogCfgIpo(CWnd* pParent /*=NULL*/) : CCfgDialog(2, CDialogCfgIpo::IDD, pParent) { } CDialogCfgIpo::~CDialogCfgIpo() { } /***************************************************************** **【函数名称】 __initUIControl **【函数功能】 初始化控件 **【参数】 **【返回值】 ****************************************************************/ void CDialogCfgIpo::__initUIControl( void ) { m_ComboIpoExtType.InsertString(0, CONST_IPO_LINE_TYPE_EXT); m_ComboIpoExtType.InsertString(1, CONST_IPO_LINE_TYPE_IVR); m_ComboIpoExtType.InsertString(2, CONST_IPO_LINE_TYPE_FAX); m_ComboIpoExtType.SetCurSel(0); m_ComboIpoTrunkType.InsertString(0, CONST_IPO_LINE_TYPE_DT); m_ComboIpoTrunkType.InsertString(1, CONST_IPO_LINE_TYPE_H323); m_ComboIpoTrunkType.InsertString(2, CONST_IPO_LINE_TYPE_SIP); m_ComboIpoTrunkType.SetCurSel(0); CRect Rect; m_ListIpoExt.GetClientRect(&Rect); int length = Rect.right - Rect.left; m_ListIpoExt.InsertColumn(0, _T("线路号"), LVCFMT_LEFT, length / 3); m_ListIpoExt.InsertColumn(1, _T("线路类型"), LVCFMT_LEFT, length / 3); m_ListIpoExt.InsertColumn(2, _T("关联VS线路"), LVCFMT_LEFT, length / 3); m_ListIpoTrunk.GetClientRect(&Rect); length = Rect.right - Rect.left; m_ListIpoTrunk.InsertColumn(0, _T("线路号"), LVCFMT_LEFT, length / 3); m_ListIpoTrunk.InsertColumn(1, _T("线路类型"), LVCFMT_LEFT, length / 3); m_ListIpoTrunk.InsertColumn(2, _T("关联VS线路"), LVCFMT_LEFT, length / 3); } /***************************************************************** **【函数名称】 __loadIpoLineCfg **【函数功能】 加载IPO线路配置 **【参数】 **【返回值】 ****************************************************************/ void CDialogCfgIpo::__loadIpoLineCfg( void ) { // IPO分机线路 CIpoLineList& IpoLineList = CConfig::GetInstance().ipoLineList(); POSITION Pos = IpoLineList.GetHeadPosition(); while(Pos) { IpoLine* pLine = IpoLineList.GetNext(Pos); ASSERT(pLine != NULL); if(pLine->LineType == CONST_IPO_LINE_TYPE_EXT || pLine->LineType == CONST_IPO_LINE_TYPE_IVR || pLine->LineType == CONST_IPO_LINE_TYPE_FAX) { int Index = m_ListIpoExt.GetItemCount(); m_ListIpoExt.InsertItem(Index, pLine->LineNO); m_ListIpoExt.SetItemText(Index, 1, pLine->LineType); m_ListIpoExt.SetItemText(Index, 2, pLine->AssoVsLineNO); } else { int Index = m_ListIpoTrunk.GetItemCount(); m_ListIpoTrunk.InsertItem(Index, pLine->LineNO); m_ListIpoTrunk.SetItemText(Index, 1, pLine->LineType); m_ListIpoTrunk.SetItemText(Index, 2, pLine->AssoVsLineNO); } } } /***************************************************************** **【函数名称】 __uploadIpoLineCfg **【函数功能】 上传IPO线路配置 **【参数】 **【返回值】 ****************************************************************/ void CDialogCfgIpo::__uploadIpoLineCfg( void ) { // IPO分机线路 CIpoLineList& IpoLineList = CConfig::GetInstance().ipoLineList(); IpoLineList.Free(); int Count = m_ListIpoExt.GetItemCount(); for(int i = 0; i < Count; ++i) { IpoLine* pExten = new IpoLine; ASSERT(pExten != NULL); pExten->LineNO = m_ListIpoExt.GetItemText(i, 0); pExten->LineType = m_ListIpoExt.GetItemText(i, 1); pExten->AssoVsLineNO = m_ListIpoExt.GetItemText(i, 2); IpoLineList.AddTail(pExten); } // IPO中继线路 Count = m_ListIpoTrunk.GetItemCount(); for(int i = 0; i < Count; ++i) { IpoLine* pTrunk = new IpoLine; ASSERT(pTrunk != NULL); pTrunk->LineNO = m_ListIpoTrunk.GetItemText(i, 0); pTrunk->LineType = m_ListIpoTrunk.GetItemText(i, 1); pTrunk->AssoVsLineNO = m_ListIpoTrunk.GetItemText(i, 2); IpoLineList.AddTail(pTrunk); } } void CDialogCfgIpo::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_IPO_EXT_TYPE, m_ComboIpoExtType); DDX_Control(pDX, IDC_LIST_IPO_EXT, m_ListIpoExt); DDX_Control(pDX, IDC_LIST_IPO_TRUNK, m_ListIpoTrunk); DDX_Control(pDX, IDC_IPADDR_IPO, m_AddrIpo); DDX_Control(pDX, IDC_EDT_IPO_PWD, m_EdtIpoPwd); DDX_Control(pDX, IDC_EDT_IPOLINK_PORT, m_EdtIpoLinkPort); DDX_Control(pDX, IDC_COMBO_IPO_TRUNK_TYPE, m_ComboIpoTrunkType); } /***************************************************************** **【函数名称】 upload **【函数功能】 上传配置项 **【参数】 **【返回值】 ****************************************************************/ void CDialogCfgIpo::upload( void ) { CString CfgInfo; CConfig& config = CConfig::GetInstance(); m_AddrIpo.GetWindowText(CfgInfo); config.ipoAddr() = CfgInfo; m_EdtIpoPwd.GetWindowText(CfgInfo); config.ipoPwd() = CfgInfo; m_EdtIpoLinkPort.GetWindowText(CfgInfo); config.ipoLinkPort() = CfgInfo; __uploadIpoLineCfg(); } BEGIN_MESSAGE_MAP(CDialogCfgIpo, CCfgDialog) ON_WM_SHOWWINDOW() ON_BN_CLICKED(IDC_BTN_IPO_EXT_ADD, &CDialogCfgIpo::OnBnClickedBtnIpoExtAdd) ON_BN_CLICKED(IDC_BTN_IPO_EXT_DEL, &CDialogCfgIpo::OnBnClickedBtnIpoExtDel) ON_BN_CLICKED(IDC_BTN_IPO_TRUNK_ADD, &CDialogCfgIpo::OnBnClickedBtnIpoTrunkAdd) ON_BN_CLICKED(IDC_BTN_IPO_TRUNK_DEL, &CDialogCfgIpo::OnBnClickedBtnIpoTrunkDel) END_MESSAGE_MAP() // CDialogCfgIpo 消息处理程序 BOOL CDialogCfgIpo::OnInitDialog() { CCfgDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 __initUIControl(); CConfig& config = CConfig::GetInstance(); m_AddrIpo.SetWindowText(config.ipoAddr()); m_EdtIpoPwd.SetWindowText(config.ipoPwd()); m_EdtIpoLinkPort.SetWindowText(config.ipoLinkPort()); __loadIpoLineCfg(); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } BOOL CDialogCfgIpo::PreTranslateMessage( MSG* pMsg ) { // TODO: 在此添加专用代码和/或调用基类 if((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN)) return TRUE; return CCfgDialog::PreTranslateMessage(pMsg); } void CDialogCfgIpo::OnShowWindow( BOOL bShow, UINT nStatus ) { CCfgDialog::OnShowWindow(bShow, nStatus); // TODO: 在此处添加消息处理程序代码 if(bShow) m_AddrIpo.SetFocus(); } void CDialogCfgIpo::OnBnClickedBtnIpoExtAdd() { // TODO: 在此添加控件通知处理程序代码 UINT ExtStartId = GetDlgItemInt(IDC_EDT_IPO_EXT_START_NUM); if(ExtStartId == 0) { MessageBox(_T("请输入起始分机线路号!")); GetDlgItem(IDC_EDT_IPO_EXT_START_NUM)->SetFocus(); return; } UINT Count = GetDlgItemInt(IDC_EDT_IPO_EXT_COUNT); if(Count < 1 || Count > 99) { MessageBox(_T("分机线路数需在1至99之间!")); GetDlgItem(IDC_EDT_IPO_EXT_COUNT)->SetFocus(); return; } CString strAssoVsLineNoStart; GetDlgItemText(IDC_EDT_IPO_EXT_ASSO_LINE, strAssoVsLineNoStart); UINT nAssoVsLineNoStart = 0; sscanf_s(strAssoVsLineNoStart, _T("%u"), &nAssoVsLineNoStart); CString LineType; m_ComboIpoExtType.GetWindowText(LineType); CString LineNo; CString AssoVsLineNo; for(UINT i = 0; i < Count; ++i) { LineNo.Format(_T("%u"), ExtStartId + i); if(!strAssoVsLineNoStart.IsEmpty()) AssoVsLineNo.Format(_T("%u"), nAssoVsLineNoStart + i); int Index = m_ListIpoExt.GetIndexByContent(0, LineNo); if(Index == -1) { Index = m_ListIpoExt.GetItemCount(); m_ListIpoExt.InsertItem(Index, LineNo); m_ListIpoExt.SetItemText(Index, 1, LineType); m_ListIpoExt.SetItemText(Index, 2, AssoVsLineNo); } else { m_ListIpoExt.SetItemText(Index, 1, LineType); m_ListIpoExt.SetItemText(Index, 2, AssoVsLineNo); } } } void CDialogCfgIpo::OnBnClickedBtnIpoExtDel() { // TODO: 在此添加控件通知处理程序代码 m_ListIpoExt.RemoveSelection(); } void CDialogCfgIpo::OnBnClickedBtnIpoTrunkAdd() { // TODO: 在此添加控件通知处理程序代码 CString TrunkStartId; GetDlgItemText(IDC_EDT_IPO_TRUNK_START_NUM, TrunkStartId); if(TrunkStartId.IsEmpty()) { MessageBox(_T("请输入起始中继线路号!")); GetDlgItem(IDC_EDT_IPO_EXT_START_NUM)->SetFocus(); return; } CString LineType; m_ComboIpoTrunkType.GetWindowText(LineType); UINT Count = GetDlgItemInt(IDC_EDT_IPO_TRUNK_COUNT); if(LineType == CONST_IPO_LINE_TYPE_DT) { if(Count < 1 || Count > 30) { MessageBox(_T("数字中继线路数需在1至30之间!")); GetDlgItem(IDC_EDT_IPO_TRUNK_COUNT)->SetFocus(); return; } } int TrunkBegin = 0; int PcmBegin = 0; sscanf_s(TrunkStartId, "%d.%d", &TrunkBegin, &PcmBegin); CString strAssoVsLineNoStart; GetDlgItemText(IDC_EDT_IPO_TRUNK_ASSO_LINE, strAssoVsLineNoStart); UINT nAssoVsLineNoStart = 0; sscanf_s(strAssoVsLineNoStart, _T("%u"), &nAssoVsLineNoStart); CString LineNo; CString AssoVsLineNo; for(UINT i = 0; i < Count; ++i) { if(PcmBegin == 0) // 模拟中继 { LineNo.Format(_T("%d"), TrunkBegin + i); } else // 数字、VOIP中继 { LineNo.Format(_T("%d.%d"), TrunkBegin, PcmBegin + i); } // end if if(!strAssoVsLineNoStart.IsEmpty()) AssoVsLineNo.Format(_T("%u"), nAssoVsLineNoStart + i); int Index = m_ListIpoTrunk.GetIndexByContent(0, LineNo); if(Index == -1) { Index = m_ListIpoTrunk.GetItemCount(); m_ListIpoTrunk.InsertItem(Index, LineNo); m_ListIpoTrunk.SetItemText(Index, 1, LineType); m_ListIpoTrunk.SetItemText(Index, 2, AssoVsLineNo); } else { m_ListIpoTrunk.SetItemText(Index, 1, LineType); m_ListIpoTrunk.SetItemText(Index, 2, AssoVsLineNo); } } } void CDialogCfgIpo::OnBnClickedBtnIpoTrunkDel() { // TODO: 在此添加控件通知处理程序代码 m_ListIpoTrunk.RemoveSelection(); }