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

📄 comconfig.cpp

📁 初始化COM口的例子
💻 CPP
字号:
// ComConfig.cpp: implementation of the CComConfig class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ComConfig.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CComConfig::CComConfig(CWnd* pWnd/* = NULL*/)
{
	m_Wnd=pWnd;

	CString strPath;
	GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH+1),MAX_PATH);
	strPath.ReleaseBuffer();
	int nPos=strPath.ReverseFind('\\');
	strPath=strPath.Left(nPos+1);
	m_strFile=strPath+_T("COMConfig.ini");
	
}

CComConfig::CComConfig(CString strFile,CWnd* pWnd/* = NULL*/)
{
	m_Wnd=pWnd;
	
	CString strPath;
	GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH+1),MAX_PATH);
	strPath.ReleaseBuffer();
	int nPos=strPath.ReverseFind('\\');
	strPath=strPath.Left(nPos+1);
	m_strFile=strPath+strFile;	
}

CComConfig::~CComConfig()
{

}

BOOL CComConfig::ReadComConfig(CString strCOM, LPCOMMCONFIG lpConfig)
{
	//检验strCOM变量格式
	if(strCOM.Left(3).CompareNoCase(_T("COM")))
	{
		AfxMessageBox("Error COM format!");
		return FALSE;
	}
	if(!atoi(strCOM.Mid(3)))
	{
		AfxMessageBox("Error COM format!");
		return FALSE;
	}
	//检验lpConfig
	ASSERT(lpConfig);

	CString str;
	char buff[1024];
	if(GetPrivateProfileString(strCOM,_T("Baud"),_T("9600"),buff,sizeof(buff),m_strFile))
	{
		str=buff;
		lpConfig->dcb.BaudRate=atoi(str);
	}
	if(GetPrivateProfileString(strCOM,_T("DataBit"),_T("8"),buff,sizeof(buff),m_strFile))
	{
		str=buff;
		lpConfig->dcb.ByteSize=atoi(str);
	}
	if(GetPrivateProfileString(strCOM,_T("Parity"),_T("0"),buff,sizeof(buff),m_strFile))
	{
		str=buff;
		lpConfig->dcb.Parity=atoi(str);
	}
	if(GetPrivateProfileString(strCOM,_T("StopData"),_T("0"),buff,sizeof(buff),m_strFile))
	{
		str=buff;
		lpConfig->dcb.StopBits=atoi(str);
	}
	if(GetPrivateProfileString(strCOM,_T("FlowCtrl"),_T("1"),buff,sizeof(buff),m_strFile))
	{
		str=buff;
		int nFlowCtrl=atoi(str);
		switch(nFlowCtrl)
		{
		case 0:	//Xon/Xoff
			lpConfig->dcb.fOutxCtsFlow = 0;
			lpConfig->dcb.fOutX = 1;
			lpConfig->dcb.fInX= 1;
			lpConfig->dcb.fRtsControl = 0;
			break;
		case 1:	//硬件
			lpConfig->dcb.fOutxCtsFlow = 1;
			lpConfig->dcb.fOutX = 0;
			lpConfig->dcb.fInX= 0;
			lpConfig->dcb.fRtsControl = 2;
			break;
		case 2:	//无
			lpConfig->dcb.fOutxCtsFlow = 0;
			lpConfig->dcb.fOutX = 0;
			lpConfig->dcb.fInX= 0;
			lpConfig->dcb.fRtsControl = 0;
			break;
		default:
			break;
		}				
	}
	return TRUE;
}

BOOL CComConfig::WriteComConfig(CString strCOM, LPCOMMCONFIG lpConfig)
{
	//检验strCOM变量格式
	if(strCOM.Left(3).CompareNoCase(_T("COM")))
	{
		AfxMessageBox("Error COM format!");
		return FALSE;
	}
	if(!atoi(strCOM.Mid(3)))
	{
		AfxMessageBox("Error COM format!");
		return FALSE;
	}
	//检验lpConfig
	ASSERT(lpConfig);
	
	CString str;
	
	str.Format(_T("%d"),lpConfig->dcb.BaudRate);
	if(!WritePrivateProfileString(strCOM,_T("Baud"),str,m_strFile))
		return FALSE;
	
	str.Format(_T("%d"),lpConfig->dcb.ByteSize);
	if(!WritePrivateProfileString(strCOM,_T("DataBit"),str,m_strFile))
		return FALSE;
	
	str.Format(_T("%d"),lpConfig->dcb.Parity);	
	if(!WritePrivateProfileString(strCOM,_T("Parity"),str,m_strFile))
		return FALSE;
	
	str.Format(_T("%d"),lpConfig->dcb.StopBits);	
	if(!WritePrivateProfileString(strCOM,_T("StopData"),str,m_strFile))
		return FALSE;
	
	str=_T("");
	//Xon/Xoff
	if(	lpConfig->dcb.fOutxCtsFlow == 0 &&
		lpConfig->dcb.fOutX == 1 &&
		lpConfig->dcb.fInX == 1 &&		
		lpConfig->dcb.fRtsControl == 0)
	{
		str=_T("0");
	}
	//硬件
	if(	lpConfig->dcb.fOutxCtsFlow == 1 &&
		lpConfig->dcb.fOutX == 0 &&
		lpConfig->dcb.fInX == 0 &&		
		lpConfig->dcb.fRtsControl == 2)
	{
		str=_T("1");
	}
	//无
	if(	lpConfig->dcb.fOutxCtsFlow == 0 &&
		lpConfig->dcb.fOutX == 0 &&
		lpConfig->dcb.fInX == 0 &&		
		lpConfig->dcb.fRtsControl == 0)
	{
		str=_T("2");
	}
	
	if(!WritePrivateProfileString(strCOM,_T("FlowCtrl"),str,m_strFile))
		return FALSE;

	return TRUE;
}

BOOL CComConfig::ShowComConfig(CString strCOM, LPCOMMCONFIG lpConfig)
{
	//检验strCOM变量格式
	if(strCOM.Left(3).CompareNoCase(_T("COM")))
	{
		AfxMessageBox("Error COM format!");
		return FALSE;
	}
	if(!atoi(strCOM.Mid(3)))
	{
		AfxMessageBox("Error COM format!");
		return FALSE;
	}
	//检验lpConfig
	ASSERT(lpConfig);
	
	return CommConfigDialog(strCOM,m_Wnd==NULL? NULL : m_Wnd->m_hWnd,lpConfig);	
}

BOOL CComConfig::GetSystemCom(CStringArray& arCom)
{
	CString strCom;
	COMMCONFIG ci;
	DWORD dwSize=sizeof(COMMCONFIG);
	for(int i=1;i<255;i++)
	{
		strCom.Format("COM%d", i);
		if(GetDefaultCommConfig(strCom,&ci,&dwSize))
		{
			arCom.Add(strCom);
		}
	}
	return TRUE;
}

void CComConfig::SetComConfig(CString strCom)
{
	COMMCONFIG ci;
	DWORD dwSize=sizeof(COMMCONFIG);
	ReadComConfig(strCom,&ci);
	ShowComConfig(strCom,&ci);
	WriteComConfig(strCom,&ci);
}

⌨️ 快捷键说明

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