📄 comconfig.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 + -