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

📄 dlgcommportsetup.cpp

📁 通过手机数据线连接手机
💻 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 + -