📄 comwin.cpp
字号:
// ComWin.cpp : implementation file
//
#include "stdafx.h"
#include "LaneSoft.h"
#include "ComWin.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CComWin * m_pCComWin1;
CComWin * m_pCComWin2;
CComWin * m_pCComWin3;
CComWin * m_pCComWin4;
UINT Com_Port_Start1(LPVOID param)
{
static CString m_Show_Str = "";
CString str;
while(m_pCComWin1->m_bRunning)
{
WaitForSingleObject(m_pCComWin1->m_hREvent,INFINITE);
ReadFile(m_pCComWin1->hCom,
m_pCComWin1->m_RBuffer,1,
&m_pCComWin1->m_RResult,
&m_pCComWin1->m_Overlapped);
}
return 0;
}
UINT Com_Port_Start2(LPVOID param)
{
static CString m_Show_Str = "";
CString str;
while(m_pCComWin2->m_bRunning)
{
WaitForSingleObject(m_pCComWin2->m_hREvent,INFINITE);
ReadFile(m_pCComWin2->hCom,
m_pCComWin2->m_RBuffer,1,
&m_pCComWin2->m_RResult,
&m_pCComWin2->m_Overlapped);
}
return 0;
}
UINT Com_Port_Start3(LPVOID param)
{
static CString m_Show_Str = "";
CString str;
while(m_pCComWin3->m_bRunning)
{
WaitForSingleObject(m_pCComWin3->m_hREvent,INFINITE);
ReadFile(m_pCComWin3->hCom,
m_pCComWin3->m_RBuffer,1,
&m_pCComWin3->m_RResult,
&m_pCComWin3->m_Overlapped);
}
return 0;
}
UINT Com_Port_Start4(LPVOID param)
{
static CString m_Show_Str = "";
CString str;
while(m_pCComWin4->m_bRunning)
{
WaitForSingleObject(m_pCComWin4->m_hREvent,INFINITE);
ReadFile(m_pCComWin4->hCom,
m_pCComWin4->m_RBuffer,1,
&m_pCComWin4->m_RResult,
&m_pCComWin4->m_Overlapped);
}
return 0;
}
/////////////////////////////////////////////////////////////////////////////
// CComWin
BOOL CComWin::Create(int nPort,DCB *pDCB)
{
DCB dcb;
HANDLE hTemp;
BOOL fSuccess;
CString str;
memcpy((char *)&dcb,pDCB,sizeof(DCB));
str.Format("COM%d",nPort);
hTemp = CreateFile(str,GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
if(hTemp == INVALID_HANDLE_VALUE)
{
// MessageBox("创建串口出错,错误%d","信息",MB_OK);
return FALSE;
}
else
{
hCom = hTemp;
}
fSuccess = GetCommState(hCom,&dcb);
if(!fSuccess)
{
// MessageBox("无法获取状态字","出错",MB_OK);
return FALSE;
}
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
fSuccess = SetCommState(hCom,&dcb);
if(!fSuccess)
{
// MessageBox("无法设置状态字","出错",MB_OK);
return FALSE;
}
else
{
m_bRunning = TRUE;
switch(nPort)
{
case 0:
m_pCComWin1 = this;
AfxBeginThread(Com_Port_Start1,NULL,THREAD_PRIORITY_NORMAL);
break;
case 1:
m_pCComWin2 = this;
AfxBeginThread(Com_Port_Start2,NULL,THREAD_PRIORITY_NORMAL);
break;
case 2:
m_pCComWin3 = this;
AfxBeginThread(Com_Port_Start3,NULL,THREAD_PRIORITY_NORMAL);
break;
case 3:
m_pCComWin4 = this;
AfxBeginThread(Com_Port_Start4,NULL,THREAD_PRIORITY_NORMAL);
break;
}
ReadFile(hCom,m_RBuffer,1,&m_RResult,&m_Overlapped);
return TRUE;
}
}
CComWin::CComWin()
{
hCom = NULL;
m_hREvent = CreateEvent(NULL,TRUE,FALSE,NULL);
m_Overlapped.Offset = 0;
m_Overlapped.OffsetHigh = 0;
m_Overlapped.hEvent = m_hREvent;
}
CComWin::CComWin(int nPort,DCB * pDCB)
{
hCom = NULL;
m_hREvent = CreateEvent(NULL,TRUE,FALSE,NULL);
m_Overlapped.Offset = 0;
m_Overlapped.OffsetHigh = 0;
m_Overlapped.hEvent = m_hREvent;
Create(nPort,pDCB);
}
CComWin::~CComWin()
{
// DWORD dwError;
// char TempStr[100];
if(!CloseHandle(hCom))
{
// dwError = GetLastError();
// MessageBox(TempStr,"信息",MB_OK);
return;
}
m_bRunning = FALSE;
}
int CComWin::WriteOut(BYTE * pBuffer,int nLen)
{
DWORD result;
BOOL fSuccess;
if(hCom == NULL)
{
// MessageBox("设备未打开,请打开设备后再试","信息",MB_OK);
return 0;
}
fSuccess = WriteFile(hCom,pBuffer,nLen,&result,NULL);
if(!fSuccess)
{
// MessageBox("无法写入","信息",MB_OK);
return 0;
}
return result;
}
BEGIN_MESSAGE_MAP(CComWin, CStatic)
//{{AFX_MSG_MAP(CComWin)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CComWin message handlers
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -