www.pudn.com > TAPICase.rar > TAPICaseView.cpp


// TAPICaseView.cpp : implementation of the CTAPICaseView class 
// 
 
#include "stdafx.h" 
#include "TAPICase.h" 
 
#include "TAPICaseDoc.h" 
#include "TAPICaseView.h" 
 
 
#include"TAPI.h" 
#include"TAPILine.h" 
 
//#include"global.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_DIALPROPERTY, OnDialproperty) 
	ON_BN_CLICKED(IDC_LINECONFIGURE, OnLineconfigure) 
	ON_BN_CLICKED(IDC_DISCONNECTED, OnDisconnected) 
	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_strPhoneNumber = _T(""); 
	//}}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_LINE, m_ctrlLine); 
	DDX_Control(pDX, IDC_PROGRESS, m_ctrlProgress); 
	DDX_Control(pDX, IDC_LIST1, m_ctrlListBox); 
	DDX_Control(pDX, IDC_DISCONNECTED, m_ctrlDisconnect); 
	DDX_Control(pDX, IDC_DIALICON, m_ctrlIcon); 
	DDX_Control(pDX, IDC_DIAL, m_ctrlDial); 
	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;lineGetNumLines();line++) 
 
		{ 
 
			myTAPILine->SetCurrentLineID(line); 
 
			if(myTAPILine->GetNegoAPIVersion()) 
 
			{ 
				sprintf(strItem,"%d",line); 
 
				m_ctrlLine.AddString((const char*)strItem); 
 
			} 
 
		} 
 
		//设置当前的选择为每一条线路 
 
		m_ctrlLine.SetCurSel(0); 
		OnSelchangeLine(); 
 
	} 
 
	else 
	{ 
 
		//返回用户信息,但不支持TAPI2.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;lineGetNumLines();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; 
 
	} 
	m_ctrlDial.EnableWindow(TRUE);// 
 
} 
 
 
 
 
 
 
//拨号属性,按钮响应函数 
 
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::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::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::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("TAPI固定的线路标识:%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_DIGITALDATA"); 
 
 
		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_VOICEVIEW & myTAPILine->GetMediaModes()) 
 
			m_ctrlListBox.AddString("\tLINEMEDIAMODE_VOICEVIEW"); 
 
 
 
		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); 
 
 
 
 
 
 
 
 
 
	 
	/*#define LINEMEDIAMODE_UNKNOWN                   0x00000002 
#define LINEMEDIAMODE_INTERACTIVEVOICE          0x00000004 
#define LINEMEDIAMODE_AUTOMATEDVOICE            0x00000008 
#define LINEMEDIAMODE_DATAMODEM                 0x00000010 
#define LINEMEDIAMODE_G3FAX                     0x00000020 
#define LINEMEDIAMODE_TDD                       0x00000040 
#define LINEMEDIAMODE_G4FAX                     0x00000080 
#define LINEMEDIAMODE_DIGITALDATA               0x00000100 
#define LINEMEDIAMODE_TELETEX                   0x00000200 
#define LINEMEDIAMODE_VIDEOTEX                  0x00000400 
#define LINEMEDIAMODE_TELEX                     0x00000800 
#define LINEMEDIAMODE_MIXED                     0x00001000 
#define LINEMEDIAMODE_ADSI                      0x00002000 
#define LINEMEDIAMODE_VOICEVIEW                 0x00004000 */ 
 
 
 
		 
 
 
 
 
 
 
 
 
 
 
 
	 
 
 
	 
}