ipcountdlg.cpp
来自「IP电话计费管理系统本地版」· C++ 代码 · 共 2,338 行 · 第 1/5 页
CPP
2,338 行
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CIPCountDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CIPCountDlg::OnSysSetup()
{
// TODO: Add your control notification handler code here
if(!bSystem)
{
mdlg->Create(IDD_DIALOG_SETUP);
mdlg->ShowWindow(SW_SHOW);
bSystem=TRUE;
}
else
{
mdlg->DestroyWindow();
bSystem=FALSE;
}
}
void CIPCountDlg::OnSaleMang()
{
// TODO: Add your control notification handler code here
int nAddFlag=mdlg->GetAddMoneyFlag();
nGetSaleCutFlag=mdlg->GetSaleCutFlag();
nPrintAtOnce=mdlg->GetPrintFlag();
nPrintMode=mdlg->GetPrintOneFlag();
strUpSpace=mdlg->GetUpSpace();
SetInitRate();
if(bOpenCom[0])
{
SendData("c",nGwCom[0]);
SendData("admin",nGwCom[0]);
SendData("deb cdr",nGwCom[0]);
SendData("deb line",nGwCom[0]);
if(mdlg->GetNoPreMoney()==0)
{
strTempNum[0]=mdlg->GetMoneyLine("Line0");//每一线的押金
strTempNum[1]=mdlg->GetMoneyLine("Line1");
strTempNum[2]=mdlg->GetMoneyLine("Line2");
strTempNum[3]=mdlg->GetMoneyLine("Line3");
strTempNum[4]=mdlg->GetMoneyLine("Line4");
strTempNum[5]=mdlg->GetMoneyLine("Line5");
strTempNum[6]=mdlg->GetMoneyLine("Line6");
strTempNum[7]=mdlg->GetMoneyLine("Line7");
}
else//无押金模式
{
for(int nNum=0;nNum<8;nNum++)
strTempNum[nNum]="";
}
}
if(bOpenCom[1])
{
SendData("c",nGwCom[1]);
SendData("admin",nGwCom[1]);
SendData("deb cdr",nGwCom[1]);
SendData("deb line",nGwCom[1]);
if(mdlg->GetNoPreMoney()==0)
{
strTempNum[8]=mdlg->GetMoneyLine("Line8");
strTempNum[9]=mdlg->GetMoneyLine("Line9");
strTempNum[10]=mdlg->GetMoneyLine("Line10");
strTempNum[11]=mdlg->GetMoneyLine("Line11");
strTempNum[12]=mdlg->GetMoneyLine("Line12");
strTempNum[13]=mdlg->GetMoneyLine("Line13");
strTempNum[14]=mdlg->GetMoneyLine("Line14");
strTempNum[15]=mdlg->GetMoneyLine("Line15");
}
else
{
for(int nNum=8;nNum<16;nNum++)
strTempNum[nNum]="";
}
}
if(!bOpenSale)
{
sdlg->Create(IDD_DIALOG_SALE_MANG);
sdlg->ShowWindow(SW_SHOW);
if(nAddFlag==1)
{
sdlg->m_AddLine.EnableWindow(TRUE);
sdlg->m_AddMany.EnableWindow(TRUE);
sdlg->m_AddMoney.EnableWindow(TRUE);
}
bOpenSale=TRUE;
if (hThread == NULL)
{
hThread = CreateThread( //创建线程
NULL, // default security attributes
0, // use default stack size
ReceiveMsgProc, // thread function
this, // argument to thread function
0, // use default creation flags
&dwThreadId); // returns the thread identifier
}
}
else
{
sdlg->OnCancel();
if(!sdlg->bCanQuit)
sdlg->ShowWindow(SW_SHOW);
else
bOpenSale=FALSE;
}
}
void CIPCountDlg::OnStatics()
{
// TODO: Add your control notification handler code here
if(!bOpenStatics)
{
m_Sheet=new CStaticsSheet();
m_page1=new CDayStaticsPage();
m_page2=new CMonStaticsPage();
m_Sheet->AddPage(m_page2);
m_Sheet->AddPage(m_page1);
m_Sheet->Create(this);
m_Sheet->ShowWindow(SW_SHOW);
bOpenStatics=TRUE;
}
else
{
m_Sheet->DestroyWindow();
bOpenStatics=FALSE;
}
}
void CIPCountDlg::OnRate()
{
// TODO: Add your control notification handler code here
/* if (!bRate)
{
fdlg->Create(IDD_DIALOG_RATE);
fdlg->ShowWindow(SW_SHOW);
bRate=TRUE;
}
else
{
fdlg->DestroyWindow();
bRate=FALSE;
}*/
if(!bRate)
{
m_FSheet=new CFeeRateSheet();
m_Fpage1=new CFeeRatePage();
m_Fpage2=new CSaleCutPage();
m_FSheet->AddPage(m_Fpage1);
m_FSheet->AddPage(m_Fpage2);
m_FSheet->Create(this);
m_FSheet->ShowWindow(SW_SHOW);
bRate=TRUE;
}
else
{
m_FSheet->DestroyWindow();
bRate=FALSE;
}
}
void CIPCountDlg::OnModpswd()
{
// TODO: Add your control notification handler code here
cdlg->DoModal();
}
void CIPCountDlg::OnVer()
{
// TODO: Add your control notification handler code here
CAboutDlg adlg;
adlg.DoModal();
}
BEGIN_EVENTSINK_MAP(CIPCountDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CIPCountDlg)
ON_EVENT(CIPCountDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
ON_EVENT(CIPCountDlg, IDC_MSCOMM2, 1 /* OnComm */, OnComm2, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CIPCountDlg::OnComm()
{
// TODO: Add your control notification handler code here
int nRxPort = m_ctrlComm.GetCommPort();
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
n=m_ctrlComm.GetInBufferCount();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData[0]+=strtemp; //加入接收编辑框对应字符串
//下面代码判断是否是回车符
char str2[2];
char tempchar[2];
tempchar[0] = (char)bt;
tempchar[1] ='\0';
sprintf(str2,"%c",'\r');//回车符
if(strcmp(tempchar,str2)==0)
{
OnRecvDTMF(nGwCom[0]);
int nFind=0;
nFind=m_strRXData[0].Find('#',0);
if(nFind!=-1)
{
strSaveInfo.Format("%s", m_strRXData[0].Mid(nFind+1));
m_strRXData[0]="";
MidInfo(strSaveInfo,nGwCom[0]);
}
}
}
}
DealReboot(nGwCom[0]);
}
/////////////////////////////////////////////////////////////
////通用版本新增代码
BOOL CIPCountDlg::InitCom(int nGW, int nInitCom)
{
if (nGW == 1)
{
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
if (!bCommValid(nInitCom))
{
CString sMessage = "";
sMessage.Format("串口%d被占用或不存在", nInitCom);
AfxMessageBox(sMessage, MB_ICONSTOP);
return FALSE;
}
m_ctrlComm.SetCommPort(nInitCom); //选择nCom号的串口
if( !m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(TRUE);//打开串口
}
else
AfxMessageBox("cannot open serial port 1");
m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInputMode(1); //以二进制方式检到数据
m_ctrlComm.SetRThreshold(2); //将1改为3
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
}
if (nGW == 2)
{
if(m_ctrlComm2.GetPortOpen())
m_ctrlComm2.SetPortOpen(FALSE);
if (!bCommValid(nInitCom))
{
CString sMessage = "";
sMessage.Format("串口%d被占用或不存在", nInitCom);
AfxMessageBox(sMessage, MB_ICONSTOP);
return FALSE;
}
m_ctrlComm2.SetCommPort(nInitCom); //选择nCom号的串口
if( !m_ctrlComm2.GetPortOpen())
{
m_ctrlComm2.SetPortOpen(TRUE);//打开串口
}
else
AfxMessageBox("cannot open serial port 1");
m_ctrlComm2.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm2.SetInputMode(1); //以二进制方式检到数据
m_ctrlComm2.SetRThreshold(2); //将1改为3
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm2.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm2.GetInput();//先预读缓冲区以清除残留数据
}
return TRUE;
}
//end
BOOL CIPCountDlg::bCommValid(int portnr)
{
CString szPort;
HANDLE hComm = NULL;
// prepare port strings
szPort.Format("COM%d", portnr);
// get a handle to the port
hComm = CreateFile(szPort, // communication port string (COMX)
GENERIC_READ | GENERIC_WRITE, // read/write types
0, // comm devices must be opened with exclusive access
NULL, // no security attributes
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
FILE_FLAG_OVERLAPPED, // Async I/O
0); // template must be 0 for comm devices
if (hComm == INVALID_HANDLE_VALUE)
{
// port not found
return FALSE;
}
else
{
CloseHandle(hComm);
hComm = NULL;
return TRUE;
}
}
void CIPCountDlg::OnRecvDTMF(int nCom)
{
int k=0;
int nLine = 0;
k=m_strRXData[0].Find('(',0);
if(k!=-1)
{
CString strChan=m_strRXData[0].Mid(k-4,2);
if(strcmp(strChan,"ch")==0)//判断是否是摘挂机
{
CString strLine=m_strRXData[0].Mid(k+1,1);
CString strHangUp=m_strRXData[0].Mid(k+9,2);
m_strRXData[0]="";
nLine=atoi(strLine);
if (nCom == nGwCom[0])
nLine = nLine + 1;
else if (nCom == nGwCom[1])
nLine = nLine + 9;
if(strcmp(strHangUp,"up")==0)
{
if(bOpenSale)
{
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine,9),"开")==0)
{
nFlagLine[nLine-1]=1;//摘机
ShowStatus(nLine,1,"摘机");
ShowStatus(nLine,2,"");
ShowStatus(nLine,3,"");
ShowStatus(nLine,4,"");
ShowStatus(nLine,5,"");
ShowStatus(nLine,6,"");
m_CalledTempNum[nLine-1]="";
bClosed[nLine-1]=FALSE;
bTalking[nLine-1]=FALSE;
}//end of 是否开按钮
else
m_CalledTempNum[nLine-1]="";//09-26
}//end of bOpenSale
}//end of up
else //挂机
{
if(bOpenSale)
{
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine,9),"开")==0)
{
nFlagLine[nLine-1]=6;//挂机
if(bClosed[nLine-1])//对方先挂机
bClosed[nLine-1]=FALSE;//待测试
if((!bClosed[nLine-1])&&(!bTalking[nLine-1]))//没有通话或对方先挂机
{
if(bClosedLine[nLine-1])
{
sdlg->nCountClk[nLine-1]=0;
nFlagLine[nLine-1]=7;//锁定
ShowStatus(nLine,1,"锁定");
ShowStatus(nLine,9,"关");
ShowLineColor(nLine-1,RGB(255,50,0));
}
else
{
nFlagLine[nLine-1]=0;
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine,3),"")==0)//拨号未通话时
{
ShowStatus(nLine,2,"");//清空信息
ShowStatus(nLine,5,"");
}
ShowStatus(nLine,1,"空闲");
ShowLineColor(nLine-1,RGB(0,40,140));
}
return;
}
if(strcmp(sdlg->m_SaleGrid.GetTextMatrix(nLine,2),"锁定")!=0)
{
int nRadio=mdlg->GetRadio();//从注册表获得设置信息
if(nRadio==0)
nRadio=1;//默认为挂机自动锁定
if(nRadio==1)//如果是挂机自动锁机
{
sdlg->nCountClk[nLine-1]=0;
sdlg->ControlLine(sdlg->nCountClk[nLine-1],nLine);//
}
else
{
if(bClosedLine[nLine-1])
{
nFlagLine[nLine-1]=7;//锁定
ShowStatus(nLine,1,"锁定");
ShowStatus(nLine,9,"关");
ShowLineColor(nLine-1,RGB(255,50,0));
}
else
{
nFlagLine[nLine-1]=0;
ShowStatus(nLine,1,"空闲");
ShowLineColor(nLine-1,RGB(0,40,140));
}
}
}
}
else //状态为关
{
nFlagLine[nLine-1]=7;//锁定
ShowStatus(nLine,1,"锁定");
}
}
}
m_strRXData[0]="";
}
else if(strcmp(strChan,"Ch")==0)//拨号
{
CString strLine=m_strRXData[0].Mid(k+1,1);
if(IsCharAlpha(strLine[0]))//处理掉非数字的字符,如果线号出错,直接返回
return;
nLine=atoi(strLine);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?