📄 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;i<wParam;i++)SendMessage(WM_CHAR,p[i],10000);
return 0;
}
LONG CModem16View::OnShowMessage(UINT wParam,LONG lParam)
{
MainFrame->m_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;i<nRepCnt;i++) Modem.Writen(&c,1);
}
else{
if(c==CR && !Modem.DetectDcd()) return;
if(c==LF) c=CR;
CEditView::OnChar(nChar, nRepCnt, nFlags);
}
}
void CModem16View::OnPhoneDial()
{
// TODO: Add your command handler code here
// if(!Modem)Modem=new MODEM(AfxGetInstanceHandle(),m_hWnd,"COM4","19200");
DialNum Dialog;
if(Dialog.DoModal()==IDOK)Modem.Dial(Dialog.m_phonenum.GetBuffer(40));
}
void CModem16View::OnUpdatePhoneDial(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.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();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -