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

📄 callinfo.cpp

📁 TAPI编程应用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			}
		}
		m_csGatherRes.Format("%d",msMonState.dwGatherResult);
		m_pCall->UpdateMonitorState(RESET_GATHER_RESULT, 0L, 0L); 
		m_btnGather.SetWindowText("Gather Digits");
	}
	UpdateData(FALSE);		//from data to controls
}			

/////////////////////////////////////////////////////////////////////////////
// CCallInfo message handlers

BOOL CCallInfo::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	SetHelpID(HIDD_TALKER32_DialogCallInfo);
	if(!m_csCaption.IsEmpty()) SetWindowText(m_csCaption);
	m_ctlVolume.SetRange(0, MAX_REL_VOLUME);
	if(m_pCall)
		m_ctlVolume.SetPos((int) ((MAX_REL_VOLUME * (int) (m_pCall->GetWaveVolume()))/MAX_ABS_VOLUME));
	else
		m_ctlVolume.SetPos(MAX_REL_VOLUME);
	SetTimer(CALLINFO_TIMER_ID, 2000, NULL);
	DisplayCallInfo(TRUE);	
	UpdateDigitsMonitorStatus(TRUE, 0, 0);	// get monitoring & gathering result from the status structure	
	if(m_pCall) 
	{
		m_pCall->m_hStatusWnd = m_hWnd;	// register self to the pCall
		m_pCall->m_hCallAlertWnd = m_btnCallAlert.GetSafeHwnd();	// register self to the pCall
		m_pCall->m_dwCallAlert = IDC_CALLALERT;
		m_pCall->m_uiAlertMsg = m_uiMsg;
	}
 	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CCallInfo::OnPlay() 
{
	long lrc;
	if(m_pWaveName == NULL || m_pWaveName->IsEmpty()) 
	{
		AfxMessageBox("No file to play");
		return;
	}	
	if(m_pCall) 
	{
		SetTimer(WAVE_TIMER_ID, 500, NULL);
		if(WAVE_DISFUNCTIONAL ==  m_pCall->GetWaveStatus()) 	// use devspecific
		{
			lrc = m_pCall->PlayEx(m_pWaveName->GetBuffer(128));
			if(lrc < 0) 
				AfxMessageBox("Failed to start playing");
		}
		else
			m_pCall->Play(m_pWaveName->GetBuffer(128));	
	}
	DisplayCallInfo();
}

void CCallInfo::OnRecord() 
{
	if(m_pCall)
	{
		if(*m_pnWaveFormatID == 0 )	
			m_nRecTime = *m_pdwRecFileSize/3000;
		else if(*m_pnWaveFormatID == 1 )	
			m_nRecTime = *m_pdwRecFileSize/4000;
		else if(*m_pnWaveFormatID == 2	 || *m_pnWaveFormatID == 5 || *m_pnWaveFormatID == 8)	
			m_nRecTime = *m_pdwRecFileSize/6000;
		else if(*m_pnWaveFormatID == 3 || *m_pnWaveFormatID == 6 || *m_pnWaveFormatID == 9)	
			m_nRecTime = *m_pdwRecFileSize/8000;
		else
			m_nRecTime = *m_pdwRecFileSize/11000;
		SetTimer(WAVE_TIMER_ID, 1000, NULL);
		if(WAVE_DISFUNCTIONAL ==  m_pCall->GetWaveStatus()) 	// use devspecific
		{			
			if(m_pWaveRecName->IsEmpty()) 
				m_pWaveRecName->Format("%s","C:\\WINNT35\\SYSTEM32\\TESTREC.WAV");
			TRACE("Recording into %s\n", m_pWaveRecName->GetBuffer(120));
			m_pCall->RecordEx(m_pWaveRecName->GetBuffer(120), m_nRecTime, *m_pnWaveFormatID);
		}
		else
			m_pCall->Record(*m_pnWaveFormatID, *m_pdwRecFileSize);	
	}
	DisplayCallInfo();
}

void CCallInfo::OnRefresh() 
{
	DisplayCallInfo(TRUE);	// update=FALSE by default
}

void CCallInfo::OnClose() 
{
	KillTimer(CALLINFO_TIMER_ID);	
	CPropertyPage::OnClose();
}

