亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tapi3dlg.cpp

?? 基于Tapi 3.0的軟電話源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//--------------------------------------------------------------------------------------
//  Copyright (c) 2002 Avaya Global SME Solutions 
//--------------------------------------------------------------------------------------
//  Project name: TAPI 3 Test Harness
//  Module file : Tapi3Dlg.cpp
//  Compiler    : Visual C++ 6.0
//--------------------------------------------------------------------------------------
//  Description : In this module behaviour of dialog is defined. This module handles button  
//                clicks, enabling/disabling buttons, receiving TAPI3 events, printing 
//                event messages, handles double click in message list box in terms of 
//                expanding TAPI 3 event information or suming up that info. In this module Call 
//                object pointers are extracted from received TAPI3 events, ...
//--------------------------------------------------------------------------------------

#include "stdafx.h"
#include "Tapi3app.h"
#include "Tapi3Dlg.h"
#include "TapiEvent.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include <afxwin.h>

const DWORD MAXTERMINALS = 5;

// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

	enum { IDD = IDD_ABOUTBOX };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:

    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()

// CTapi3Dlg dialog
CTapi3Dlg::CTapi3Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTapi3Dlg::IDD, pParent)
{
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	m_bTAPIInit = false;
	m_pTEngine = NULL;
    m_pCall = NULL;
    m_pCallersBasicCall = NULL;
    m_pCallInfo = NULL;
    m_pCallOnHold = NULL;
    m_pCalledOnHold = NULL;
    m_pTransferConsultCall = NULL;

    m_lastCalled.Empty();
    m_lastOnHold.Empty();
    m_pLastParked.Empty();
}

void CTapi3Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTapi3Dlg)
	DDX_Control(pDX, IDC_EXTN_CALL, m_ExtnCall);
	DDX_Control(pDX, IDC_EXTN_LIST, m_ExtnList);
	DDX_Control(pDX, IDC_MSGBOX, m_MsgBox);
	DDX_Control(pDX, IDC_MSG_INIT, m_MsgBoxInit);

	//}}AFX_DATA_MAP
}

void CTapi3Dlg::SetItemDataPtr(int index, void* p)
{
	m_MsgBox.SetItemDataPtr(index, p);
}

int CTapi3Dlg::PrintMsg(int index, int level, char* Msg)
{
	// Debug function
	CString indent;
	for (int l = 0;  l < level; l++)
	{
		indent += _T("  -->");
	}
	indent += CString(Msg);
	int i = m_MsgBox.InsertString(index, indent);
	m_MsgBox.SetTopIndex(m_MsgBox.GetCount()-1);
	return i;
}

int CTapi3Dlg::PrintMsgInit(int index, int level, char* Msg)
{
	// Debug function
	CString indent;
	for (int l = 0;  l < level; l++)
	{
		indent += _T("  -->");
	}
	indent += CString(Msg);
	int i = m_MsgBoxInit.InsertString(index, indent);
	m_MsgBox.SetTopIndex(m_MsgBoxInit.GetCount()-1);
	return i;
}

void CTapi3Dlg::PopulateExtnCombo()
{
	CTAPIAddr* pAddr;
	for(int i=0; i < CTAPIAddr::GetAddrCount(); i++)
	{
		pAddr = CTAPIAddr::GetAddrAt(i);
		if (pAddr)
		{
			// Only interested in line supporting audio
			if (pAddr->GetSupportedMedia() | TAPIMEDIATYPE_AUDIO > 0)
			{                
				m_ExtnList.AddString(pAddr->GetDialableAddr());                
				m_ExtnCall.AddString(pAddr->GetDialableAddr());                
			}
		}
	}
	m_ExtnList.SetCurSel(0);
    m_ExtnCall.SetCurSel(0);

    OnSelchangeExtnCall(); 
}

void CTapi3Dlg::ClearExtCombo()
{
    m_ExtnList.ResetContent();
    m_ExtnCall.ResetContent();
}

