⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipgatewaydlg.cpp

📁 三汇CTI示例程序源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// IPGatewayDlg.cpp : implementation file
//

#include "stdafx.h"
#include "IPGateway.h"
#include "IPGatewayDlg.h"
#include "shpa3api.h"

#include "Big5EditionLab.h"
#include "EnglishEditionLab.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

DWORD g_dwLanguageConversion = 0;
DWORD g_dwCHINESE_SIMPLIFIED = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED);
DWORD g_dwCHINESE_TRADITIONAL = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_TRADITIONAL);
DWORD g_dwCHINESE_HONGKONG = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_HONGKONG);

void SetEngWinLab(CDialog* pDlg,int itemnum,CString strin)
{
	CWnd *pWnd=NULL;
	
	pWnd=pDlg->GetDlgItem(itemnum);
	pWnd->SetWindowText(strin);
}

/////////////////////////////////////////////////////////////////////////////
// CIPGatewayDlg dialog
CIPGatewayDlg::CIPGatewayDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CIPGatewayDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CIPGatewayDlg)
	m_strErrMsg = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CIPGatewayDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CIPGatewayDlg)
	DDX_Control(pDX, IDC_LIST_ANALOGCH, m_AnalogChList);
	DDX_Control(pDX, IDC_LIST_SS1CH, m_SS1ChList);
	DDX_Control(pDX, IDC_LIST_IPCH, m_IpChList);
	DDX_Control(pDX, IDC_LIST_LOG, m_LogList);
	DDX_Text(pDX, IDC_ERRMSG, m_strErrMsg);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CIPGatewayDlg, CDialog)
	//{{AFX_MSG_MAP(CIPGatewayDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_TIMER()
	ON_WM_DESTROY()
	ON_BN_CLICKED(ID_DISCONNECT, OnDisconnect)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CIPGatewayDlg message handlers

BOOL CIPGatewayDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	g_dwLanguageConversion = GetThreadLocale();

	if(g_dwLanguageConversion != g_dwCHINESE_SIMPLIFIED)
	{
		if(g_dwLanguageConversion == g_dwCHINESE_TRADITIONAL
			||g_dwLanguageConversion == g_dwCHINESE_HONGKONG)
		{
			SetThreadLocale(MAKELANGID(LANG_CHINESE,SUBLANG_DEFAULT));
		}
		else
		{
			SetThreadLocale(MAKELANGID(LANG_ENGLISH,SUBLANG_DEFAULT));
		}
		
		InitLab();
	}

	if(!InitCtiSystem())			// initialize board
	{
		PostQuitMessage(0);
	}
	
	ProtocalType();					// H323 or SIP?
	
	ReadIPAddress();			    // read IP address book

	InitAllChannel();				// initialize all channels
	
	InitAnalogChListCtrl();			// update list control
	InitSS1ChListCtrl();
	InitIpChListCtrl();
	InitLogListCtrl();
	
	SetTimer(1000, 50, NULL);		// 50ms
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CIPGatewayDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CIPGatewayDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

///////////////////////////////////////////////////////////////////////////////////////////////
//	Initialize board
BOOL CIPGatewayDlg::InitCtiSystem()
{
	if(SsmStartCti(_T("ShConfig.ini"), _T("ShIndex.ini")) || (SsmGetMaxCfgBoard() != SsmGetMaxUsableBoard()))
	{
		char szErrMsg[124];
		SsmGetLastErrMsg(szErrMsg);				
		AfxMessageBox(szErrMsg, MB_OK) ;
		return FALSE;
    }	

	return TRUE;
}
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// 
void CIPGatewayDlg::InitAllChannel()
{
	CString cString;
	int	m = 0;
	int	n = 0;
	int s = 0;

	m_nTotalCh = SsmGetMaxCh();
	for(int i = 0; i < m_nTotalCh; i++)
	{
		int iType = SsmGetChType(i);
		if( iType >= 0 ) 
		{
			// Analog channel
			if(0 == iType) 
			{
				m_AnalogCh[m].nChId = i;
				m_AnalogCh[m].Step = E_STATE_ANALOG_UNAVAILABLE;
				m_AnalogCh[m].nIpCh = -1;
				m_AnalogCh[m].iDirection = -1;
				memset(m_AnalogCh[m].szCallerTelNumber, 0, 64);
				memset(m_AnalogCh[m].szCalleeTelNumber, 0, 64);
				m_AnalogCh[m].ulTimeOutCounter = 0;
				m++;
			}
			// SS1 channel
			else if(4 == iType)
			{
				int nDirection;
				int iRet;
				if(iRet = SsmGetAutoCallDirection(i, &nDirection))
				{
					m_SS1Ch[n].nChId = i;
					m_SS1Ch[n].Step = E_STATE_SS1_UNAVAILABLE;
					m_SS1Ch[n].nIpCh = -1;
					m_SS1Ch[m].iDirection = -1;
					m_SS1Ch[n].ulTimeOutCounter = 0;
					m_SS1Ch[n].nCallCapability = nDirection;
					memset(m_SS1Ch[n].szCallerTelNumber, 0, 64);
					memset(m_SS1Ch[n].szCalleeTelNumber, 0, 64);
					n++;
				}
			}
			// IP channel
			else if(m_nIPProtocol == iType) 
			{
				m_IpCh[s].nChId = i;
				m_IpCh[s].Step = E_STATE_IP_UNAVAILABLE;
				m_IpCh[s].nLinkCh = -1;
				m_IpCh[s].iDirection = -1;
				memset(m_IpCh[s].szCallerTelNumber, 0, 64);
				memset(m_IpCh[s].szCalleeTelNumber, 0, 64);
				m_IpCh[s].ulTimeOutCounter = 0;
				m_IpCh[s].ulCodecType = -1;
				s++;
			}	
		}//?end if( iType >= 0 )
		else
		{
			char szErrMsg[124];
			SsmGetLastErrMsg(szErrMsg);
			AfxMessageBox(szErrMsg, MB_OK);
		}
	}
	
	m_nTotalAnalogCh = m;
	m_nTotalSS1Ch = n;
	m_nTotalIpCh = s;
}

