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

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

?? tapiphonedlg.cpp

?? 用VC++編的電話自動應答系統,由系統自動處理用戶的呼叫,通過語音給出用戶的各種操作提示,并根據用戶的操作來執行相應的命令
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// tapiPhoneDlg.cpp : 實現文件
//

#include "stdafx.h"
#include "tapiPhone.h"
#include "tapiPhoneDlg.h"
#include "tapiPhoneSetupDlg.h"
#include "control.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 用于應用程序“關于”菜單項的 CAboutDlg 對話框

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// 對話框數據
	enum { IDD = IDD_ABOUTBOX };

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

// 實現
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()


// CtapiPhoneDlg 對話框

CtapiPhoneDlg::CtapiPhoneDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CtapiPhoneDlg::IDD, pParent)
	, m_AutoAnswer(FALSE)
	, m_valStcMsg(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_valEdtNum = "";	
	m_valCallerNum = "呼入方號碼: 當前無呼叫";
}

void CtapiPhoneDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_BTN_DISCONNECT, m_btDisconnect);
	DDX_Control(pDX, IDC_BTN_CALL, m_btCall);
	DDX_Control(pDX, IDC_BTN_CONFIG, m_btConfig);
	DDX_Control(pDX, IDC_BTN_PICKUP, m_btPickup);
	DDX_Check(pDX, IDC_CHK_AUTO, m_AutoAnswer);
	DDX_Text(pDX, IDC_STC_STATUS, m_valStcMsg);
	DDX_Text(pDX, IDC_EDIT_NUMBER, m_valEdtNum);
	DDX_Text(pDX, IDC_STATIC_, m_valCallerNum);
	DDX_Control(pDX, IDC_STC_IMAGE, m_stcImage);
}

BEGIN_MESSAGE_MAP(CtapiPhoneDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()

	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_BTN_PICKUP, OnBnClickedBtnPickup)
	//用戶自定義消息響應函數
	ON_MESSAGE(WM_PRIVATETAPIEVENT, OnTapiEvent)
	ON_BN_CLICKED(IDC_CHK_AUTO, OnBnClickedChkAuto)
	ON_BN_CLICKED(IDC_BTN_DISCONNECT, OnBnClickedBtnDisconnect)
	ON_BN_CLICKED(IDC_BTN_CALL, OnBnClickedBtnCall)
	ON_BN_CLICKED(IDC_BTN_EXIT, OnBnClickedBtnExit)
	ON_BN_CLICKED(IDC_BTN_CONFIG, OnBnClickedBtnConfig)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


// CtapiPhoneDlg 消息處理程序

BOOL CtapiPhoneDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 將\“關于...\”菜單項添加到系統菜單中。

	// IDM_ABOUTBOX 必須在系統命令范圍內。
	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);
		}
	}

	// 設置此對話框的圖標。當應用程序主窗口不是對話框時,框架將自動
	//  執行此操作
	SetIcon(m_hIcon, TRUE);			// 設置大圖標
	SetIcon(m_hIcon, FALSE);		// 設置小圖標

	// TODO:在此添加額外的初始化代碼
	//初始化TAPI,在此之前必需調用 AfxOleInit()初始化 COM
	//將窗口的句柄 m_hWnd 傳給 CTapi,使二者之間建立聯系

	m_Tapi.m_hWnd = this->m_hWnd;
	if( FAILED(m_Tapi.InitializeTapi()) )
	{
		MessageBox("致命錯誤:TAPI 初始化失敗!");
		return FALSE;
	}
	//
	// 初始化按鈕狀態
	//
	m_btCall.EnableWindow();
	m_btDisconnect.EnableWindow();
	m_btPickup.EnableWindow(FALSE);
	SetStatusMessage("準備就緒,等待電話呼入...");
	
//	HBITMAP hBitmap;
	
//	m_stcImage.SetBitmap(hBitmap);
	return TRUE;  // 除非設置了控件的焦點,否則返回 TRUE
}

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

// 如果向對話框添加最小化按鈕,則需要下面的代碼
// 來繪制該圖標。對于使用文檔/視圖模型的 MFC 應用程序,
// 這將由框架自動完成。

void CtapiPhoneDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于繪制的設備上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使圖標在工作矩形中居中
		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;

		// 繪制圖標
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//當用戶拖動最小化窗口時系統調用此函數取得光標顯示。
HCURSOR CtapiPhoneDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}


/////////////////////////////////////////////////////////////////////////////////////
// SetStatusMessage
//
// 顯示當前系統消息
/////////////////////////////////////////////////////////////////////////////////////
void CtapiPhoneDlg::SetStatusMessage(CString strMsg)
{
	m_valStcMsg = strMsg;
	UpdateData(FALSE);
}

/////////////////////////////////////////////////////////////////////////////////////
//
// 以下是用戶界面事件響應函數
//
/////////////////////////////////////////////////////////////////////////////////////
void CtapiPhoneDlg::OnBnClickedBtnPickup()
{
	// 
	// 接聽電話
	//
    SetStatusMessage("正在準備接聽...");

    if ( S_OK == m_Tapi.AnswerTheCall() )
    {
		SetStatusMessage("通話中");

		m_btDisconnect.EnableWindow();
		m_btPickup.EnableWindow(FALSE);
    }
    else
    {
		m_btPickup.EnableWindow(FALSE);
        MessageBox("沒有接聽成功!");
        SetStatusMessage("準備就緒,等待來電...");
    }
}

void CtapiPhoneDlg::OnBnClickedChkAuto()
{
	//
	// 自動接聽與手工接聽之間切換
	//
	UpdateData();
}

void CtapiPhoneDlg::OnBnClickedBtnDisconnect()
{
	//
	// 如果是電話另一方先掛斷電話,則 m_pCall 已經掛斷并且釋放
	// 此處不用再次掛斷
	//
    if ( m_Tapi.m_pCall != NULL )
    {
        SetStatusMessage("正在掛斷電話...");

        // 掛斷電話
        if (S_OK != m_Tapi.DisconnectTheCall())
        {
			MessageBox("掛斷電話失敗!");
		}
		else
		{
			m_btCall.EnableWindow();
			m_btPickup.EnableWindow(FALSE);
			m_valCallerNum = "呼入方號碼: 當前無呼叫";
			SetStatusMessage("準備就緒,正在等待電話呼入...");
		}
	}
}

void CtapiPhoneDlg::OnBnClickedBtnCall()
{
    //
    // 呼叫號碼
    //
    DWORD dwAddressType;
	BSTR  szAddressToCall;
	UpdateData();
	if( m_valEdtNum.GetLength() <= 2 )
		return;
	szAddressToCall = m_valEdtNum.AllocSysString();

	SetStatusMessage( "正在呼叫..." );
	dwAddressType = LINEADDRESSTYPE_PHONENUMBER ;
	
    // 開始呼叫
    if ( S_OK == m_Tapi.MakeTheCall(dwAddressType, szAddressToCall) )
    {
		m_btDisconnect.EnableWindow();
		m_btPickup.EnableWindow(FALSE);
		m_btCall.EnableWindow(FALSE);
    }
    else
    {
        MessageBox("呼叫失敗!");
    }

	SysFreeString(szAddressToCall);

//	m_Tapi.PreparePlay("Greeting.wav");
}

void CtapiPhoneDlg::OnBnClickedBtnExit()
{
	// 退出程序
	OnOK();
}

void CtapiPhoneDlg::OnBnClickedBtnConfig()
{
	// 把配置對話框中的數據傳入 
	CtapiPhoneSetupDlg SetupDlg;
	if(SetupDlg.DoModal() == IDOK)
	{
		m_Tapi.m_WelcomeFileName = SetupDlg.m_strFileName0;
		strFileName0 = SetupDlg.m_strFileName0;
		strFileName1 = SetupDlg.m_strFileName1;
		strFileName2 = SetupDlg.m_strFileName2;
		strPath = SetupDlg.m_strPath;
	}
}


///////////////////////////////////////////////////////////////////
// OnTapiEvent
//
// 這是真正的事件處理函數,當 UI 線程接收到 WM_PRIVATETAPIEVENT消息
// 時調用此函數,在 UI 線程中進行事件響應處理
//
///////////////////////////////////////////////////////////////////
LRESULT
CtapiPhoneDlg::OnTapiEvent(
						   WPARAM wp,
						   LPARAM lp
                           )
{
	TAPI_EVENT TapiEvent = (TAPI_EVENT)wp;
	IDispatch *pEvent = (IDispatch*) lp;
	
	if( TapiEvent == TE_DIGITEVENT )
		MessageBox("TE_DIGITEVENT");
	else if(TapiEvent == TE_GENERATEEVENT )
		MessageBox("TE_GENERATEEVENT");
	else if(TapiEvent == TE_GATHERDIGITS)
		MessageBox("TE_GATHERDIGITS");

	switch ( TapiEvent )
    {
        case TE_CALLNOTIFICATION:
        {
			//
            // TE_CALLNOTIFICATION: 程序發現一個呼入的電話
            //
			TRACE("Event:-----------TE_CALLNOTIFICATION----------Event\n");
			DoCallNotification(pEvent);
            break;
        }//TE_CALLNOTIFICATION
        
        case TE_CALLSTATE:
        {
            //
			// TE_CALLSTATE: 程序發現整個 Call 過程狀態有變化
			//
			TRACE("Event:-----------TE_CALLSTATE----------Event\n");
			DoCallState(pEvent);
            break;
        }//TE_CALLSTATE

        case TE_CALLMEDIA:
        {
			//
			// TE_CALLMEDIA:關于媒體的事件,如有某種媒體到達
			//
			TRACE("Event:-----------TE_CALLMEDIA----------Event\n");
			DoCallMedia(pEvent);
            break;    
        }//TE_CALLMEDIA  
		

		case TE_FILETERMINAL:
		{
            //
			// TE_FILETERMINAL:文件終端事件,只在 TAPI3.1 中支持
			//
			TRACE("Event:-----------TE_FILETERMINAL----------Event\n");
			DoFileEvent(pEvent);
			break;
		}//TE_FILETERMINAL

		case TE_DIGITEVENT:
		{
			//
			// TE_DIGIT:接受到按鍵事件
			//
			TRACE("Event:-----------TE_DIGITEVENT----------Event\n");
			DoDigitEvent(pEvent);
			break;
		}

		default:
			break;
    }    

    pEvent->Release(); // 因為在 CTAPIEventNotification::Event() 中調用過 AddRef

    return S_OK;

}

/////////////////////////////////////////////////////////////////////////////////////
// 處理 TE_NOTIFICATION 事件,有新電話打入時觸發此事件
// 功能:
//		1、獲取撥入方信息,主要是對方電話號碼或IP
//		2、獲取 ITBasicCallControl,存入 m_pCall,
//		3、更新用戶界面
// 注意:不能在此時就應答電話,應用程序應當等待 TE_CALLSTATE 事件觸發并判斷當前事件為
//		CS_OFFERING 時才可以。
/////////////////////////////////////////////////////////////////////////////////////
HRESULT CtapiPhoneDlg::DoCallNotification( IN IDispatch * pEvent)
{
	//
	//通過接口 ITCallNotificationEvent 可以獲得所有關于撥入事件的信息,這里主要用來得到 ITCallInfo
	//
    ITCallNotificationEvent         * pNotify;
	HRESULT hr;
            
    hr = pEvent->QueryInterface( IID_ITCallNotificationEvent, (void **)&pNotify );

    if (S_OK != hr)
    {
        MessageBox( "有電話乎入,但獲得接口 ITCallNotificationEvent 失敗!");
    }
    else
    {
		//
		//通過 ITCallInfo 獲得撥入方信息,如撥入方電話號碼等
		//
		CALL_PRIVILEGE          cp;
		ITCallInfo *            pCall;

		//
		// 得到 ITCallInfo 的指針
		//
		hr = pNotify->get_Call( &pCall );

		pNotify->Release();

		if ( SUCCEEDED(hr) )
		{
			//
			// 檢測我們對 call 是否擁有 owner 權限
			//
			hr = pCall->get_Privilege( &cp );

			if ( FAILED(hr) || (CP_OWNER != cp) )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品无人区卡一卡二卡三乱码免费卡| 日韩欧美一区二区免费| 北岛玲一区二区三区四区| 亚洲一区精品在线| 国产日产欧美一区| 欧美一级片在线观看| 欧美午夜电影在线播放| 国产91精品久久久久久久网曝门| 夜夜嗨av一区二区三区网页| 日本一区二区电影| 亚洲欧美中日韩| 亚洲欧美日韩系列| 91麻豆精东视频| 日本三级韩国三级欧美三级| 日韩一区二区在线观看视频播放| 成人在线综合网站| 国产一区欧美一区| 国产在线一区二区| 国产一区二区三区香蕉| 韩国精品久久久| 老鸭窝一区二区久久精品| 日韩经典中文字幕一区| 视频一区二区国产| 轻轻草成人在线| 青青草97国产精品免费观看无弹窗版| 亚洲成人激情自拍| 青青青伊人色综合久久| 麻豆精品视频在线| 国产伦精品一区二区三区免费迷| 久久99国产精品尤物| 国产尤物一区二区| 97超碰欧美中文字幕| 在线中文字幕一区二区| 51久久夜色精品国产麻豆| 欧美不卡在线视频| 日本一区二区动态图| 国产亚洲欧美一级| 亚洲黄色av一区| 久久99国产精品久久99| 高清视频一区二区| 欧美日韩一区二区三区不卡 | 国产69精品久久99不卡| 91首页免费视频| 日韩一区二区三区在线观看| 欧美—级在线免费片| 亚洲va韩国va欧美va精品| 福利一区二区在线| 欧美日韩高清影院| 国产精品少妇自拍| 美女脱光内衣内裤视频久久网站 | 欧美一区中文字幕| 国产精品久久久久一区二区三区共 | 日韩视频一区二区| 亚洲一区二区成人在线观看| 狠狠色丁香九九婷婷综合五月| 色噜噜狠狠色综合欧洲selulu| 欧美成人女星排名| 三级成人在线视频| 欧美性受xxxx黑人xyx性爽| 国产精品午夜在线| 国产精品99久久久久久宅男| 91精品中文字幕一区二区三区| 亚洲欧美另类综合偷拍| 成人免费视频免费观看| 亚洲精品一线二线三线 | 日日欢夜夜爽一区| 欧美成人精品二区三区99精品| 亚洲欧洲日本在线| 99re热这里只有精品免费视频| 国产丝袜美腿一区二区三区| 极品尤物av久久免费看| 精品国产乱码久久久久久老虎| 日韩精品一二三四| 日韩欧美中文字幕一区| 蜜臀久久99精品久久久画质超高清| 在线观看日韩av先锋影音电影院| 亚洲色图制服诱惑 | 国产.精品.日韩.另类.中文.在线.播放| 56国语精品自产拍在线观看| 日本不卡的三区四区五区| 日韩欧美一卡二卡| 国产不卡视频在线播放| 中文字幕一区二区视频| 精品视频色一区| 久久成人综合网| 欧美激情在线看| 色婷婷av久久久久久久| 日本亚洲欧美天堂免费| 久久久久久久av麻豆果冻| 成人激情图片网| 午夜亚洲福利老司机| 日韩精品一区二区三区中文不卡| 成人动漫在线一区| 日本在线不卡视频| 亚洲同性gay激情无套| 欧美绝品在线观看成人午夜影视| 国产精品一区二区黑丝| 亚洲宅男天堂在线观看无病毒| 日韩精品一区二区三区三区免费| 成人一区二区三区视频在线观看 | 久久九九久久九九| 欧美日韩高清一区二区| 成人av资源网站| 蜜桃av一区二区三区| 一区二区激情视频| 国产精品久久久久久久久免费相片| 欧美日韩一区久久| 91免费国产在线观看| 国产精品一品二品| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲视频一二三| 欧美激情一区二区三区在线| 91精品在线麻豆| 91国产精品成人| 99久久久久久| a美女胸又www黄视频久久| 国产精品一卡二| 国产一区二区三区最好精华液| 肉丝袜脚交视频一区二区| 亚洲成人免费视| 偷拍与自拍一区| 日韩高清一区在线| 日韩av一区二区三区四区| 午夜不卡在线视频| 热久久免费视频| 国内成人免费视频| 国产精品亚洲一区二区三区妖精| 国产成人免费视频网站高清观看视频| 老司机精品视频线观看86| 精品亚洲成a人| 东方欧美亚洲色图在线| 9久草视频在线视频精品| 色婷婷一区二区| 在线观看区一区二| 精品免费视频一区二区| 国产精品狼人久久影院观看方式| 国产精品无码永久免费888| 亚洲免费资源在线播放| 天天综合色天天| 国产精品亚洲午夜一区二区三区| jizz一区二区| 欧美日韩国产综合草草| 国产亚洲欧美色| 夜夜精品视频一区二区 | 首页欧美精品中文字幕| 国产在线播放一区| 欧美亚洲丝袜传媒另类| 亚洲精品一区二区三区99| 亚洲免费看黄网站| 国产一区二区三区黄视频| 在线观看视频一区二区| 久久久久久综合| 日本中文字幕一区二区有限公司| 成人三级伦理片| 日韩精品自拍偷拍| 亚洲午夜私人影院| 不卡视频一二三| 精品国产一区二区三区av性色| 亚洲精品国久久99热| 国产福利视频一区二区三区| 欧美一区二区成人6969| 亚洲妇熟xx妇色黄| 色悠久久久久综合欧美99| 国产亚洲美州欧州综合国| 免费观看30秒视频久久| 欧美福利电影网| 一区二区三区欧美| 99v久久综合狠狠综合久久| 久久久久久亚洲综合| 极品美女销魂一区二区三区| 欧美久久久久久久久久| 天堂一区二区在线免费观看| 色婷婷综合激情| 亚洲一区在线观看网站| 在线观看日产精品| 亚洲青青青在线视频| 色婷婷综合中文久久一本| 亚洲激情自拍偷拍| 欧美日韩mp4| 美女网站色91| 久久精品免视看| 99re热视频这里只精品| 亚洲一区二区三区三| 欧美午夜电影在线播放| 青青草成人在线观看| 欧美精品一区二区在线播放 | 国产精品久久久久影院色老大 | www.99精品| 午夜精品福利视频网站| 欧美成人伊人久久综合网| 久久97超碰国产精品超碰| 久久精品视频网| 91丝袜高跟美女视频| 日韩专区欧美专区| 国产女同性恋一区二区| 欧美色成人综合| 成人爽a毛片一区二区免费| 亚洲免费观看高清完整版在线观看| 56国语精品自产拍在线观看| 国产a视频精品免费观看|