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

📄 pbxdlg.cpp

📁 三汇CTI示例程序源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:

#include "stdafx.h"
#include "PBX.h"
#include "PBXDlg.h"
#include "shpa3api.h"		// SHD_A3库头文件

#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);
}

/////////////////////////////////////////////////////////////////////////////
// CPBXDlg dialog

CPBXDlg::CPBXDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CPBXDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPBXDlg)
	m_nLogNum = 0;
	m_nIPProtocol = -1;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CPBXDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPBXDlg)
	DDX_Control(pDX, IDC_LIST_ANALOGCH, m_AnalogChList);
	DDX_Control(pDX, IDC_LIST_IPCH, m_IpChList);
	DDX_Control(pDX, IDC_LIST_STATIONCH, m_StationChList);
	DDX_Control(pDX, IDC_LIST_LOG, m_LogList);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CPBXDlg, CDialog)
	//{{AFX_MSG_MAP(CPBXDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// 函数说明:启动函数
/////////////////////////////////////////////////////////////////////////////
BOOL CPBXDlg::OnInitDialog()
{
	CString cString;
	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())			// 初始化板卡
	{
		PostQuitMessage(WM_QUIT);
		return FALSE;
	}
	
	ProtocalType();					// 确定IP通道的协议类型 H323 or SIP?

	ReadIPAddress();			    // 读取IP电话地址簿
	
	InitAllChannel();				// 初始化模拟,座席,IP通道
	
	InitAnalogChListCtrl();			// 初始化外线模拟通道列表控件
	InitStationChListCtrl();			// 初始化内线座席通道列表控件
	InitIpChListCtrl();				// 初始化外线IP通道列表控件				
	InitLogListCtrl();				// 初始化日志列表控件

	// 设置以事件消息编程模式	
	EVENT_SET_INFO EventSet;		
	EventSet.dwWorkMode = EVENT_MESSAGE;	
	EventSet.lpHandlerParam = this->GetSafeHwnd();	
	SsmSetEvent(-1, -1, TRUE, &EventSet);
	
	cString.LoadString(IDS_PBX1);
	LogToList(LOGTYPE_INFORMATION, -1, (LPTSTR)(LPCTSTR)cString);

	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 CPBXDlg::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 CPBXDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