///////////////////////////////////////////////////////////////////////////////////////////////
// initialize Analog channel list control
void CIPGatewayDlg::InitAnalogChListCtrl()
{
	CString cString;

	m_AnalogChList.SetExtendedStyle(LVS_EX_FULLROWSELECT);  
	
	COLORREF cr = 0x000000;
	m_AnalogChList.SetBkColor(cr);
	m_AnalogChList.SetTextBkColor(cr);
	
	COLORREF cr1 = 0x00ff00;
	m_AnalogChList.SetTextColor(cr1);
	
	int ColumnWidth[7] = {60, 70, 200, 70, 80, 200, 200};
	LV_COLUMN lvc;
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	
	lvc.iSubItem = 0;
	cString.LoadString(IDS_GATEWAY2);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[0];
	m_AnalogChList.InsertColumn(0, &lvc);
	
	lvc.iSubItem = 1;
	cString.LoadString(IDS_GATEWAY3);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[1];
	m_AnalogChList.InsertColumn(1, &lvc);
	
	lvc.iSubItem = 2;
	cString.LoadString(IDS_GATEWAY4);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[2];
	m_AnalogChList.InsertColumn(2, &lvc);
	
	lvc.iSubItem = 3;
	cString.LoadString(IDS_GATEWAY5);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[3];
	m_AnalogChList.InsertColumn(3, &lvc);
	
	lvc.iSubItem = 4;
	cString.LoadString(IDS_GATEWAY6);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[4];
	m_AnalogChList.InsertColumn(4, &lvc);

	lvc.iSubItem = 5;
	cString.LoadString(IDS_GATEWAY7);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[5];
	m_AnalogChList.InsertColumn(5, &lvc);

	lvc.iSubItem = 6;
	cString.LoadString(IDS_GATEWAY8);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[6];
	m_AnalogChList.InsertColumn(6, &lvc);

	char szChId[3];
	for(int i=0; i<m_nTotalAnalogCh; i++)
	{
		m_AnalogChList.InsertItem(i, _itoa(m_AnalogCh[i].nChId, szChId, 10));

		cString.LoadString(IDS_GATEWAY9);
		m_AnalogChList.SetItemText(i, 1, cString);
	}		
}
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// initialize SS1 channel list control
void CIPGatewayDlg::InitSS1ChListCtrl()
{
	CString cString;
	
	m_SS1ChList.SetExtendedStyle(LVS_EX_FULLROWSELECT);  
	
	COLORREF cr = 0x000000;
	m_SS1ChList.SetBkColor(cr);
	m_SS1ChList.SetTextBkColor(cr);
	
	COLORREF cr1 = 0x00ff00;
	m_SS1ChList.SetTextColor(cr1);
	
	int ColumnWidth[8] = {60, 70, 200, 70, 80, 200, 200, 100};
	LV_COLUMN lvc;
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	
	lvc.iSubItem = 0;
	cString.LoadString(IDS_GATEWAY2);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[0];
	m_SS1ChList.InsertColumn(0, &lvc);
	
	lvc.iSubItem = 1;
	cString.LoadString(IDS_GATEWAY3);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[1];
	m_SS1ChList.InsertColumn(1, &lvc);
	
	lvc.iSubItem = 2;
	cString.LoadString(IDS_GATEWAY4);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[2];
	m_SS1ChList.InsertColumn(2, &lvc);
	
	lvc.iSubItem = 3;
	cString.LoadString(IDS_GATEWAY5);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[3];
	m_SS1ChList.InsertColumn(3, &lvc);
	
	lvc.iSubItem = 4;
	cString.LoadString(IDS_GATEWAY6);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[4];
	m_SS1ChList.InsertColumn(4, &lvc);
	
	lvc.iSubItem = 5;
	cString.LoadString(IDS_GATEWAY7);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[5];
	m_SS1ChList.InsertColumn(5, &lvc);
	
	lvc.iSubItem = 6;
	cString.LoadString(IDS_GATEWAY8);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[6];
	m_SS1ChList.InsertColumn(6, &lvc);

	lvc.iSubItem = 7;
	cString.LoadString(IDS_GATEWAY63);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[7];
	m_SS1ChList.InsertColumn(7, &lvc);
	
	char szChId[3];
	for(int i=0; i<m_nTotalSS1Ch; i++)
	{
		m_SS1ChList.InsertItem(i, _itoa(m_SS1Ch[i].nChId, szChId, 10));
		
		cString.LoadString(IDS_GATEWAY70);
		m_SS1ChList.SetItemText(i, 1, cString);

		if(0 == m_SS1Ch[i].nCallCapability)
			cString.LoadString(IDS_GATEWAY64);
		if(1 == m_SS1Ch[i].nCallCapability)
			cString.LoadString(IDS_GATEWAY65);
		if(2 == m_SS1Ch[i].nCallCapability)
			cString.LoadString(IDS_GATEWAY66);
		if(3 == m_SS1Ch[i].nCallCapability)
			cString.LoadString(IDS_GATEWAY67);
		m_SS1ChList.SetItemText(i, 7, cString);
	}		
}
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// initialize IP channel's list control
void CIPGatewayDlg::InitIpChListCtrl()
{
	CString cString;
	m_IpChList.SetExtendedStyle(LVS_EX_FULLROWSELECT);  
	
	COLORREF cr = 0x000000;
	m_IpChList.SetBkColor(cr);
	m_IpChList.SetTextBkColor(cr);
	
	COLORREF cr1 = 0x00ff00;
	m_IpChList.SetTextColor(cr1);
	
	int ColumnWidth[9] = {60, 70, 200, 70, 80, 200, 200, 70, 70};
	LV_COLUMN lvc;
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	
	lvc.iSubItem = 0;
	cString.LoadString(IDS_GATEWAY10);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[0];
	m_IpChList.InsertColumn(0, &lvc);
	
	lvc.iSubItem = 1;
	cString.LoadString(IDS_GATEWAY11);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[1];
	m_IpChList.InsertColumn(1, &lvc);
	
	lvc.iSubItem = 2;
	cString.LoadString(IDS_GATEWAY12);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[2];
	m_IpChList.InsertColumn(2, &lvc);
	
	lvc.iSubItem = 3;
	cString.LoadString(IDS_GATEWAY13);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[3];
	m_IpChList.InsertColumn(3, &lvc);
	
	lvc.iSubItem = 4;
	cString.LoadString(IDS_GATEWAY14);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[4];
	m_IpChList.InsertColumn(4, &lvc);
	
	lvc.iSubItem = 5;
	cString.LoadString(IDS_GATEWAY15);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[5];
	m_IpChList.InsertColumn(5, &lvc);
	
	lvc.iSubItem = 6;
	cString.LoadString(IDS_GATEWAY16);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[6];
	m_IpChList.InsertColumn(6, &lvc);

	lvc.iSubItem = 7;
	cString.LoadString(IDS_GATEWAY17);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[7];
	m_IpChList.InsertColumn(7, &lvc);

	lvc.iSubItem = 8;
	cString.LoadString(IDS_GATEWAY18);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;;
	lvc.cx = ColumnWidth[8];
	m_IpChList.InsertColumn(8, &lvc);
	
	char szChId[3];
	for(int i = 0; i < m_nTotalIpCh; i++)
	{
		m_IpChList.InsertItem(i, _itoa(m_IpCh[i].nChId, szChId, 10));

		cString.LoadString(IDS_GATEWAY19);
		m_IpChList.SetItemText(i, 1, cString);
		
		switch(m_nIPProtocol)
		{
		case PROTOCOL_H323:
			{
				m_IpChList.SetItemText(i, 8, _T("H323"));
				break;
			}
		case PROTOCOL_SIP:
			{
				m_IpChList.SetItemText(i, 8, _T("SIP"));
				break;
			}
		default:
			{
				cString.LoadString(IDS_GATEWAY20);
				m_IpChList.SetItemText(i, 8, cString);
				break;
			}
		}
	}	
}
///////////////////////////////////////////////////////////////////////////////////////////////

void CIPGatewayDlg::InitLogListCtrl()
{
	CString cString;
	m_LogList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);  
	
	COLORREF cr = 0x000000;
	m_LogList.SetBkColor(cr);
	m_LogList.SetTextBkColor(cr);
	
	COLORREF cr1 = 0x00ff00;
	m_LogList.SetTextColor(cr1);
	
	int ColumnWidth[4] = {36, 85, 70, 750};
	LV_COLUMN lvc;
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	
	lvc.iSubItem = 0;
	cString.LoadString(IDS_GATEWAY21);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[0];
	m_LogList.InsertColumn(0, &lvc);
	
	lvc.iSubItem = 1;
	cString.LoadString(IDS_GATEWAY22);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[1];
	m_LogList.InsertColumn(1, &lvc);
	
	lvc.iSubItem = 2;
	cString.LoadString(IDS_GATEWAY23);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[2];
	m_LogList.InsertColumn(2, &lvc);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -