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

📄 tapi3dlg.cpp

📁 基于Tapi 3.0的软电话源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        m_pCall = NULL;
        isRealDisc = true;
    }

    if (m_pCallInfo != NULL && pCall == m_pCallersBasicCall)
    {
		TRACE("ReleaseTheCall CallInfo (%X) --\n",(int)m_pCallInfo);
        m_pCallInfo->Release();
        m_pCallInfo = NULL;
        isRealDisc = true;
    }

    if (m_pCallOnHold != NULL && pCall == m_pCallOnHold)
    {
		TRACE("ReleaseTheCall Call (%X) --\n",(int)m_pCallOnHold);
        m_pCallOnHold->Release();
        m_pCallOnHold = NULL;
        isRealDisc = true;
    }

    if (m_pCalledOnHold != NULL && pCall == m_pCalledOnHold)
    {
		TRACE("ReleaseTheCall Call (%X) --\n",(int)m_pCalledOnHold);
        m_pCalledOnHold->Release();
        m_pCalledOnHold = NULL;
        isRealDisc = true;
    }

    if (m_pCallersBasicCall != NULL && pCall == m_pCallersBasicCall)
    {
		TRACE("ReleaseTheCall Call (%X) --\n",(int)m_pCallersBasicCall);
        m_pCallersBasicCall->Release();
        m_pCallersBasicCall = NULL;
        isRealDisc = true;
    }

/*    if (m_pTransferConsultCall != NULL && pCall == m_pTransferConsultCall)
    {
        m_pTransferConsultCall->Release();
        m_pTransferConsultCall = NULL;
        
        isRealDisc = false;
    }
*/

    if (!isRealDisc) 
        return;


    GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(false); 
    GetDlgItem(ID_CALLCONTROL_DROPCALL)->EnableWindow(false);     
    GetDlgItem(ID_CALLCONTROL_HOLDCALL)->EnableWindow(false);    
    GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(false);    
    GetDlgItem(IDM_CALLTRANSFER)->EnableWindow(false);
    GetDlgItem(IDM_PARK_CALL)->EnableWindow(false);  
    GetDlgItem(IDM_BLIND_TRANSFER)->EnableWindow(false);
    GetDlgItem(IDM_SWAP_HOLD)->EnableWindow(false); 
}

BEGIN_MESSAGE_MAP(CTapi3Dlg, CDialog)	
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_COMMAND(IDM_EXIT, OnExit)
	ON_COMMAND(IDM_INIT_TAPI, OnInitTapi)
	ON_COMMAND(IDM_ABOUT, OnAbout)
	ON_BN_CLICKED(IDC_CLEAR, OnClear)
	ON_COMMAND(IDM_DEINIT_TAPI, OnDeinitTapi)
	ON_LBN_DBLCLK(IDC_MSGBOX, OnDblclkMsgbox)
	ON_CBN_SELCHANGE(IDC_EXTN_LIST, OnSelchangeExtnCall)
	ON_COMMAND(IDM_MAKE_CALL, OnMakeCall)
    ON_COMMAND(ID_CALLCONTROL_ANSWERCALL, OnAnswerCall)
    ON_COMMAND(ID_CALLCONTROL_HOLDCALL, OnHold) 
    ON_COMMAND(ID_CALLCONTROL_UNHOLDCALL, OnUnHold)	
    ON_COMMAND(ID_CALLCONTROL_DROPCALL, OnDropCall)	
    ON_COMMAND(IDM_PARK_CALL, OnParkCall) 
    ON_COMMAND(IDM_UNPARK_CALL, OnUnparkCall) 
    ON_COMMAND(IDM_CALLCONFERENCE, OnCallConference)
    ON_COMMAND(IDM_ADDTOCONF, OnAddToConference)
    ON_COMMAND(IDM_REMOVEFROMCONF, OnRemoveFromConference)
    ON_COMMAND(IDM_CALLTRANSFER, OnCallTransfer)  
    ON_COMMAND(IDM_BLIND_TRANSFER, OnBlindTransfer)
    ON_COMMAND(IDM_SWAP_HOLD, OnSwapHold)  
    ON_COMMAND(IDM_TRANSFER_FINISH, OnTransferFinish)
    ON_COMMAND(IDM_EXPAND, OnExpand)	
    ON_COMMAND(IDM_COLLAPSE, OnCollapse)	
	ON_MESSAGE(WM_TAPI_EVENT, OnTAPIEvent)	// My own user message for TAPI event
END_MESSAGE_MAP()

// CTapi3Dlg message handlers
BOOL CTapi3Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	// Intialises the OLE library
	AfxOleInit();

    GetDlgItem(IDM_MAKE_CALL)->EnableWindow(false);
    GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(false);
    GetDlgItem(ID_CALLCONTROL_DROPCALL)->EnableWindow(false);
    GetDlgItem(ID_CALLCONTROL_HOLDCALL)->EnableWindow(false);
    GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(false);
    GetDlgItem(IDM_INIT_TAPI)->EnableWindow(true);
    GetDlgItem(IDM_DEINIT_TAPI)->EnableWindow(false);
    GetDlgItem(IDM_EXPAND)->EnableWindow(false);
    GetDlgItem(IDM_COLLAPSE)->EnableWindow(false);
    GetDlgItem(IDC_CLEAR)->EnableWindow(false);
    GetDlgItem(IDM_CALLTRANSFER)->EnableWindow(false);
    GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(false); 
    GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(false);
    GetDlgItem(IDM_PARK_CALL)->EnableWindow(false);     
    GetDlgItem(IDM_UNPARK_CALL)->EnableWindow(false);     
    GetDlgItem(IDM_BLIND_TRANSFER)->EnableWindow(false);    
    GetDlgItem(IDM_SWAP_HOLD)->EnableWindow(false); 
    GetDlgItem(IDM_ADDTOCONF)->EnableWindow(false);
    GetDlgItem(IDM_REMOVEFROMCONF)->EnableWindow(false);        

	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CTapi3Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.
void CTapi3Dlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CTapi3Dlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CTapi3Dlg::OnCancel() 
{
	// Shutdown TAPI
	OnDeinitTapi();

	// Close the dialog
	CDialog::OnCancel();
}

void CTapi3Dlg::OnOK() 
{
	// Override OnOK to do nothing
}

void CTapi3Dlg::OnExit() 
{
	// This is same as OnCancel
	OnCancel();
}

void CTapi3Dlg::OnInitTapi() 
{
	CWaitCursor wait;

	if (!m_bTAPIInit)
	{
		// Initialise TAPI3
		if (!m_TAPI3.Init())
		{
			PRINT_INIT(-1, 0, "Failed to initialise TAPI3!");
		}
		else
		{
            GetDlgItem(IDM_DEINIT_TAPI)->EnableWindow(true);
            GetDlgItem(IDM_EXPAND)->EnableWindow(true);
            GetDlgItem(IDM_COLLAPSE)->EnableWindow(true);
            GetDlgItem(IDC_CLEAR)->EnableWindow(true);
            GetDlgItem(IDM_INIT_TAPI)->EnableWindow(false);

			m_bTAPIInit=true;
			PopulateExtnCombo();
		}
	}
}

void CTapi3Dlg::OnDeinitTapi() 
{
	// Clear TAPI objects being displayed
    OnClear();
	OnClearInit();	

	// Delete the telephonyEngine
	if (m_pTEngine != NULL) 
    {
        delete m_pTEngine;
        m_pTEngine = NULL;
    }

    // if there is still a call,
    // release it
    //
    ReleaseTheCall(NULL);

	// Deinitialise TAPI3
	if (m_bTAPIInit)
	{
		m_TAPI3.DeInit();
		m_bTAPIInit = false;
        ClearExtCombo();
        GetDlgItem(IDM_INIT_TAPI)->EnableWindow(true);
        GetDlgItem(IDM_DEINIT_TAPI)->EnableWindow(false);
        GetDlgItem(IDM_EXPAND)->EnableWindow(false);
        GetDlgItem(IDM_COLLAPSE)->EnableWindow(false);
        GetDlgItem(IDC_CLEAR)->EnableWindow(false);
        GetDlgItem(IDM_MAKE_CALL)->EnableWindow(false);
        GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(false);
        GetDlgItem(ID_CALLCONTROL_DROPCALL)->EnableWindow(false);
        GetDlgItem(ID_CALLCONTROL_HOLDCALL)->EnableWindow(false);
        GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(false);
        GetDlgItem(IDM_CALLTRANSFER)->EnableWindow(false);
        GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(false);
        GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(false);
        GetDlgItem(IDM_PARK_CALL)->EnableWindow(false);
        GetDlgItem(IDM_UNPARK_CALL)->EnableWindow(false); 
        GetDlgItem(IDM_BLIND_TRANSFER)->EnableWindow(false);
        GetDlgItem(IDM_SWAP_HOLD)->EnableWindow(false); 
        GetDlgItem(IDM_ADDTOCONF)->EnableWindow(false);
        GetDlgItem(IDM_REMOVEFROMCONF)->EnableWindow(false);    
	}    
}

void CTapi3Dlg::OnAbout() 
{
	// Open the about box
	CAboutDlg dlgAbout;
	dlgAbout.DoModal();
}

void CTapi3Dlg::OnTAPIEvent(WPARAM wParam, LPARAM lParam)
{
	TAPI_EVENT Type = (TAPI_EVENT)wParam;
	IDispatch *pEvent = (IDispatch*)lParam;

	int index;
	HRESULT hr;
	ITCallNotificationEvent* pCallNotificationEvent;
	
	switch(Type)
	{
	case TE_TAPIOBJECT:
		PRINT(-1, 0, "-TE_TAPIOBJECT");
		break;
	case TE_ADDRESS:
		PRINT(-1, 0, "-TE_ADDRESS");
		break;
	case TE_CALLNOTIFICATION:
	{
		// Store the event pointer into listbox
		index = PRINT(-1, 0, "+TE_CALLNOTIFICATION");
		CCallNotificationEvent* pTEvent = new CCallNotificationEvent(pEvent);
		SET_ITEM_DATA_PTR(index, pTEvent);

		hr = pEvent->QueryInterface(IID_ITCallNotificationEvent, (LPVOID*)&pCallNotificationEvent);
		if (hr == S_OK)
		{            
			HandleCallNotificationEvent(pCallNotificationEvent);
			pCallNotificationEvent->Release();
		}
		else
		{
			PRINT_INIT(-1, 0, "Failed to obtain ITCallNotificationEvent Interface, hr=%x", hr);
		}
	}
	break;
	case TE_CALLSTATE:
	{
		// Store the event pointer into listbox
		index = PRINT(-1, 0, "+TE_CALLSTATE");
		CCallStateEvent* pTEvent = new CCallStateEvent(pEvent);
		SET_ITEM_DATA_PTR(index, pTEvent);

		ITCallStateEvent* pCallStateEvent;
		hr = pEvent->QueryInterface(IID_ITCallStateEvent, (LPVOID*)&pCallStateEvent);
		if (hr == S_OK)
		{
			HandleCallStateEvent(pCallStateEvent);
			pCallStateEvent->Release();
		}
		else
		{
			PRINT_INIT(-1, 0, "Failed to obtain ITCallStateEvent Interface, hr=%x", hr);
		}
	}
	break;
	case TE_CALLMEDIA:
		PRINT(-1, 0, "-TE_CALLMEDIA");
		break;
	case TE_CALLHUB:
	{
		// Store the event pointer into listbox
		index = PRINT(-1, 0, "+TE_CALLHUB");			
		CCallHubEvent* pTEvent = new CCallHubEvent(pEvent);
		SET_ITEM_DATA_PTR(index, pTEvent);	

		ITCallHubEvent* pCallHubEvent;
		hr = pEvent->QueryInterface(IID_ITCallHubEvent, (LPVOID*)&pCallHubEvent);
		if (hr == S_OK)
		{
			//HandleCallHubEvent(pCallHubEvent);
			pCallHubEvent->Release();
		}
		else
		{
			PRINT_INIT(-1, 0, "Failed to obtain ITCallHubEvent Interface, hr=%x", hr);
		}
	}
	break;
	case TE_CALLINFOCHANGE:
	{
		index = PRINT(-1, 0, "+TE_CALLINFOCHANGE");
		CCallInfoChangeEvent* pTEvent = new CCallInfoChangeEvent(pEvent);
        
		SET_ITEM_DATA_PTR(index, pTEvent);	
	}
	break;
	case TE_PRIVATE:
		PRINT(-1, 0, "-TE_PRIVATE");
		break;
	case TE_REQUEST:
		PRINT(-1, 0, "-TE_REQUEST");
		break;
	case TE_AGENT:
		PRINT(-1, 0, "-TE_AGENT");
		break;
	case TE_AGENTSESSION:
		PRINT(-1, 0, "-TE_AGENTSESSION");
		break;
	case TE_QOSEVENT:
		PRINT(-1, 0, "-TE_QOSEVENT");
		break;
	case TE_AGENTHANDLER:
		PRINT(-1, 0, "-TE_AGENTHANDLER");
		break;
	case TE_ACDGROUP:
		PRINT(-1, 0, "-TE_ACDGROUP");
		break;
	case TE_QUEUE:
		PRINT(-1, 0, "-TE_QUEUE");
		break;
	case TE_DIGITEVENT:
		PRINT(-1, 0, "-TE_DIGITEVENT");
		break;
	case TE_GENERATEEVENT:
		PRINT(-1, 0, "-TE_GENERATEEVENT");
		break;
	default:
		PRINT(-1, 0, "-Unknown event type!");
		break;
	}

	// Done with message so release it
	pEvent->Release();
}

void CTapi3Dlg::OnDblclkMsgbox() 

⌨️ 快捷键说明

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