📄 pbxdlg.cpp
字号:
#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 + -