void CTapi3Dlg::HandleCallStateEvent(ITCallStateEvent* pCallStateEvent)
{
    ITCallInfo* pCallInfo;
    ITBasicCallControl* pCall;
    HRESULT hr;

    CALL_STATE cs;

    pCallStateEvent->get_State( &cs ); 

    
    // get a call
    pCallStateEvent->get_Call( &pCallInfo );

    hr = pCallInfo->QueryInterface( IID_ITBasicCallControl, (void**)&pCall);

	if (hr != S_OK)
	{
		PRINT_INIT(-1, 0, "Failed to obtain IID_ITBasicCallControl Interface, hr=%x", hr);
	}

    pCallInfo->Release();
    // 

    switch(cs)        
    {        
        case CS_OFFERING:        
            // enable Aswering the call
            GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(true);
            GetDlgItem(ID_CALLCONTROL_DROPCALL)->EnableWindow(true);
            SaveAddressOfCalled(pCallStateEvent);            

            break;        
        case CS_DISCONNECTED:
        {
            DISCONNECTION_TYPE discType = GetDisconnectionType(pCallStateEvent);
                        
            //if ( discType != DT_CONSULTATION)
            ReleaseTheCall(pCall);

            if (discType == DT_CONFERENCE)
            {
                GetDlgItem(IDM_ADDTOCONF)->EnableWindow(false);
                GetDlgItem(IDM_REMOVEFROMCONF)->EnableWindow(false);
                GetDlgItem(ID_CALLCONTROL_DROPCALL)->EnableWindow(false); 
            }

            break;     
        }
        case CS_CONNECTED:              

            // When you do swap hold twice and hang up with the extension that was 
            // connected, call which was on hold will be automatically re-connected
            // (m_pCallOnHold)
            if ( m_pCall == NULL && pCall == m_pCallOnHold && m_pCallOnHold != NULL)
            {
                m_pCall = m_pCalledOnHold;
				TRACE("Call (%X) ++\n",(int)m_pCall);
                m_pCall->AddRef();

                m_pCallersBasicCall = pCall;
                
                // no more anything on hold
                m_pCallOnHold->Release();
                m_pCallOnHold = NULL;
                m_pCalledOnHold->Release();
                m_pCalledOnHold = NULL;

                m_lastCalled = m_lastOnHold;
            }

            if ( m_pCall == NULL && m_pCallersBasicCall != NULL && pCall != m_pCallersBasicCall)
            {
                m_pCall = pCall;
				TRACE("Call (%X) ++\n",(int)m_pCall);
                m_pCall->AddRef();
            }

            if ( m_pCallersBasicCall == NULL && m_pCall != NULL && pCall != m_pCall )
            {
                m_pCallersBasicCall = pCall;
				TRACE("Call (%X) ++\n",(int)m_pCallersBasicCall);
                m_pCallersBasicCall->AddRef();
            }

            GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(false); 

            if (m_pCall != NULL || m_pCallersBasicCall != NULL) 
            {
                GetDlgItem(ID_CALLCONTROL_HOLDCALL)->EnableWindow(true);
                GetDlgItem(IDM_PARK_CALL)->EnableWindow(true);                
                GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(false);                
                GetDlgItem(IDM_BLIND_TRANSFER)->EnableWindow(true);
                GetDlgItem(ID_CALLCONTROL_DROPCALL)->EnableWindow(true);

                if(!GetDlgItem(IDM_TRANSFER_FINISH)->IsWindowEnabled())
                    GetDlgItem(IDM_CALLTRANSFER)->EnableWindow(true);                            
            }

            if (m_pCall != NULL && m_pCallersBasicCall != NULL && m_pCallOnHold != NULL)
                GetDlgItem(IDM_SWAP_HOLD)->EnableWindow(true);    

            break;        
        case CS_HOLD:
            GetDlgItem(ID_CALLCONTROL_HOLDCALL)->EnableWindow(false);
            GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(true);
            break;
        case CS_INPROGRESS:
            GetCallersBasicCall(pCallStateEvent);
            break;
        default:        
            break;        
    }  
    
    pCall->Release();
}

void CTapi3Dlg::SaveAddressOfCalled(ITCallStateEvent* pCallStateEvent)
{
    HRESULT hr;
    ITCallInfo* pCallInfo;

    hr = pCallStateEvent->get_Call(&pCallInfo);
    if (hr == S_OK)
    {
        CTAPIConn::GetDialableAddress(pCallInfo, m_lastCalled);

        pCallInfo->Release();
    }
}

DISCONNECTION_TYPE CTapi3Dlg::GetDisconnectionType(ITCallStateEvent* pCallStateEvent)
{
    HRESULT hr;
    ITCallInfo* pCallInfo;
    CString m_lastDisconnected;
    DISCONNECTION_TYPE rType = DT_NORMAL;

    hr = pCallStateEvent->get_Call(&pCallInfo);
    if (hr == S_OK)
    {
        CTAPIConn::GetDialableAddress(pCallInfo, m_lastDisconnected);

        if (m_pTEngine)
        {
            rType = m_pTEngine->Disconnected( m_lastDisconnected );

            if (rType == DT_TRANSFERING )
            {
                m_pTEngine->FinishTransfer(false);                            
                GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(false);     
                GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(false);      
                GetDlgItem(IDM_ADDTOCONF)->EnableWindow(false);                 
                GetDlgItem(IDM_REMOVEFROMCONF)->EnableWindow(false);                                    
            }
        }

        pCallInfo->Release();
    }

    return rType;
}

void CTapi3Dlg::GetCallersBasicCall(ITCallStateEvent* pCallStateEvent)
{
    HRESULT hr;
    ITBasicCallControl* pCall;

	if (m_pCallInfo)
	{
		TRACE("GetCallersBasicCall CallInfo(%X) --\n",(int)m_pCallInfo);
		m_pCallInfo->Release();
		m_pCallInfo = NULL;
	}
    hr = pCallStateEvent->get_Call(&m_pCallInfo);
	TRACE("GetCallersBasicCall CallInfo(%X) ++\n",(int)m_pCallInfo);

    if (hr == S_OK)
    {
        CString sAddr;
        CTAPIConn::GetDialableAddress(m_pCallInfo, sAddr); 

        // initialize TelephonyEngine with caller's address
        if(m_pTEngine)
            m_pTEngine->Init(sAddr, sAddr, "");

    }

    if (hr == S_OK)
    {
        hr = m_pCallInfo->QueryInterface(IID_ITBasicCallControl, (void**)&pCall);                
		TRACE("GetCallersBasicCall Call (%X) ++\n",(int)pCall);

	    if (hr != S_OK)
	    {
		    PRINT_INIT(-1, 0, "Failed to obtain IID_ITBasicCallControl Interface, hr=%x", hr);
	    }
        else
        {
            if (m_pTransferConsultCall != pCall)
			{
				if (m_pCallersBasicCall)
				{
					TRACE("GetCallersBasicCall Call (%X) --\n",(int)m_pCallersBasicCall);
					m_pCallersBasicCall->Release();
				}

				m_pCallersBasicCall = pCall;
			}
			else
			{
				TRACE("GetCallersBasicCall Call (%X) --\n",(int)pCall);
				pCall->Release();
			}
        }
    }
}

void CTapi3Dlg::HandleCallNotificationEvent(ITCallNotificationEvent* pCallNotificationEvent)
{
    CALL_NOTIFICATION_EVENT cne;
    HRESULT hr;
    ITCallInfo* pCallInfo;

    // check to see if we own the call
    pCallNotificationEvent->get_Event( &cne );

    if (cne != CNE_OWNER)
    {
        return;
    }
    
    // get a call
    pCallNotificationEvent->get_Call( &pCallInfo );

	if (m_pCall != NULL)
	{
		TRACE("HandleCallNotificationEvent Call (%X) --\n",(int)m_pCall);
		m_pCall->Release();
		m_pCall = NULL;
		PRINT_INIT(-1, 0, "m_pCall not NULL");
	}

    hr = pCallInfo->QueryInterface( IID_ITBasicCallControl, (void**)&m_pCall);
	TRACE("HandleCallNotificationEvent Call (%X) ++\n",(int)m_pCall);

	if (hr != S_OK)
	{
		PRINT_INIT(-1, 0, "Failed to obtain IID_ITBasicCallControl Interface, hr=%x", hr);
	}

    pCallInfo->Release();

    return;
}

void CTapi3Dlg::ReleaseTheCall(ITBasicCallControl* pCall)
{
    bool isRealDisc = false;

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产美女主播视频一区| 欧美猛男超大videosgay| 日本乱人伦aⅴ精品| 欧美一卡二卡在线观看| 国产精品国产精品国产专区不片| 日本美女一区二区三区| 色综合咪咪久久| 久久久噜噜噜久久中文字幕色伊伊| 一区2区3区在线看| 岛国av在线一区| 日韩一区二区精品在线观看| 日韩美女视频一区二区| 国产成人午夜视频| 精品久久久久久久久久久久久久久久久| 日韩毛片在线免费观看| 成人午夜免费视频| 国产色产综合色产在线视频| 视频一区二区欧美| 在线观看日韩精品| 亚洲日本在线视频观看| 成人伦理片在线| 久久精品亚洲精品国产欧美kt∨| 六月丁香综合在线视频| 91精品麻豆日日躁夜夜躁| 一区二区三区四区亚洲| 色综合一区二区| 亚洲欧洲一区二区三区| 99久久99久久综合| 国产精品国产三级国产aⅴ入口 | 欧美区在线观看| 亚洲精品免费在线播放| 色综合久久综合网| 亚洲综合一区二区| 欧美亚洲另类激情小说| 午夜影院在线观看欧美| 欧美三级日韩三级| 日韩制服丝袜av| 日韩一区二区在线看| 蜜桃久久久久久| 精品国产不卡一区二区三区| 国内外成人在线视频| 久久久九九九九| 成人午夜激情在线| 一区二区中文视频| 欧美午夜电影一区| 免费看日韩精品| 久久亚洲一级片| 成人国产精品免费网站| 日韩伦理免费电影| 7777精品伊人久久久大香线蕉完整版 | 久久伊人蜜桃av一区二区| 国产麻豆91精品| 国产精品网站一区| 91蝌蚪国产九色| 亚洲狠狠爱一区二区三区| 欧美日韩成人综合在线一区二区| 麻豆精品在线视频| 国产欧美日韩亚州综合| 91日韩精品一区| 全部av―极品视觉盛宴亚洲| 久久人人爽爽爽人久久久| 99精品视频免费在线观看| 香蕉影视欧美成人| 1024成人网| 91福利视频在线| 激情综合色丁香一区二区| 中文一区在线播放| 欧美精品国产精品| 国产sm精品调教视频网站| 一区二区三区四区不卡视频| 欧美大尺度电影在线| 91在线观看高清| 蜜桃av一区二区| 亚洲三级理论片| 精品国精品国产| 欧美中文字幕一区| 国产91高潮流白浆在线麻豆| 性感美女久久精品| 国产精品福利一区二区| 在线播放欧美女士性生活| 不卡的电视剧免费网站有什么| 五月激情六月综合| 亚洲欧洲一区二区在线播放| 精品精品欲导航| 欧美人妖巨大在线| 99精品视频一区| 国产老妇另类xxxxx| 丝袜美腿亚洲综合| 国产真实乱子伦精品视频| 一区二区三区日韩精品视频| 久久久亚洲高清| 日韩午夜激情电影| 欧美日韩电影一区| 欧美在线观看视频在线| 国产sm精品调教视频网站| 精品系列免费在线观看| 日韩精品欧美精品| 亚洲福利视频三区| 亚洲精品美国一| 日韩美女精品在线| 中文字幕亚洲成人| 国产精品青草久久| 欧美极品美女视频| 国产三级精品三级在线专区| 精品国产免费视频| 亚洲精品一区二区三区在线观看| 欧美日韩在线不卡| 欧美色倩网站大全免费| 欧亚一区二区三区| 日本精品裸体写真集在线观看| www.综合网.com| 99麻豆久久久国产精品免费| 国产成人精品午夜视频免费| 国产传媒久久文化传媒| 国产麻豆欧美日韩一区| 国产一区二区剧情av在线| 久99久精品视频免费观看| 久久精品国产色蜜蜜麻豆| 久久成人免费网站| 久久爱另类一区二区小说| 美女网站在线免费欧美精品| 美女网站色91| 国产精品综合二区| 国产成人免费视频| 99免费精品在线| 欧美亚洲自拍偷拍| 欧美日本一道本在线视频| 在线观看91精品国产麻豆| 欧美一区二区日韩| 久久精品男人的天堂| 中文在线一区二区| 亚洲视频一二区| 性做久久久久久久免费看| 日本视频一区二区| 国产精品羞羞答答xxdd| 不卡电影免费在线播放一区| 日本道色综合久久| 欧美一区二区在线免费播放| 精品卡一卡二卡三卡四在线| 中文字幕欧美国产| 一区二区三区日韩欧美精品| 丝袜美腿一区二区三区| 欧美猛男超大videosgay| 欧美精品1区2区| 久久久精品人体av艺术| 亚洲三级在线看| 青青草原综合久久大伊人精品| 国产伦理精品不卡| 欧亚洲嫩模精品一区三区| 日韩精品一区二区三区三区免费 | 国产精品灌醉下药二区| 亚洲一区二区在线免费看| 乱中年女人伦av一区二区| 99精品欧美一区二区三区综合在线| 欧美另类高清zo欧美| 久久久国产精品午夜一区ai换脸| 亚洲激情综合网| 国内精品国产成人| 欧美日韩免费高清一区色橹橹| 久久久99久久精品欧美| 亚洲精品中文字幕乱码三区| 激情综合色播五月| 欧美日韩一级片网站| 国产欧美1区2区3区| 日韩激情视频在线观看| 91一区一区三区| 久久先锋影音av鲁色资源网| 亚洲主播在线播放| 不卡av电影在线播放| 欧美mv日韩mv| 亚洲va天堂va国产va久| 成人免费高清在线| 亚洲精品一区二区三区福利| 一区二区三区四区视频精品免费 | 欧美不卡一二三| 亚洲成人手机在线| 91免费在线播放| 欧美高清在线一区| 韩国欧美一区二区| 日韩三级在线免费观看| 亚洲第一成年网| 色94色欧美sute亚洲线路一ni | 欧美日韩国产乱码电影| 欧美激情综合在线| 国产激情偷乱视频一区二区三区 | 精品成人在线观看| 天天色综合成人网| 91国产成人在线| 亚洲色图20p| av亚洲精华国产精华| 亚洲国产高清不卡| 国产成人午夜99999| 精品久久人人做人人爱| 日一区二区三区| 欧美另类一区二区三区| 亚洲国产另类精品专区| 91高清视频在线| 亚洲国产成人porn| 欧美另类z0zxhd电影| 日韩在线卡一卡二|