//	函数说明:初始化板卡
///////////////////////////////////////////////////////////////////////////////////////////////
BOOL CPBXDlg::InitCtiSystem()
{
	if(SsmStartCti("ShConfig.ini", "ShIndex.ini") || (SsmGetMaxCfgBoard() != SsmGetMaxUsableBoard()))
	{
		char szErrMsg[MAX_MESSAGE_LEN];
		SsmGetLastErrMsg(szErrMsg);					// 取得初始化出错信息
		AfxMessageBox(szErrMsg, MB_OK) ;
		return FALSE;
    }	
	
	return TRUE;
}
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// 函数说明:获取所有通道信息
///////////////////////////////////////////////////////////////////////////////////////////////
void CPBXDlg::InitAllChannel()
{
	CString cString;
	// 取得配置文件(pbx.ini)路径
	char szPhoneNumConfig[MAX_PATH];
	GetCurrentDirectory(MAX_PATH, szPhoneNumConfig);
	strcat(szPhoneNumConfig, "\\pbx.ini");

	int	m = 0;
	int	n = 0;
	int	o = 0;
	
	m_nTotalCh = SsmGetMaxCh();
	for(int i = 0; i < m_nTotalCh; i++)
	{
		int nType = SsmGetChType(i);
		if( nType >= 0 ) 
		{
			// 外线模拟通道
			if(nType == 0) 
			{
				int nDirection;
				int iAutoCall;
				if(iAutoCall = SsmGetAutoCallDirection(i, &nDirection))
				{
					if(iAutoCall == -1)
					{
						AppErrorHandler(i);
					}
					if(iAutoCall == 1)
					{
						m_AnalogCh[m].nChId = i;
						m_AnalogCh[m].bEnCalled = TRUE;
						m_AnalogCh[m].nStatus = ANALOG_IDLE;
						m_AnalogCh[m].nLinkToChId = -1;
						memset(m_AnalogCh[m].szCallerId, 0, MAX_TELNUM_LEN);
						memset(m_AnalogCh[m].szCalleeId, 0, MAX_TELNUM_LEN);
						memset(m_AnalogCh[m].szPhoneNumBuf, 0, MAX_TELNUM_LEN);
						m++;
					}
					if(nDirection != 2)
					{
						cString.LoadString(IDS_PBX2);
						LogToList(LOGTYPE_ERROR, i, (LPTSTR)(LPCTSTR)cString, i);
					}
				}
			}	
			// 内线座席通道
			if(nType == 2) 
			{
				m_StationCh[n].nChId = i;
				m_StationCh[n].nLinkToChId = -1;
				m_StationCh[n].nStatus = STATION_IDLE;
				m_StationCh[n].bPressFlag = FALSE;
				memset(m_StationCh[n].szCallerId, 0, MAX_TELNUM_LEN);
				memset(m_StationCh[n].szCalleeId, 0, MAX_TELNUM_LEN);
				memset(m_StationCh[n].szPhoneNumBuf, 0, MAX_TELNUM_LEN);
				memset(m_StationCh[n].szStationNum, 0, MAX_TELNUM_LEN);

				CString strChId;
				strChId.Format("%d", m_StationCh[n].nChId);
				
				GetPrivateProfileString("EXTENSIONNUM", strChId, "", m_StationCh[n].szStationNum, 60, szPhoneNumConfig);
				if(SsmSetASDT(m_StationCh[n].nChId, 1) == -1)
				{
					AppErrorHandler(m_StationCh[n].nChId);
				}
				n++;
			}
			// 外线IP通道
			if(nType == m_nIPProtocol) 
			{
				m_IpCh[o].nChId = i;
				m_IpCh[o].nStatus = IP_IDLE;
				m_IpCh[o].nLinkToChId = -1;
				m_IpCh[o].ulCodecType = -1;
				memset(m_IpCh[o].szCallerId, 0, MAX_TELNUM_LEN);
				memset(m_IpCh[o].szCalleeId, 0, MAX_TELNUM_LEN);
				o++;
			}
		}//?end if(nType >= 0 )
		else
		{
			AppErrorHandler(i);
		}
	}
	
	m_nTotalAnalogCh = m;
	m_nTotalStationCh = n;
	m_nTotalIpCh = o;
}
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// 函数说明:初始化IP通道列表控件
///////////////////////////////////////////////////////////////////////////////////////////////
void CPBXDlg::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[7] = {80, 150, 150, 100, 70, 70, 70};
	LV_COLUMN lvc;
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	
	lvc.iSubItem = 0;

	cString.LoadString(IDS_PBX3);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[0];
	m_IpChList.InsertColumn(0, &lvc);
	
	lvc.iSubItem = 1;
	cString.LoadString(IDS_PBX4);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[1];
	m_IpChList.InsertColumn(1, &lvc);
	
	lvc.iSubItem = 2;
	cString.LoadString(IDS_PBX5);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[2];
	m_IpChList.InsertColumn(2, &lvc);

	lvc.iSubItem = 3;
	cString.LoadString(IDS_PBX6);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[3];
	m_IpChList.InsertColumn(3, &lvc);
	
	lvc.iSubItem = 4;
	cString.LoadString(IDS_PBX7);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[4];
	m_IpChList.InsertColumn(4, &lvc);

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

	lvc.iSubItem = 6;
	cString.LoadString(IDS_PBX9);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[6];
	m_IpChList.InsertColumn(6, &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_PBX10);
		m_IpChList.SetItemText(i, 1, cString);
		
		switch(m_nIPProtocol)
		{
		case PROTOCOL_H323:
			{
				m_IpChList.SetItemText(i, 6, "H323");
				break;
			}
		case PROTOCOL_SIP:
			{
				m_IpChList.SetItemText(i, 6, "SIP");
				break;
			}
		default:
			{
				cString.LoadString(IDS_PBX11);
				m_IpChList.SetItemText(i, 6, cString);
				break;
			}
		}
	}	
}
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// 函数说明:初始化模拟通道列表控件
///////////////////////////////////////////////////////////////////////////////////////////////
void CPBXDlg::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[5] = {80, 150, 150, 100, 70};
	LV_COLUMN lvc;
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	
	lvc.iSubItem = 0;
	cString.LoadString(IDS_PBX12);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[0];
	m_AnalogChList.InsertColumn(0, &lvc);
	
	lvc.iSubItem = 1;
	cString.LoadString(IDS_PBX13);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[1];
	m_AnalogChList.InsertColumn(1, &lvc);
	
	lvc.iSubItem = 2;
	cString.LoadString(IDS_PBX14);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[2];
	m_AnalogChList.InsertColumn(2, &lvc);
	
	lvc.iSubItem = 3;
	cString.LoadString(IDS_PBX15);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[3];
	m_AnalogChList.InsertColumn(3, &lvc);

	lvc.iSubItem = 4;
	cString.LoadString(IDS_PBX16);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[4];
	m_AnalogChList.InsertColumn(4, &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_PBX17);
		m_AnalogChList.SetItemText(i, 1, cString);
	}			
}
///////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////
// 函数说明:初始化座席通道列表控件
///////////////////////////////////////////////////////////////////////////////////////////////
void CPBXDlg::InitStationChListCtrl()
{
	CString cString;
	m_StationChList.SetExtendedStyle(LVS_EX_FULLROWSELECT);  
	
	COLORREF cr = 0x000000;
	m_StationChList.SetBkColor(cr);
	m_StationChList.SetTextBkColor(cr);
	
	COLORREF cr1 = 0x00ff00;
	m_StationChList.SetTextColor(cr1);
	
	int ColumnWidth[5] = {80, 150, 70, 100, 100};
	LV_COLUMN lvc;
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	
	lvc.iSubItem = 0;
	cString.LoadString(IDS_PBX18);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[0];
	m_StationChList.InsertColumn(0, &lvc);

	lvc.iSubItem = 1;
	cString.LoadString(IDS_PBX19);
	lvc.pszText = (LPTSTR)(LPCTSTR)cString;
	lvc.cx = ColumnWidth[1];
	m_StationChList.InsertColumn(1, &lvc);
	

⌨️ 快捷键说明

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