📄 callinfo.cpp
字号:
}
}
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 + -