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

📄 tapicaseview.cpp

📁 一个采用TAPI编程的电话拨号程序
💻 CPP
字号:
// TAPICaseView.cpp : implementation of the CTAPICaseView class
//

#include "stdafx.h"
#include "TAPICase.h"
#include "global.h"
#include "TAPI.h"
#include "TAPILine.h"
#include "TAPICaseDoc.h"
#include "TAPICaseView.h"

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

extern CTAPILine* myTAPILine;//引用外部变量
/////////////////////////////////////////////////////////////////////////////
// CTAPICaseView

IMPLEMENT_DYNCREATE(CTAPICaseView, CFormView)

BEGIN_MESSAGE_MAP(CTAPICaseView, CFormView)
	//{{AFX_MSG_MAP(CTAPICaseView)
	ON_BN_CLICKED(IDC_DIAL, OnDial)
	ON_BN_CLICKED(IDC_DISCONNECTED, OnDisconnected)
	ON_BN_CLICKED(IDC_LINECONFIGURE, OnLineconfigure)
	ON_BN_CLICKED(IDC_DIALPROPERTY, OnDialproperty)
	ON_CBN_SELCHANGE(IDC_LINE, OnSelchangeLine)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTAPICaseView construction/destruction

CTAPICaseView::CTAPICaseView()
	: CFormView(CTAPICaseView::IDD)
{
	//{{AFX_DATA_INIT(CTAPICaseView)
	m_strLine = _T("");
	m_strPhoneNumber = _T("1111111");
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CTAPICaseView::~CTAPICaseView()
{
}

void CTAPICaseView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTAPICaseView)
	DDX_Control(pDX, IDC_PROGRESS, m_ctrlProgress);
	DDX_Control(pDX, IDC_DIALICON, m_ctrlIcon);
	DDX_Control(pDX, IDC_DIAL, m_ctrlDial);
	DDX_Control(pDX, IDC_DISCONNECTED, m_ctrlDisconnect);
	DDX_Control(pDX, IDC_LINE, m_ctrlLine);
	DDX_Control(pDX, IDC_LIST1, m_ctrlListBox);
	DDX_CBString(pDX, IDC_LINE, m_strLine);
	DDX_Text(pDX, IDC_PHONENUMBER, m_strPhoneNumber);
	//}}AFX_DATA_MAP
}

BOOL CTAPICaseView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

//对线路进行初始化
void CTAPICaseView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

	DWORD line;
	BOOL bSuccess;
	char strItem[100];
	//开始时候,挂断按钮无效
	m_ctrlDisconnect.EnableWindow(FALSE);

	myTAPILine = new CTAPILine;

	//将要协商的版本:1.3到3.0
	myTAPILine->SetLowAPI(0x00010003);
	myTAPILine->SetHighAPI(0x00030000);
	
	//在列表框中设置返回信息	
	m_ctrlListBox.AddString(_T("TAPI版本协商"));
	
	//为每条线路进行初始化和协商
	bSuccess = myTAPILine->Create();
	//如果成功,列出所有的有效地TAPI线路

	if(bSuccess)
	{
		for(line = 0; line < myTAPILine->GetNumLines(); line++)
		{
			myTAPILine->SetCurrentLineID(line);
			if(myTAPILine->GetNegoAPIVersion())
			{
				sprintf(strItem, "%d", line); 
				m_ctrlLine.AddString((const char*)strItem);
			}
		}
		//设置当前的选择为第一条线路
		m_ctrlLine.SetCurSel(0);
		OnSelchangeLine();
	}
	else
	{
		//返回用户信息,但不支持TAPI 2.1
		m_ctrlListBox.ResetContent();
		m_ctrlListBox.AddString(myTAPILine->ErrorString(myTAPILine->GetLasterror()));
	
		
		m_ctrlListBox.AddString("试探TaPI1.3 - 1.4");
		myTAPILine->SetLowAPI(0x00010003);
		myTAPILine->SetHighAPI(0x00010004);

		bSuccess = myTAPILine->Create();

		if(bSuccess)
		{
			for(line = 0; line < myTAPILine->GetNumLines(); line++)
			{
				myTAPILine->SetCurrentLineID(line);
				if(myTAPILine->GetNegoAPIVersion())
				{
					sprintf(strItem, "%d", line); 
					m_ctrlLine.AddString((const char*)strItem);
				}
			}
			OnSelchangeLine();
		}
		else
			m_ctrlListBox.AddString("致命的错误, TAPI版本协商失败");
	}	
}

/////////////////////////////////////////////////////////////////////////////
// CTAPICaseView printing
BOOL CTAPICaseView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CTAPICaseView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CTAPICaseView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CTAPICaseView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CTAPICaseView diagnostics

#ifdef _DEBUG
void CTAPICaseView::AssertValid() const
{
	CFormView::AssertValid();
}

void CTAPICaseView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CTAPICaseDoc* CTAPICaseView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTAPICaseDoc)));
	return (CTAPICaseDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTAPICaseView message handlers

//"拨号"按钮的响应函数
void CTAPICaseView::OnDial() 
{
	// TODO: Add your control notification handler code here
	BOOL bSuccess;
	CString strTemp;

	UpdateData(TRUE);
	m_ctrlDial.EnableWindow(FALSE);
	m_ctrlProgress.ResetContent();
	
	//提示用户进度
	strTemp.Format("打开线路: #%d\n", myTAPILine->GetCurrentLineID());
	m_ctrlProgress.AddString(strTemp);
	UpdateData(FALSE);

	bSuccess = myTAPILine->OpenLine();
	if(!bSuccess)
	{
		strTemp = "TAPI错误\n" + myTAPILine->ErrorString(myTAPILine->GetLasterror());
		::MessageBox(NULL, strTemp, "错误提示", MB_OK);
		m_ctrlDial.EnableWindow(TRUE);
		return;
	}
	
	strTemp.Format("正准备呼叫: %s\n", m_strPhoneNumber);
	m_ctrlProgress.AddString(strTemp);
	UpdateData(FALSE);	

	//调用呼叫函数进行呼叫
	bSuccess = myTAPILine->MakeCallAsynch(m_strPhoneNumber);

	if(!bSuccess)
	{
		myTAPILine->CloseLine();
		strTemp = "TAPI错误\n" + myTAPILine->ErrorString(myTAPILine->GetLasterror());
		::MessageBox(NULL, strTemp, "错误提示", MB_OK);
		m_ctrlDial.EnableWindow(TRUE);
		return;
	}
}

//"挂断"按钮的响应函数
void CTAPICaseView::OnDisconnected() 
{
	// TODO: Add your control notification handler code here
	BOOL bSuccess;

	m_ctrlProgress.ResetContent();
	m_ctrlProgress.AddString("请求挂断呼叫");

	bSuccess = myTAPILine->DropCallAsynch();
	if(!bSuccess)
	{
		::MessageBox(NULL, myTAPILine->ErrorString(myTAPILine->GetLasterror()), "错误提示", MB_OK);
	}
}

//"线路配置"按钮的响应函数
void CTAPICaseView::OnLineconfigure() 
{
	// TODO: Add your control notification handler code here
	BOOL bSuccess;
	bSuccess = myTAPILine->ConfigDialog(NULL);

	if(!bSuccess)
		::MessageBox(NULL, myTAPILine->ErrorString(myTAPILine->GetLasterror()), "错误提示", MB_OK);
}

//"拨号属性"按钮的响应函数
void CTAPICaseView::OnDialproperty() 
{
	// TODO: Add your control notification handler code here
	BOOL bSuccess;

	UpdateData(TRUE);
	bSuccess = myTAPILine->DialoingPropertiesDialog(NULL, m_strPhoneNumber);
	if(!bSuccess)
		::MessageBox(NULL, myTAPILine->ErrorString(myTAPILine->GetLasterror()), "错误提示", MB_OK);
}

//"线路"组合框焦点改变的响应函数
void CTAPICaseView::OnSelchangeLine() 
{
	// TODO: Add your control notification handler code here
	//清空信息框
	int i;
	char buffer[100];
	CString strTemp;

	m_ctrlListBox.ResetContent();

	UpdateData(TRUE);
	
	sprintf(buffer, "%d", m_ctrlLine.GetCurSel());

	m_strLine = (const char*)buffer;

	if( m_strLine != "")
	{
		//类的信息转换为当前的线路
		myTAPILine->SetCurrentLineID(atol(m_strLine));
		
		//在列表框中显示当前线路的信息
		strTemp.Format("TAPI线路: #%d", myTAPILine->GetCurrentLineID());
		m_ctrlListBox.AddString(strTemp);
		strTemp.Format("TAPI线路名称: %s", myTAPILine->GetLineName());
		m_ctrlListBox.AddString(strTemp);
		strTemp.Format("TAPI服务提供商名称: %s", myTAPILine->GetProviderInfo());
		m_ctrlListBox.AddString(strTemp);
		strTemp.Format("TAPI转换信息: %s", myTAPILine->GetSwitchInfo());
		m_ctrlListBox.AddString(strTemp);
		strTemp.Format("固定的线路标识: %d", myTAPILine->GetPermanentLineID());
		m_ctrlListBox.AddString(strTemp);

		switch(myTAPILine->GetStringFormat())
		{
		case STRINGFORMAT_ASCII:
			m_ctrlListBox.AddString("字符串格式: STRINGFORMAT_ASCII");
			break;
		case STRINGFORMAT_DBCS:
			m_ctrlListBox.AddString("字符串格式: STRINGFORMAT_DBCS");
			break;
		case STRINGFORMAT_UNICODE:
			m_ctrlListBox.AddString("字符串格式: STRINGFORMAT_UNICODe");
			break;
		case STRINGFORMAT_BINARY:
			m_ctrlListBox.AddString("字符串格式: STRINGFORMAT_BINARY");
			break;
		}
		
		strTemp.Format("与本线路相关联的地址数目: %d", myTAPILine->GetNumAddress());
		m_ctrlListBox.AddString(strTemp);
		
		strTemp.Format("最大数据传输率: %d", myTAPILine->GetmaxDataRate());
		m_ctrlListBox.AddString(strTemp);

		m_ctrlListBox.AddString("支持的载荷模式:");
		
		if(LINEBEARERMODE_VOICE & myTAPILine->GetBearerModes())
			m_ctrlListBox.AddString("\tLINEBEARERMODE_VOICE");

		if(LINEBEARERMODE_SPEECH & myTAPILine->GetBearerModes())
			m_ctrlListBox.AddString("\tLINEBEARERMODE_SPEECH");

		if(LINEBEARERMODE_DATA & myTAPILine->GetBearerModes())
			m_ctrlListBox.AddString("\tLINEBEARERMODE_DATA");

		if(LINEBEARERMODE_ALTSPEECHDATA & myTAPILine->GetBearerModes())
			m_ctrlListBox.AddString("\tLINEBEARERMODE_ALTSPEECHDATA");

		if(LINEBEARERMODE_MULTIUSE & myTAPILine->GetBearerModes())
			m_ctrlListBox.AddString("\tLINEBEARERMODE_MULTIUSE");

		if(LINEBEARERMODE_NONCALLSIGNALING & myTAPILine->GetBearerModes())
			m_ctrlListBox.AddString("\tLINEBEARERMODE_NONCALLSIGNALING");	
		
		m_ctrlListBox.AddString("支持的地址模式");
		
		if(LINEADDRESSMODE_ADDRESSID & myTAPILine->GetAddressModes())
			m_ctrlListBox.AddString("\tLINEADDRESSMODE_ADDRESSID");

		if(LINEADDRESSMODE_DIALABLEADDR & myTAPILine->GetAddressModes())
			m_ctrlListBox.AddString("\tLINEADDRESSMODE_DIALABLEADDR");	

		m_ctrlListBox.AddString("支持的媒体形式");

		if(LINEMEDIAMODE_ADSI & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_ADSI");

		if(LINEMEDIAMODE_AUTOMATEDVOICE & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_AUTOMATEDVOICE");

		if(LINEMEDIAMODE_DATAMODEM & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_DATAMODEM");

		if(LINEMEDIAMODE_DIGITALDATA & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_DITAIGALDATA");

		if(LINEMEDIAMODE_G3FAX & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_G3FAX");

		if(LINEMEDIAMODE_G4FAX & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_G4FAX");

		if(LINEMEDIAMODE_INTERACTIVEVOICE & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_INTERACTIVEVOICE");

		if(LINEMEDIAMODE_MIXED & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_MIXED");

		if(LINEMEDIAMODE_TDD & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_TDD");

		if(LINEMEDIAMODE_TELETEX & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_TELETEX");

		if(LINEMEDIAMODE_UNKNOWN & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_UNKNOWN");
		
		if(LINEMEDIAMODE_VIDEOTEX & myTAPILine->GetMediaModes())
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_VIDEOTEX");

		if(myTAPILine->GetGenerateToneMaxNumFreq() == 0)
			m_ctrlListBox.AddString("是否支持Line Tone Generation: 否");
		else
		{
			m_ctrlListBox.AddString("是否支持Line Tone Generation: 是");

			if(LINETONEMODE_BEEP & myTAPILine->GetGenerateToneModes())
				m_ctrlListBox.AddString("\tLINETONEMODE_BEEP");

			if(LINETONEMODE_BILLING & myTAPILine->GetGenerateToneModes())
				m_ctrlListBox.AddString("\tLINETONEMODE_BILLING");

			if(LINETONEMODE_BUSY & myTAPILine->GetGenerateToneModes())
				m_ctrlListBox.AddString("\tLINETONEMODE_BUSY");		

			if(LINETONEMODE_CUSTOM & myTAPILine->GetGenerateToneModes())
				m_ctrlListBox.AddString("\tLINETONEMODE_CUSTOM");

			if(LINETONEMODE_RINGBACK & myTAPILine->GetGenerateToneModes())
				m_ctrlListBox.AddString("\tLINETONEMODE_RINGBACK");
		}
		strTemp.Format("线路终端数目: %d", myTAPILine->GetNumTerminals());
		m_ctrlListBox.AddString(strTemp);
	}
	else
		m_ctrlListBox.AddString("没有有效的TAPI线路选中");
	
	//是否支持语音呼叫
	if(myTAPILine->GetLineSupportsVoice())
		m_ctrlDial.EnableWindow(TRUE);	
	else
		m_ctrlDial.EnableWindow(FALSE);

	//绘制线路图标
	HICON hIcon;
	LONG rc;
	rc = lineGetIcon(myTAPILine->GetCurrentLineID(), "", &hIcon);
	if(hIcon !=	NULL)
		m_ctrlIcon.SetIcon(hIcon);
}

⌨️ 快捷键说明

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