📄 dlgcommportsetup.cpp
字号:
// DlgCommPortSetup.cpp : implementation file
//
#include "stdafx.h"
#include "MoblieX.h"
#include "DlgCommPortSetup.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgCommPortSetup dialog
static DWORD sBaudRate[]=
{
CBR_1200,
CBR_2400,
CBR_4800,
CBR_9600,
CBR_14400,
CBR_19200,
CBR_38400,
CBR_56000,
CBR_57600,
CBR_115200,
CBR_128000
};
static BYTE sByteSize[]={ 5, 6, 7, 8 };
CDlgCommPortSetup::CDlgCommPortSetup(CWnd* pParent /*=NULL*/)
: CDialog(CDlgCommPortSetup::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgCommPortSetup)
m_commPortID = 3;
m_baudRateID = 3;
m_byteSizeID = 3;
m_flowCtrlID = 1;
m_parityID = 0;
m_stopBitsID = 0;
//}}AFX_DATA_INIT
OnDefaulte();
}
void CDlgCommPortSetup::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgCommPortSetup)
DDX_CBIndex(pDX, IDC_COMM_PORT, m_commPortID);
DDX_CBIndex(pDX, IDC_BAUD_RATE, m_baudRateID);
DDX_CBIndex(pDX, IDC_BYTE_SIZE, m_byteSizeID);
DDX_CBIndex(pDX, IDC_PARITY, m_parityID);
DDX_CBIndex(pDX, IDC_STOP_BITS, m_stopBitsID);
DDX_CBIndex(pDX, IDC_FLOW_CTRL, m_flowCtrlID);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgCommPortSetup, CDialog)
//{{AFX_MSG_MAP(CDlgCommPortSetup)
ON_BN_CLICKED(IDC_DEFAULTE, OnDefaulte)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgCommPortSetup message handlers
void CDlgCommPortSetup::OnOK()
{
UpdateData();
CheckValue();
MakeCommPortName();
UpdateDCB();
SaveDefault();
CDialog::OnOK();
}
void CDlgCommPortSetup::SaveDefault()
{
theApp.WriteProfileInt( "Settings", "commport", m_commPortID );
theApp.WriteProfileInt( "Settings", "commBR", m_baudRateID );
theApp.WriteProfileInt( "Settings", "commBS", m_byteSizeID );
theApp.WriteProfileInt( "Settings", "commFC", m_flowCtrlID );
theApp.WriteProfileInt( "Settings", "commPT", m_parityID );
theApp.WriteProfileInt( "Settings", "commSB", m_stopBitsID );
}
void CDlgCommPortSetup::LoadDefault()
{
m_commPortID = theApp.GetProfileInt( "Settings", "commport", 3 );
m_baudRateID = theApp.GetProfileInt( "Settings", "commBR", 3 );
m_byteSizeID = theApp.GetProfileInt( "Settings", "commBS", 3 );
m_flowCtrlID = theApp.GetProfileInt( "Settings", "commFC", 1 );
m_parityID = theApp.GetProfileInt( "Settings", "commPT", 0 );
m_stopBitsID = theApp.GetProfileInt( "Settings", "commSB", 0 );
CheckValue();
MakeCommPortName();
UpdateDCB();
}
void CDlgCommPortSetup::SetDefaultCommPort(const char *cn)
{
if( strlen( cn ) != 4 )
{
return;
}
m_commPortID = atoi( cn+3 ) - 1;//取COMX中的X值
}
void CDlgCommPortSetup::MakeCommPortName()
{
m_commPortName.Format( "COM%d", m_commPortID + 1 );
}
void CDlgCommPortSetup::OnDefaulte()
{
m_commPortID = 3;
m_baudRateID = 3;
m_byteSizeID = 3;
m_flowCtrlID = 1;
m_parityID = 0;
m_stopBitsID = 0;
if( IsWindow( GetSafeHwnd() ) )
{
UpdateData( FALSE );
}
}
void CDlgCommPortSetup::UpdateDCB()
{
memset( &m_dcb, 0, sizeof(m_dcb) );
m_dcb.DCBlength = sizeof(m_dcb);
BuildCommDCB( "96,n,8,1", &m_dcb );
m_dcb.fBinary = TRUE;
m_dcb.BaudRate = sBaudRate[m_baudRateID];
m_dcb.ByteSize = sByteSize[m_byteSizeID];
m_dcb.Parity = m_parityID;
m_dcb.StopBits = m_stopBitsID;
switch( m_flowCtrlID )
{
case 1://硬件流控制
m_dcb.fInX = FALSE;
m_dcb.fOutX = FALSE;
m_dcb.fOutxDsrFlow = TRUE;
m_dcb.fOutxCtsFlow = TRUE;
m_dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;
m_dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
break;
case 2://Xon / Xoff
m_dcb.fInX = TRUE;
m_dcb.fOutX = TRUE;
m_dcb.fOutxDsrFlow = FALSE;
m_dcb.fOutxCtsFlow = FALSE;
m_dcb.fDtrControl = DTR_CONTROL_ENABLE;
m_dcb.fRtsControl = RTS_CONTROL_ENABLE;
m_dcb.XonChar = char(255);
m_dcb.XoffChar = char(254);
break;
case 0://无控制
default:
m_dcb.fInX = FALSE;
m_dcb.fOutX = FALSE;
m_dcb.fOutxDsrFlow = FALSE;
m_dcb.fOutxCtsFlow = FALSE;
m_dcb.fDtrControl = DTR_CONTROL_ENABLE;
m_dcb.fRtsControl = DTR_CONTROL_ENABLE;
break;
}
}
void CDlgCommPortSetup::CheckValue()
{
m_commPortID = max( 0, min( 8, m_commPortID ) );
m_baudRateID = max( 0, min( 10, m_baudRateID ) );
m_byteSizeID = max( 0, min( 3, m_byteSizeID ) );
m_flowCtrlID = max( 0, min( 2, m_flowCtrlID ) );
m_parityID = max( 0, min( 4, m_parityID ) );
m_stopBitsID = max( 0, min( 2, m_stopBitsID ) );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -