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

📄 portsetting.cpp

📁 该程序用MFC实现串口通信
💻 CPP
字号:
// PortSetting.cpp : implementation file
//

#include "stdafx.h"
#include "GpsRecv.h"
#include "PortSetting.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPortSetting dialog


CPortSetting::CPortSetting(CWnd* pParent /*=NULL*/)
	: CDialog(CPortSetting::IDD, pParent)
{
	//{{AFX_DATA_INIT(CPortSetting)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_nPort = 1;
	m_nBaud = 9600;
	m_nParity = 0;
	m_nStopBits = 0;
	m_nDataBits = 8;
}


void CPortSetting::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPortSetting)
	DDX_Control(pDX, IDC_STOPBITS_COMBO, m_StopBits);
	DDX_Control(pDX, IDC_PARITY_COMBO, m_Parity);
	DDX_Control(pDX, IDC_DATABITS_COMBO, m_DataBits);
	DDX_Control(pDX, IDC_BAUD_COMBO, m_Baud);
	DDX_Control(pDX, IDC_PORT_COMBO, m_Port);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPortSetting, CDialog)
	//{{AFX_MSG_MAP(CPortSetting)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPortSetting message handlers

BOOL CPortSetting::OnInitDialog() 
{
	CDialog::OnInitDialog();

	//查询本地计算机上的串口
	for (int i = 1; i < 256; i++)
	{
		CString sPort;
		sPort.Format(_T("\\\\.\\COM%d"), i);

		BOOL bSuccess = FALSE;
		HANDLE hPort = ::CreateFile(sPort, GENERIC_READ | GENERIC_WRITE, 
			                        0, 0, OPEN_EXISTING, 0, 0);
		if (hPort == INVALID_HANDLE_VALUE)
		{
			DWORD dwError = GetLastError();
			if (dwError == ERROR_ACCESS_DENIED)
				bSuccess = TRUE;
		}
		else
		{
			bSuccess = TRUE;
			CloseHandle(hPort);
		}
		if (bSuccess)
		{
			CString str;
			str.Format("COM%d", i);
			m_Port.AddString(str);
		}
	}		
	CString strPort;
	strPort.Format(_T("COM%d"), m_nPort);
	int index = m_Port.FindStringExact(0, strPort);
	if(index != CB_ERR)
		m_Port.SetCurSel(index);

	m_Baud.AddString(_T("1200"));
	m_Baud.AddString(_T("2400"));
	m_Baud.AddString(_T("4800"));
	m_Baud.AddString(_T("9600"));
	m_Baud.AddString(_T("7200"));
	m_Baud.AddString(_T("14400"));
	m_Baud.AddString(_T("19200"));
	m_Baud.AddString(_T("38400"));
	m_Baud.AddString(_T("57600"));

	CString sBaud;
	sBaud.Format(_T("%d"), m_nBaud);
	index = m_Baud.FindStringExact(0, sBaud);
	if(index != CB_ERR)
		m_Baud.SetCurSel(index);

	m_DataBits.AddString(_T("5"));
	m_DataBits.AddString(_T("6"));
	m_DataBits.AddString(_T("7"));
	m_DataBits.AddString(_T("8"));
	m_DataBits.SetCurSel(m_nDataBits - 5);

	m_StopBits.AddString(_T("1"));
	m_StopBits.AddString(_T("1.5"));
	m_StopBits.AddString(_T("2"));
	m_StopBits.SetCurSel(m_nStopBits);
 
	m_Parity.AddString(_T("NONE"));
	m_Parity.AddString(_T("ODD"));
	m_Parity.AddString(_T("EVEN"));
	m_Parity.SetCurSel(m_nParity);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPortSetting::OnOK() 
{
	CString sPort;
	m_Port.GetWindowText(sPort);
	sPort = sPort.Right(sPort.GetLength() - 3);
	m_nPort = atoi(sPort);
	
	CString sBaud;
	m_Baud.GetWindowText(sBaud);
	m_nBaud = atoi(sBaud);

	CString sDataBits;
	m_DataBits.GetWindowText(sDataBits);
	m_nDataBits = atoi(sDataBits);

	m_nStopBits = m_StopBits.GetCurSel();

	m_nParity = m_Parity.GetCurSel();
	
	CDialog::OnOK();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -