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

📄 fax_polling_vcdlg.cpp

📁 VC6.0
💻 CPP
📖 第 1 页 / 共 5 页
字号:
//Chinese: 初始化板卡
//English: initialize board
BOOL CFax_Polling_VCDlg::InitCtiBoard()	
{
	char szShIndex[MAX_PATH];		//Chinese: 存放ShIndex.ini文件的路径
									//English: path to ShIndex.ini
	char szShConfig[MAX_PATH];		//Chinese: 存放ShConfig.ini文件的路径
									//English: path to ShConfig.ini
	CString str;
	int nCheck;
	int nChk;

	GetCurrentDirectory(MAX_PATH, m_szCurPath);
	strcpy(szShIndex, m_szCurPath);
	strcpy(szShConfig, m_szCurPath);
	strcat(szShIndex, "\\ShIndex.ini");
	strcat(szShConfig, "\\ShConfig.ini");
	//Chinese: 将配置文件传递给驱动程序,并初始化系统
	//English: load configuration file and initialize system
	if (SsmStartCti(szShConfig, szShIndex) == -1)
	{
		//Chinese: 取得初始化出错信息
		//English: get initialization error message
		SsmGetLastErrMsg(m_szErrMsg);	
		AfxMessageBox(m_szErrMsg, MB_OK);
		return FALSE;
	}
	//Chinese: 判断驱动已经初始化的板卡数和配置文件中配置的板卡数是否一致
	//English: Judge if the number of initialized boards is the same as
	//		   that of boards specified in the configuration file
	
	if(SsmGetMaxUsableBoard() != SsmGetMaxCfgBoard())
	{
		SsmGetLastErrMsg(m_szErrMsg);	
		AfxMessageBox(m_szErrMsg, MB_OK);
		return FALSE;
	}

	m_nTotalCh = SsmGetMaxCh();		//Chinese: 取得板卡最大通道号
									//English: get max channels of boards
	if(m_nTotalCh == -1)
		WriteLog("Fail to call SsmGetMaxCh");

	m_SecondDlg.m_cmbFaxCh.InsertString(-1, "None");
	m_SecondDlg.m_cmbTrkCh.InsertString(-1, "None");
	m_cmbTrkCh.InsertString(-1, "None");
	m_cmbTrkChNo.InsertString(-1, "None");
	m_cmbFaxChNo.InsertString(-1, "None");
	m_cmbFaxCh.InsertString(-1, "None");

	for(int i = 0; i < m_nTotalCh; i++)
	{
		m_TrkCh[i].bEnCalled = FALSE;
		nCheck = SsmGetChType(i);
		if(nCheck == -1)
			WriteLog("Fail to call SsmGetChType");
		//Chinese: 传真资源通道或软传真
		//English: fax channel or soft fax
		else if(nCheck == FAX_CH || nCheck == SOFTFAX_CH)	
		{
			m_FaxCh[i].pffSCT = (PFAX_FILE_SCT)GlobalAlloc(GMEM_FIXED, sizeof(FAX_FILE_SCT)*50);

			strcpy(m_FaxCh[i].szChErrMsg, "");
			strcpy(m_FaxCh[i].szRcvPathFile, "");	
			strcpy(m_FaxCh[i].szSendFile, "");
			strcpy(m_FaxCh[i].szSendPath, "");
			strcpy(m_FaxCh[i].szPage, "");
			strcpy(m_FaxCh[i].szGetID, "");
			m_FaxCh[i].nStep = FAX_IDLE;
			m_FaxCh[i].nAnswered = 0;
			m_FaxCh[i].bUseful = FALSE;
			m_FaxCh[i].nAllBytes = 0;
			m_FaxCh[i].nSendBytes = 0;
			m_FaxCh[i].nRcvBytes = 0;
			m_FaxCh[i].nCheckEnd = 0;
			str.Format("%d", i);
			m_SecondDlg.m_cmbFaxCh.InsertString(-1, str);
			m_cmbFaxChNo.InsertString(-1, str);
			m_cmbFaxCh.InsertString(-1, str);
		}
		else
		{
			int nDirection;
			//Chinese: 取得通道的自动接续使能标志和呼叫方向
			//English: get automatic call progress enable flag and call direction
			nCheck = SsmGetAutoCallDirection(i, &nDirection);
			if(nCheck == -1)
				WriteLog("Fail to call SsmGetAutoCallDirection");
			//Chinese: 允许自动接续
			//English: enable automatic call progress
			else if(nCheck == 1) 
			{	
				m_TrkCh[i].nCallFlag	 = -1;
				m_TrkCh[i].nStep         = TRK_IDLE;
				m_TrkCh[i].szChErrMsg[0] = '\0';
				m_TrkCh[i].bEnCalled     = TRUE;
				m_TrkCh[i].nAutoOrNot    = 0;
				m_TrkCh[i].bRecord		 = TRUE;
				m_TrkCh[i].szDtmf[0]	 = 0;
				m_TrkCh[i].szDtmfChose[0]= 0;
				m_TrkCh[i].bUseful		 = FALSE;
				m_TrkCh[i].nIndex		 = 0;
				m_TrkCh[i].nFirstDtmf    = 0;
				m_TrkCh[i].bLinked		 = FALSE;
				m_TrkCh[i].nTimer		 = -1;
				strcpy(m_TrkCh[i].szCallerId, "");

				str.Format("%d", i);	
				m_SecondDlg.m_cmbTrkCh.InsertString(-1, str);
				m_cmbTrkCh.InsertString(-1, str);
				m_cmbTrkChNo.InsertString(-1, str);
			}
		}
	}//end of for
	m_SecondDlg.m_cmbFaxCh.SetCurSel(0);
	m_cmbFaxChNo.SetCurSel(0);
	m_cmbFaxCh.SetCurSel(0);
	m_cmbTrkCh.SetCurSel(0);
	m_cmbTrkChNo.SetCurSel(0);
	m_SecondDlg.m_cmbTrkCh.SetCurSel(0);

	//Chinese: 加载语音片段数据"Step1.voc"和"Step2.voc" 
	//English: load speech data "Step1.voc" and "Step2.voc"
	nCheck = SsmLoadIndexData(1, "", 6, "Step1.voc", 0, -1);
	nChk = SsmLoadIndexData(2, "", 6, "Step2.voc", 0, -1);
	if(nCheck == -1 || nChk == -1)		       
	{
		if(g_dwLanguageConversion == g_dwCHINESE_SIMPLIFIED)
			AfxMessageBox(_T("加载语音文件失败"));
		else
			AfxMessageBox(_T("Failed to load speech file"));
		if(SsmCloseCti() == -1)	//close board drivers
			WriteLog("Failed to call SsmCloseCti");
		return FALSE;
	}

	return TRUE;
}


void CFax_Polling_VCDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int n = m_TabCtrl.GetCurSel();
	switch(n)
	{
	case 0:
		m_nTabShow = 0;
		m_FirstDlg.ShowWindow(SW_SHOW);
		m_SecondDlg.ShowWindow(SW_HIDE);
		m_ThirdDlg.ShowWindow(SW_HIDE);
		m_FourthDlg.ShowWindow(SW_HIDE);
		break;
	case 1:
		m_nTabShow = 1;
		m_FirstDlg.ShowWindow(SW_HIDE);
		m_SecondDlg.ShowWindow(SW_SHOW);
		m_ThirdDlg.ShowWindow(SW_HIDE);
		m_FourthDlg.ShowWindow(SW_HIDE);
		break;
	case 2:
		m_nTabShow = 2;
		m_FirstDlg.ShowWindow(SW_HIDE);
		m_SecondDlg.ShowWindow(SW_HIDE);
		m_ThirdDlg.ShowWindow(SW_SHOW);
		m_FourthDlg.ShowWindow(SW_HIDE);
		break;
	case 3:
		m_nTabShow = 3;
		m_FirstDlg.ShowWindow(SW_HIDE);
		m_SecondDlg.ShowWindow(SW_HIDE);
		m_ThirdDlg.ShowWindow(SW_HIDE);
		m_FourthDlg.ShowWindow(SW_SHOW);
		break;
	}
	*pResult = 0;
}


void CFax_Polling_VCDlg::OnShowWindow(BOOL bShow, UINT nStatus) 
{
	CDialog::OnShowWindow(bShow, nStatus);
	
	// TODO: Add your message handler code here
	CRect tabRect, itemRect;
	int nX, nY, nXc, nYc;

	m_TabCtrl.GetClientRect(&tabRect);
	m_TabCtrl.GetItemRect(0, &itemRect);

	nX  = itemRect.left + 20 + 400 ;
	nY  = itemRect.bottom + 70 + 200 - 10;
	nXc = tabRect.right - itemRect.left - 15;
	nYc = tabRect.bottom - nY + 20 + 200 + 30;
	
	switch (m_nTabShow)
	{
	case 0:
		m_TabCtrl.SetCurSel(0);
		m_FirstDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
		m_SecondDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		m_ThirdDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		m_FourthDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		break;
	case 1:
		m_TabCtrl.SetCurSel(1);
		m_FirstDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		m_SecondDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
		m_ThirdDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		m_FourthDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		break;
	case 2:
		m_TabCtrl.SetCurSel(2);
		m_FirstDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		m_SecondDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		m_ThirdDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
		m_FourthDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		break;
	case 3:
		m_TabCtrl.SetCurSel(3);
		m_FirstDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		m_SecondDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		m_ThirdDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_HIDEWINDOW);
		m_FourthDlg.SetWindowPos(&wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW);
		break;
	}
}
//Chinese: 写日志
//English: write log messages
void CFax_Polling_VCDlg::WriteLog(char *szLog)
{
	if(FALSE == m_bLog)
		return;
	
	CString szWriteLog;
	SYSTEMTIME st;
	GetLocalTime(&st);

	szWriteLog.Format("%04d-%02d-%02d %02d:%02d:%02d : %s\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, szLog);
	fwrite((LPCTSTR)szWriteLog , szWriteLog.GetLength() , 1 , m_LogFile);
	fflush(m_LogFile);
}


void CFax_Polling_VCDlg::InitFaxChListCtrl()
{
	int nCheck;
	static int ColumnWidth[10] = {40, 150, 40, 100, 100, 120, 120, 150};
	LV_COLUMN lvc;
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

	if(g_dwLanguageConversion == g_dwCHINESE_SIMPLIFIED)
	{
		lvc.iSubItem = 0;
		lvc.pszText = "通道" ;
		lvc.cx = ColumnWidth[0];
		m_FaxChList.InsertColumn(0, &lvc);

		lvc.iSubItem = 1;
		lvc.pszText = "通道状态";
		lvc.cx = ColumnWidth[1];
		m_FaxChList.InsertColumn(1, &lvc);

		lvc.iSubItem = 2;
		lvc.pszText = "页数";
		lvc.cx = ColumnWidth[2];
		m_FaxChList.InsertColumn(2, &lvc);

		lvc.iSubItem = 3;
		lvc.pszText = "对方ID号";
		lvc.cx = ColumnWidth[3];
		m_FaxChList.InsertColumn(3, &lvc);

		lvc.iSubItem = 4;
		lvc.pszText = "当前文件名";
		lvc.cx = ColumnWidth[4];
		m_FaxChList.InsertColumn(4, &lvc);

		lvc.iSubItem = 5;
		lvc.pszText = "传真字节数";
		lvc.cx = ColumnWidth[5];
		m_FaxChList.InsertColumn(5, &lvc);

		lvc.iSubItem = 6;
		lvc.pszText = "传真执行结果";
		lvc.cx = ColumnWidth[6];
		m_FaxChList.InsertColumn(6, &lvc);

		lvc.iSubItem = 7;
		lvc.pszText = "出错信息";
		lvc.cx = ColumnWidth[7];
		m_FaxChList.InsertColumn(7, &lvc);
	}
	else
	{
		lvc.iSubItem = 0;
		lvc.pszText = "Ch" ;
		lvc.cx = ColumnWidth[0];
		m_FaxChList.InsertColumn(0, &lvc);

		lvc.iSubItem = 1;
		lvc.pszText = "Channel state";
		lvc.cx = ColumnWidth[1];
		m_FaxChList.InsertColumn(1, &lvc);

		lvc.iSubItem = 2;
		lvc.pszText = "Page number";
		lvc.cx = ColumnWidth[2];
		m_FaxChList.InsertColumn(2, &lvc);

		lvc.iSubItem = 3;
		lvc.pszText = "Remote ID";
		lvc.cx = ColumnWidth[3];
		m_FaxChList.InsertColumn(3, &lvc);

		lvc.iSubItem = 4;
		lvc.pszText = "Current file name";
		lvc.cx = ColumnWidth[4];
		m_FaxChList.InsertColumn(4, &lvc);

		lvc.iSubItem = 5;
		lvc.pszText = "Number of fax bytes";
		lvc.cx = ColumnWidth[5];
		m_FaxChList.InsertColumn(5, &lvc);

		lvc.iSubItem = 6;
		lvc.pszText = "Execution result of faxing";
		lvc.cx = ColumnWidth[6];
		m_FaxChList.InsertColumn(6, &lvc);

		lvc.iSubItem = 7;
		lvc.pszText = "Error message";
		lvc.cx = ColumnWidth[7];
		m_FaxChList.InsertColumn(7, &lvc);
	}

	char dig[3];
	for(int i = 0; i < m_nTotalCh; i++)	
	{
		nCheck = SsmGetChType(i);
		if(nCheck == -1)
			WriteLog("Fail to call SsmGetChType");
		else if(nCheck == FAX_CH || nCheck == SOFTFAX_CH)
		{
			m_FaxChList.InsertItem(i, _itoa(i, dig, 10));
		}
	}
}


void CFax_Polling_VCDlg::InitTrunkChListCtrl()
{
	static int ColumnWidth[10] = {40, 80, 90, 100, 150, 150};
	LV_COLUMN lvc;
	lvc.mask =  LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

	if(g_dwLanguageConversion == g_dwCHINESE_SIMPLIFIED)
	{
		lvc.iSubItem = 0;
		lvc.pszText = "通道" ;
		lvc.cx = ColumnWidth[0];
		m_TrkChList.InsertColumn(0, &lvc);

		lvc.iSubItem = 1;
		lvc.pszText = "通道状态";
		lvc.cx = ColumnWidth[1];
		m_TrkChList.InsertColumn(1, &lvc);

		lvc.iSubItem = 2;
		lvc.pszText = "传真过程状态";
		lvc.cx = ColumnWidth[2];
		m_TrkChList.InsertColumn(2, &lvc);

		lvc.iSubItem = 3;
		lvc.pszText = "主叫号码";
		lvc.cx = ColumnWidth[3];
		m_TrkChList.InsertColumn(3, &lvc);

		lvc.iSubItem = 4;
		lvc.pszText = "DTMF按键";
		lvc.cx = ColumnWidth[4];
		m_TrkChList.InsertColumn(4, &lvc);

		lvc.iSubItem = 5;
		lvc.pszText = "出错信息";
		lvc.cx = ColumnWidth[5];
		m_TrkChList.InsertColumn(5, &lvc);
	}
	else
	{
		lvc.iSubItem = 0;
		lvc.pszText = "Ch" ;
		lvc.cx = ColumnWidth[0];
		m_TrkChList.InsertColumn(0, &lvc);

		lvc.iSubItem = 1;
		lvc.pszText = "Channel state";
		lvc.cx = ColumnWidth[1];
		m_TrkChList.InsertColumn(1, &lvc);

		lvc.iSubItem = 2;
		lvc.pszText = "Faxing state";
		lvc.cx = ColumnWidth[2];
		m_TrkChList.InsertColumn(2, &lvc);

		lvc.iSubItem = 3;
		lvc.pszText = "Calling party number";

⌨️ 快捷键说明

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