www.pudn.com > C_modem16.zip > MODEMVW.CPP


// modemvw.cpp : implementation of the CModem16View class 
// 
 
#include "stdafx.h" 
#include "modem16.h" 
#include "modem.h" 
#include "modemdoc.h" 
#include "zstabar.h" 
#include "mainfrm.h" 
#include "modemvw.h" 
#include "pagec.h" 
#include "dialnum.h" 
 
 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char BASED_CODE THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CModem16View 
 
IMPLEMENT_DYNCREATE(CModem16View, CEditView) 
 
BEGIN_MESSAGE_MAP(CModem16View, CEditView) 
	//{{AFX_MSG_MAP(CModem16View) 
	ON_WM_CREATE() 
	ON_MESSAGE(WM_CHARSARRIVE,OnCharsArrive) 
	ON_MESSAGE(WM_SHOWMESSAGE,OnShowMessage) 
	ON_WM_CHAR() 
	ON_COMMAND(ID_PHONE_DIAL, OnPhoneDial) 
	ON_UPDATE_COMMAND_UI(ID_PHONE_DIAL, OnUpdatePhoneDial) 
	ON_COMMAND(ID_PHONE_HANGUP, OnPhoneHangup) 
	ON_UPDATE_COMMAND_UI(ID_PHONE_HANGUP, OnUpdatePhoneHangup) 
	ON_COMMAND(ID_SETUP, OnSetup) 
	ON_UPDATE_COMMAND_UI(ID_SETUP, OnUpdateSetup) 
	ON_COMMAND(ID_T_RECEIVEFILE, OnTReceivefile) 
	ON_UPDATE_COMMAND_UI(ID_T_RECEIVEFILE, OnUpdateTReceivefile) 
	ON_COMMAND(ID_T_SENDFILE, OnTSendfile) 
	ON_UPDATE_COMMAND_UI(ID_T_SENDFILE, OnUpdateTSendfile) 
	ON_WM_DESTROY() 
	ON_WM_TIMER() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CModem16View construction/destruction 
 
CModem16View::CModem16View() 
{ 
	// TODO: add construction code here 
} 
 
CModem16View::~CModem16View() 
{ 
	KillTimer(MODEM_TIMER); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CModem16View drawing 
 
void CModem16View::OnDraw(CDC* pDC) 
{ 
	CModem16Doc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	// TODO: add draw code for native data here 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CModem16View diagnostics 
 
#ifdef _DEBUG 
void CModem16View::AssertValid() const 
{ 
	CEditView::AssertValid(); 
} 
 
void CModem16View::Dump(CDumpContext& dc) const 
{ 
	CEditView::Dump(dc); 
} 
 
CModem16Doc* CModem16View::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CModem16Doc))); 
	return (CModem16Doc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CModem16View message handlers 
 
int CModem16View::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
	if (CEditView::OnCreate(lpCreateStruct) == -1) 
		return -1; 
    MainFrame=(CMainFrame *)GetParent(); 
    ModemApp=(CModem16App *)AfxGetApp(); 
    m_com=ModemApp->GetProfileString("COM","Port","None"); 
    m_baud=ModemApp->GetProfileString("COM","Baud","2400"); 
    m_parity=ModemApp->GetProfileInt("COM","Parity",0); 
    m_databits=ModemApp->GetProfileInt("COM","DataBits",3); 
    m_stopbits=ModemApp->GetProfileInt("COM","StopBits",0); 
    m_command=ModemApp->GetProfileString("MODEM","IniCommand", 
    		  "Q0E1V1&FM1X4&C1&D2S0=0S6=2S7=50"); 
	// TODO: Add your specialized creation code here 
	SetTimer(MODEM_TIMER,50,NULL); 
	return 0; 
} 
 
LONG CModem16View::OnCharsArrive(UINT wParam,LONG lParam) 
{ 
    static int i; 
    static BYTE far * p; 
    p=(BYTE far *)lParam; 
    for(i=0;im_wndStatusBar.SetWindowText((char far *)lParam); 
    return 0; 
} 
 
void CModem16View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{ 
	// TODO: Add your message handler code here and/or call default 
	static BYTE c; 
	static UINT i; 
	c=nChar; 
	if(nRepCnt<10000){ 
		if(!Modem.IfCommand &&!Modem.IfTransFile && Modem.IfCom) 
			for(i=0;im_wndToolBar.GetButtonInfo(0,nID,nStyle,iImage); 
	pCmdUI->Enable(!Modem.IfCommand && Modem.IfModem && !Modem.DetectDcd()); 
//	if(Modem.IfCommand) return; 
	if(Modem.DetectDcd() && nID==ID_PHONE_DIAL){  
		pCmdUI->Enable(TRUE); 
		MainFrame->m_wndToolBar.SetButtonInfo(0,ID_PHONE_HANGUP,TBBS_BUTTON,4); 
		MainFrame->m_wndToolBar.Invalidate(); 
	} 
} 
 
void CModem16View::OnPhoneHangup() 
{ 
	// TODO: Add your command handler code here 
	Modem.HangUp(); 
} 
 
void CModem16View::OnUpdatePhoneHangup(CCmdUI* pCmdUI) 
{ 
	// TODO: Add your command update UI handler code here 
	UINT nID; 
	UINT nStyle; 
	int iImage; 
	MainFrame->m_wndToolBar.GetButtonInfo(0,nID,nStyle,iImage); 
	pCmdUI->Enable(Modem.IfModem && Modem.DetectDcd() && !Modem.IfCommand); 
//	if(Modem.IfCommand)	return; 
	if(!Modem.DetectDcd() && nID==ID_PHONE_HANGUP){ 
		pCmdUI->Enable(TRUE); 
		MainFrame->m_wndToolBar.SetButtonInfo(0,ID_PHONE_DIAL,TBBS_BUTTON,0); 
		MainFrame->m_wndToolBar.Invalidate(); 
	} 
} 
 
void CModem16View::OnSetup() 
{ 
	// TODO: Add your command handler code here 
//	char *buf1,*buf2; 
	PageC ConnectPage; 
	ConnectPage.m_com=m_com; 
	ConnectPage.m_databits=m_databits; 
	ConnectPage.m_parity=m_parity; 
	ConnectPage.m_stopbits=m_stopbits; 
	ConnectPage.m_baud=m_baud; 
	ConnectPage.m_command=m_command; 
	if(ConnectPage.DoModal()==IDOK){ 
		m_com=ConnectPage.m_com; 
		m_databits=ConnectPage.m_databits; 
		m_parity=ConnectPage.m_parity; 
		m_stopbits=ConnectPage.m_stopbits; 
		m_baud=ConnectPage.m_baud; 
		m_command=ConnectPage.m_command; 
		IniConnection(); 
		MainFrame->m_wndToolBar.m_comboBox.SelectString(-1,m_baud.GetBuffer(20)); 
	}	 
} 
 
void CModem16View::OnUpdateSetup(CCmdUI* pCmdUI) 
{ 
	// TODO: Add your command update UI handler code here 
	static int i=0; 
	CString string; 
	pCmdUI->Enable(!Modem.DetectDcd() && !Modem.IfCommand); 
	MainFrame->m_wndToolBar.m_comboBox.GetLBText( 
			MainFrame->m_wndToolBar.m_comboBox.GetCurSel(),string); 
	if(m_baud!=string){ 
		m_baud=string; 
		Modem.ChangeBaud(string.GetBuffer(20)); 
	} 
	if(!i){ 
		IniConnection(); 
		i++; 
	} 
} 
 
void CModem16View::OnTReceivefile() 
{ 
	// TODO: Add your command handler code here 
	CString String; 
	CFileDialog FileDialog(FALSE); 
	FileDialog.m_ofn.lpstrTitle="Receive File"; 
	FileDialog.m_ofn.lpstrFilter="All Files(*.*)\0*.*\0\0"; 
	if(FileDialog.DoModal()==IDOK){ 
		String=FileDialog.GetFileTitle(); 
		fstream File(String.GetBuffer(String.GetLength()+1),ios::out|ios::binary); 
		Modem.ReceAFile(File); 
	} 
} 
 
void CModem16View::OnUpdateTReceivefile(CCmdUI* pCmdUI) 
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->Enable(!Modem.IfTransFile && Modem.DetectDcd()); 
//	pCmdUI->Enable(TRUE); 
} 
 
void CModem16View::OnTSendfile() 
{ 
	// TODO: Add your command handler code here 
	CString String; 
	char *p; 
	CFileDialog FileDialog(TRUE); 
	FileDialog.m_ofn.lpstrTitle="Send File"; 
	FileDialog.m_ofn.lpstrFilter="All Files(*.*)\0*.*\0\0"; 
	if(FileDialog.DoModal()==IDOK){ 
		String=FileDialog.GetFileTitle(); 
		p=String.GetBuffer(String.GetLength()+1); 
		fstream File(p,ios::in|ios::binary); 
		Modem.SendAFile(File); 
	} 
	 
} 
 
void CModem16View::OnUpdateTSendfile(CCmdUI* pCmdUI) 
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->Enable(!Modem.IfTransFile && Modem.DetectDcd()); 
//	pCmdUI->Enable(TRUE); 
} 
 
 
void CModem16View::IniConnection() 
{ 
	CString string; 
	string+=m_com; 
	string+=": "; 
	string+=m_baud; 
	string+=","; 
	switch(m_parity){ 
		case 0: string+="N"; 
				break; 
		case 1: string+="E"; 
				break; 
		case 2: string+="O"; 
				break; 
	} 
	string+=","; 
	switch(m_databits){ 
		case 0:	string+="5"; 
				break; 
		case 1: string+="6"; 
				break; 
		case 2: string+="7"; 
				break; 
		case 3: string+="8"; 
				break; 
	} 
	string+=","; 
	switch(m_stopbits){ 
		case 0: string+="1"; 
				break; 
		case 1: string+="1.5"; 
				break; 
		case 2: string+="2"; 
				break; 
	} 
	Modem.IniCom(AfxGetInstanceHandle(),m_hWnd,string.GetBuffer(40)); 
	Modem.ConfigModem(m_command.GetBuffer(40)); 
} 
	 
void CModem16View::OnDestroy() 
{ 
	 
	// TODO: Add your message handler code here 
	ModemApp->WriteProfileString("COM","Port",m_com.GetBuffer(10)); 
	ModemApp->WriteProfileString("COM","Baud",m_baud.GetBuffer(10)); 
	ModemApp->WriteProfileInt("COM","Parity",m_parity);	 
	ModemApp->WriteProfileInt("COM","DataBits",m_databits); 
	ModemApp->WriteProfileInt("COM","StopBits",m_stopbits); 
	ModemApp->WriteProfileString("MODEM","IniCommand",m_command.GetBuffer(10));	 
	Modem.Stop(); 
	CEditView::OnDestroy(); 
} 
 
void CModem16View::OnTimer(UINT nIDEvent) 
{ 
	// TODO: Add your message handler code here and/or call default 
	CEditView::OnTimer(nIDEvent); 
	Modem.OnTimer();	 
}