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

📄 tapi3dlg.cpp

📁 基于Tapi 3.0的软电话源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
{
    CString str, strExp;
    int curSel = m_MsgBox.GetCurSel();
    int txtLen = m_MsgBox.GetTextLen(curSel);

	CTapiEvent *p = (CTapiEvent*)m_MsgBox.GetItemDataPtr(m_MsgBox.GetCurSel());

    if ( p == NULL) return;

    m_MsgBox.GetText( curSel, str.GetBuffer(txtLen) );
    str.ReleaseBuffer();

    if ( str[0] == '+' )
    {
        // expand message and change leading '+' to '-'
        str.SetAt(0, '-');

        // remove old item and insert new one
        m_MsgBox.DeleteString(curSel);
        m_MsgBox.InsertString(curSel, str); 
        
        m_MsgBox.SetItemDataPtr(curSel, p);
		p->Dump(curSel+1);	    
    }
    else if ( str[0] == '-' )
    {        
        // squeeze message and change leading '-' to '+'
        str.SetAt(0, '+');

        // remove old item and insert new one
        m_MsgBox.DeleteString(curSel);
        m_MsgBox.InsertString(curSel, str); 
        m_MsgBox.SetItemDataPtr(curSel, p);

        // curSel is zero based. That is why 2
        while ( curSel + 2 <= m_MsgBox.GetCount())
        {            
            txtLen = m_MsgBox.GetTextLen(curSel + 1);
            m_MsgBox.GetText( curSel + 1, strExp.GetBuffer(txtLen) );
            strExp.ReleaseBuffer();
            
            if (strExp.Find("-->") != -1)
            {
                m_MsgBox.DeleteString(curSel + 1);
            }
            else break;
        }
    }
}

//	Clear contents of listbox and release TAPI objects
void CTapi3Dlg::OnClear() 
{
    CTapiEvent* pEvent;

	for(int i=0; i < m_MsgBox.GetCount(); i++)
	{
		pEvent = (CTapiEvent*) m_MsgBox.GetItemDataPtr(i);
		if (pEvent != NULL)
			delete pEvent;
	}

	m_MsgBox.ResetContent();	
}

//	Clear contents of init listbox 
void CTapi3Dlg::OnClearInit() 
{
	CTapiEvent* pEvent;
	for(int i=0; i < m_MsgBoxInit.GetCount(); i++)
	{
		pEvent = (CTapiEvent*)m_MsgBoxInit.GetItemDataPtr(i);
		if (pEvent != NULL)
			delete pEvent;
	}

	m_MsgBoxInit.ResetContent();	
}

//	Expands all events presentation
void CTapi3Dlg::OnExpand()
{
    CString str, strExp;
    
    for ( int index = 0; index < m_MsgBox.GetCount(); index++)
    {
        int txtLen = m_MsgBox.GetTextLen(index);

	    CTapiEvent *p = (CTapiEvent*)m_MsgBox.GetItemDataPtr(index);

        if ( p != NULL)
        {
            m_MsgBox.GetText( index, str.GetBuffer(txtLen) );
            str.ReleaseBuffer();

            if ( str[0] == '+' )
            {
                // expand message and change leading '+' to '-'
                str.SetAt(0, '-');

                // remove old item and insert new one
                m_MsgBox.DeleteString(index);
                m_MsgBox.InsertString(index, str); 
        
                m_MsgBox.SetItemDataPtr(index, p);
		        p->Dump(index+1);	    
            }
        }
    }
}

//	sum up all events presentation
void CTapi3Dlg::OnCollapse()
{
    CString str, strExp;
    
    for ( int index = 0; index < m_MsgBox.GetCount(); index++)
    {
        int txtLen = m_MsgBox.GetTextLen(index);

	    CTapiEvent *p = (CTapiEvent*)m_MsgBox.GetItemDataPtr(index);

        if ( p != NULL)
        {
            m_MsgBox.GetText( index, str.GetBuffer(txtLen) );
            str.ReleaseBuffer();

            if ( str[0] == '-' )
            {        
                // squeeze message and change leading '-' to '+'
                str.SetAt(0, '+');

                // remove old item and insert new one
                m_MsgBox.DeleteString(index);
                m_MsgBox.InsertString(index, str); 
                m_MsgBox.SetItemDataPtr(index, p);

                // curSel is zero based. That is why 2
                while ( index + 2 <= m_MsgBox.GetCount())
                {            
                    txtLen = m_MsgBox.GetTextLen(index + 1);
                    m_MsgBox.GetText( index + 1, strExp.GetBuffer(txtLen) );
                    strExp.ReleaseBuffer();
            
                    if (strExp.Find("-->") != -1)
                    {
                        m_MsgBox.DeleteString(index + 1);
                    }
                    else break;
                }
            }
        }
    }
}

void CTapi3Dlg::OnSelchangeExtnCall() 
{
	// Callback when controlling exten is changed/selected
    if (m_pTEngine) delete m_pTEngine; 
	m_pTEngine = new CTelephonyEngine();

    int nIndex = m_ExtnList.GetCurSel();
    CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);

	if (m_pTEngine && pAddr) 
    {        
        // Initialize Telephony Engine with caller's address
        m_pTEngine->Init(pAddr->GetDialableAddr(), pAddr->GetDialableAddr(), "");
    }

    GetDlgItem(IDM_MAKE_CALL)->EnableWindow(true);
}

//	Make a call to an extension/number
void CTapi3Dlg::OnMakeCall() 
{
    int nIndex = m_ExtnCall.GetCurSel();
    CTAPIAddr* pAddrCalled = CTAPIAddr::GetAddrAt(nIndex);

    nIndex = m_ExtnList.GetCurSel ();
    CTAPIAddr* pAddrCaller = CTAPIAddr::GetAddrAt(nIndex);

    if (pAddrCaller != NULL)
        m_pTEngine->Init(pAddrCaller->GetDialableAddr(), pAddrCaller->GetDialableAddr(), "" );

	if (m_pTEngine && pAddrCalled)
	{
		m_pTEngine->MakeCall(pAddrCalled->GetDialableAddr());
	}	
}

void CTapi3Dlg::OnAnswerCall()
{
    if ((m_pCall != NULL) && m_pCallersBasicCall != NULL && m_pTEngine) 
    {
        if (m_pTEngine->AnswerCall(m_pCall))
        {
            GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(false);
        }
    }
}

void CTapi3Dlg::OnHold()
{
    if ((m_pCall != NULL) && m_pCallersBasicCall != NULL && m_pTEngine)
    {
        if(m_pTEngine->HoldCall(m_pCallersBasicCall))
        {
            m_pCallOnHold = m_pCallersBasicCall;
            m_pCallOnHold->AddRef();

            m_pCalledOnHold = m_pCall;
            m_pCalledOnHold->AddRef();

            m_pCallersBasicCall->Release();
            m_pCallersBasicCall = NULL;

            m_pCall->Release();
            m_pCall = NULL;

            m_lastOnHold = m_lastCalled;
        }
    }
}

void CTapi3Dlg::OnUnHold()
{    
    if ((m_pCallOnHold != NULL) && m_pTEngine)
    {
        if (m_pTEngine->UnHoldCall(m_pCallOnHold))
        {
            ITBasicCallControl* pBCC;
            ITBasicCallControl* pBCCcalled;
            GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(false);
            pBCC = m_pCallOnHold;
            pBCCcalled = m_pCalledOnHold;
            
            pBCC->AddRef();
            pBCCcalled->AddRef();

            m_pCallOnHold = m_pCallersBasicCall;
            m_pCallersBasicCall = pBCC;

            m_pCalledOnHold = m_pCall;
            m_pCall = pBCCcalled;

            pBCC->Release();
            pBCCcalled->Release();
            pBCC = NULL;
        }
    }
}

void CTapi3Dlg::OnSwapHold()     
{    
    if (m_pCallersBasicCall != NULL && m_pCallOnHold != NULL )
    {
        CString temp;
        ITBasicCallControl* pBCC;            
        ITBasicCallControl* pBCCcalled;
        m_pCallersBasicCall->SwapHold(m_pCallOnHold);        

        pBCC = m_pCallOnHold;
        pBCCcalled = m_pCalledOnHold;

        pBCC->AddRef();
        pBCCcalled->AddRef();

        m_pCallOnHold = m_pCallersBasicCall;    
        m_pCallersBasicCall = pBCC; 

        m_pCalledOnHold = m_pCall;
        m_pCall = pBCCcalled;

        temp = m_lastCalled;
        m_lastCalled = m_lastOnHold;
        m_lastOnHold = temp;
        
        pBCC->Release();
        pBCCcalled->Release();
        pBCC = NULL;
        pBCCcalled = NULL;
    }        
}

void CTapi3Dlg::OnDropCall()
{
    if ((m_pCall != NULL) && m_pTEngine)
    {
        m_pTEngine->DropCall(m_pCallersBasicCall);
    }
}

void CTapi3Dlg::OnParkCall()
{    
    if ((m_pCall != NULL) && m_pCallersBasicCall!=NULL && m_pTEngine)
    {        
        if (m_pTEngine->ParkCall(m_pCall))
        {
            
            m_pLastParked = m_lastCalled;
            GetDlgItem(IDM_PARK_CALL)->EnableWindow(false);
            GetDlgItem(IDM_UNPARK_CALL)->EnableWindow(true);     
        }
    }    
}

void CTapi3Dlg::OnUnparkCall()
{    
    if (m_pTEngine) delete m_pTEngine; 
	m_pTEngine = new CTelephonyEngine();

    if (!m_pLastParked.IsEmpty())
    {
        m_pTEngine->Init(m_pLastParked, m_pLastParked, ""); 
        
        if (m_pTEngine->UnparkCall())
        {
            GetDlgItem(IDM_UNPARK_CALL)->EnableWindow(false);
        }
    }
}

void CTapi3Dlg::OnBlindTransfer()
{
    int nIndex = m_ExtnCall.GetCurSel();
    CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);

    if (m_lastCalled == pAddr->GetDialableAddr())
    {
        ::MessageBox(0, "Choose another Target Extension !", "TAPI 3 - Test Harness", MB_OK|MB_ICONEXCLAMATION);
        return;
    }

    if (m_pTEngine) delete m_pTEngine; 
	m_pTEngine = new CTelephonyEngine();

	if (m_pTEngine && pAddr && m_pCallersBasicCall)
	{
		m_pTEngine->BlindTransfer(m_pCallersBasicCall, pAddr->GetDialableAddr());
	}	
}

void CTapi3Dlg::OnCallTransfer()  
{
    int nIndex = m_ExtnCall.GetCurSel();
    CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);
    ITBasicCallControl* pCall;

    if (m_lastCalled == pAddr->GetDialableAddr())
    {
        ::MessageBox(0, "Choose another Target Extension !", "TAPI 3 - Test Harness", MB_OK|MB_ICONEXCLAMATION);
        return;
    }

	if (m_pTEngine && pAddr && m_pCallersBasicCall && m_pCall)
	{
        if ((pCall = m_pTEngine->TransferCall(m_pCallersBasicCall, m_pCall, pAddr->GetDialableAddr(), m_lastCalled)) != NULL)
        {
            GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(true);
            GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(true);
            GetDlgItem(IDM_CALLTRANSFER)->EnableWindow(false);

            m_pTransferConsultCall = pCall;
//            m_pTransferConsultCall->AddRef();
        }
	}	
}

void CTapi3Dlg::OnTransferFinish()
{
	if (m_pTEngine)    
        if (m_pTEngine->FinishTransfer(true))                            
        {
            GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(false); 
            GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(false);                     
        }
}

void CTapi3Dlg::OnCallConference()
{
	if (m_pTEngine )
	{
        if( m_pTEngine->CreateConference())
        {
            GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(false); 
            GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(false); 
            GetDlgItem(IDM_ADDTOCONF)->EnableWindow(true);             
        }
	}	     
}

void CTapi3Dlg::OnAddToConference()
{
    int nIndex = m_ExtnCall.GetCurSel();
    CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);

	if (m_pTEngine && pAddr)
	{
        m_pTEngine->AddToConference(pAddr->GetDialableAddr());
        GetDlgItem(IDM_REMOVEFROMCONF)->EnableWindow(true);         
	}	
}

void CTapi3Dlg::OnRemoveFromConference()
{
    int nIndex = m_ExtnCall.GetCurSel();
    CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);

	if (m_pTEngine && pAddr)
	{
        m_pTEngine->RemoveFromConference(pAddr->GetDialableAddr(), m_pCallInfo);
	}	
}
    

⌨️ 快捷键说明

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