void CCallInfo::OnTimer(UINT nIDEvent) 
{
	//if(nIDEvent == CALLINFO_TIMER_ID && !m_nRecTime) DisplayCallInfo(TRUE);
	if(nIDEvent == WAVE_TIMER_ID) 
	{	
		if(m_nRecTime >1) m_nRecTime -=1; 
		else m_nRecTime = 0;
		DisplayCallInfo();
	}
	CPropertyPage::OnTimer(nIDEvent);
}

// Get call info
void CCallInfo::OnInfobtn() 
{
	CString csTemp;

	m_csCallInfo.Empty();
	LPLINECALLINFO lpLCI = ((CTalkApp *)AfxGetApp())->GetCallInfo(m_pCall->m_hCall);
	if(lpLCI == NULL) return;	// failed for some reason

	csTemp.Format("hLine = %lx\r\ndwLineDeviceID = %d\r\ndwBearerMode = %lx\r\n",
			lpLCI->hLine, lpLCI->dwLineDeviceID, lpLCI->dwBearerMode);
	m_csCallInfo += csTemp;
	csTemp.Format("dwMediaMode = %lx\r\ndwCallStates = %lx\r\ndwMonitorDigitModes = %lx\r\nCallerID flags = %lx\r\nCalledID flags = %lx\r\n",
			lpLCI->dwMediaMode, lpLCI->dwCallStates, lpLCI->dwMonitorDigitModes,lpLCI->dwCallerIDFlags,lpLCI->dwCalledIDFlags);
	m_csCallInfo += csTemp;

    if (lpLCI->dwCallerIDFlags & LINECALLPARTYID_NAME && lpLCI->dwCallerIDNameSize)
    {
        	csTemp.Format("Caller name=%s\r\n",(LPSTR)(((LPSTR)(lpLCI))+lpLCI->dwCallerIDNameOffset));
			m_csCallInfo += csTemp;
    } 

   	if (lpLCI->dwCallerIDFlags & LINECALLPARTYID_ADDRESS && lpLCI->dwCallerIDSize)
    {
        	csTemp.Format("Caller number=%s\r\n", (LPSTR)(((LPSTR)(lpLCI))+lpLCI->dwCallerIDOffset));      
			m_csCallInfo += csTemp;
    } 
	UpdateData(FALSE);
	delete (PBYTE) lpLCI; 	
	
}

void CCallInfo::OnMonitor() 
{
	LONG lrc;
	CString csTemp;
	HCALL hCall;

	if(m_pCall) hCall = m_pCall->m_hCall;	// protect this 
	m_btnMonitor.GetWindowText(csTemp);
	if(!csTemp.CompareNoCase("Monitor Digits"))	// currently not monitoring
	{
		lrc = m_pCall->MonitorDigits(LINEDIGITMODE_DTMF);	
		if(!lrc) m_btnMonitor.SetWindowText("Stop Monitor");	
	}
	else
	{
		lrc = m_pCall->MonitorDigits(0);	
		m_btnMonitor.SetWindowText("Monitor Digits");	
	}
}

void CCallInfo::OnDestroy() 
{
	CPropertyPage::OnDestroy();
	
	if(m_pCall) 
	{
		m_pCall->m_hStatusWnd = NULL;	
		m_pCall->m_hCallAlertWnd = NULL;	
		m_pCall->m_dwCallAlert = NULL;
		m_pCall->m_uiAlertMsg = m_uiMsg;
	}
}

// Alert message w/o parameters 
void CCallInfo::OnCallalert() 
{
	UpdateDigitsMonitorStatus(TRUE);	// get monitoring & gathering result	
}

// Alert message w/parameters 
LONG CCallInfo::OnDynamicAlert(UINT wParam, LONG lParam)
{
	if(!wParam) 	// gather result
		UpdateDigitsMonitorStatus(TRUE, 0, lParam);	// get gathering result	
	else 
		UpdateDigitsMonitorStatus(FALSE, wParam, lParam);	// get monitoring result	
	return 0;
}

void CCallInfo::OnGather() 
{
	CString csTemp;
	LONG lrc;
	char szErr[48];

	if(m_pCall == NULL) return;
	m_btnGather.GetWindowText(csTemp);

	if(!csTemp.CompareNoCase("Gather Digits"))	// currently not gathering
	{
		m_csGathered.Empty();
		m_csGatherRes.Empty();
		UpdateData(FALSE);
		lrc = m_pCall->GatherDigits(20, "*#", 10000, 5000, NULL);
		if(lrc)
		{
			if(!((CTalkApp *)AfxGetApp())->Code2Error(lrc, szErr, 46))
				csTemp.Format("lineGatherDigits failed reason=%lx", lrc);
			else
				csTemp.Format("lineGatherDigits failed reason=%s", szErr);
			AfxMessageBox(csTemp);
		}
		else m_btnGather.SetWindowText("Stop Gather");	
	}
	else   				// user said stop 
	{
		lrc = m_pCall->GatherDigits(0, "", 0, 0, NULL);	
		if(lrc)
		{
			if(!((CTalkApp *)AfxGetApp())->Code2Error(lrc, szErr, 46))
				csTemp.Format("attempt to cancel lineGatherDigits failed reason=%lx", lrc);
			else
				csTemp.Format("attempt to cancel lineGatherDigits failed reason=%s", szErr);
			AfxMessageBox(csTemp);
		}
//		else m_btnGather.SetWindowText("Gather Digits"); // consider it done...	
	}
}

void CCallInfo::OnPause() 
{
	if(!m_pCall) return;
	DWORD dwWaveStatus = m_pCall->GetWaveStatus();
	if(dwWaveStatus == PLAYING) 
		m_pCall->Pause();
	else if(dwWaveStatus == PAUSED)
		m_pCall->Resume();
	DisplayCallInfo();
}

void CCallInfo::OnStop() 
{
	m_pCall->StopWave();
	DisplayCallInfo();
}

void CCallInfo::OnSetFocus(CWnd* pOldWnd) 
{
	CPropertyPage::OnSetFocus(pOldWnd);
	((CTalkApp *)AfxGetApp())->SetHelpId(HIDD_TALKER32_DialogCallInfo);
}

void CCallInfo::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	int nP;
	if(nSBCode == SB_THUMBPOSITION || nSBCode == SB_THUMBTRACK) nP = nPos;
	else nP = m_ctlVolume.GetPos();
	if(m_pCall) m_pCall->SetWaveVolume((DWORD) ((MAX_ABS_VOLUME/MAX_REL_VOLUME) * nP)); 
	CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CCallInfo::OnGentone() 
{
	// display tone selection dialog
	CToneDlg dlg(this);
	//LPLINEGENERATETONE lplgT = NULL;
	dlg.m_bRunningOnNT = m_bRunningOnNT;
	if(IDCANCEL == dlg.DoModal()) return;
	if(dlg.m_bBeep) 
		lineGenerateTone(m_pCall->m_hCall, LINETONEMODE_BEEP, dlg.m_dwDur, 0, 0);
	else
	{	
		LINEGENERATETONE lgt[2];
		DWORD dwNum = 1;
		LONG lrc;

//		lplgT = (LPLINEGENERATETONE)new char[200*sizeof(LINEGENERATETONE)];
//		if(!lplgT) return;
		lgt[0].dwFrequency = dlg.m_dwF1;
		lgt[0].dwVolume = dlg.m_dwA1;
		lgt[0].dwCadenceOn = dlg.m_dwDur/2;
		lgt[0].dwCadenceOff = dlg.m_dwDur/2;
		if(dlg.m_dwF2)
		{
			lgt[1].dwFrequency = dlg.m_dwF2;
			lgt[1].dwVolume = dlg.m_dwA2;
			lgt[1].dwCadenceOn = dlg.m_dwDur/2;
			lgt[1].dwCadenceOff = dlg.m_dwDur/2;
			dwNum++;
		}
		if(lrc = lineGenerateTone(m_pCall->m_hCall, LINETONEMODE_CUSTOM, 
				dlg.m_dwDur, dwNum, lgt))
		{
			CString csTemp;
			csTemp.Format("lineGenerateTone failed rc=%lx", lrc);
			AfxMessageBox(csTemp);
		}
//		if(lplgT) delete lplgT;
	}
}

/* 
 #define SB_LINEUP           0
#define SB_LINELEFT         0
#define SB_LINEDOWN         1
#define SB_LINERIGHT        1
#define SB_PAGEUP           2
#define SB_PAGELEFT         2
#define SB_PAGEDOWN         3
#define SB_PAGERIGHT        3
#define SB_THUMBPOSITION    4
#define SB_THUMBTRACK       5
#define SB_TOP              6
#define SB_LEFT             6
#define SB_BOTTOM           7
#define SB_RIGHT            7
#define SB_ENDSCROLL        8
*/

⌨️ 快捷键说明

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