umanageview.cpp
来自「串口通讯演示程序」· C++ 代码 · 共 746 行 · 第 1/2 页
CPP
746 行
// UManageView.cpp : implementation of the CUManageView class
//
#include "stdafx.h"
#include "CeTools.h"
//#include "UManageDoc.h"
//#include "CntrItem.h"
#include "UManageView.h"
#include "SetFlagCharDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CUManageView
int ExitRevThread;
int ExitRevThread2;
extern UINT CommRev( LPVOID pParam );
extern UINT DataExp( LPVOID pParam );
IMPLEMENT_DYNCREATE(CUManageView, CRichEditView)
BEGIN_MESSAGE_MAP(CUManageView, CRichEditView)
//{{AFX_MSG_MAP(CUManageView)
ON_COMMAND(ID_FLAGCHAR, OnFlagchar)
ON_COMMAND(ID_FLAGCOLOR, OnFlagcolor)
ON_COMMAND(ID_BACKCOLOR, OnBackcolor)
ON_COMMAND(ID_FONT_SET, OnFontSet)
ON_COMMAND(ID_CHARCOLOR_REV, OnCharcolorRev)
ON_COMMAND(ID_CLEAR_CHAR, OnClearChar)
ON_COMMAND(ID_C_VIEW, OnCView)
ON_COMMAND(ID_P_VIEW, OnPView)
ON_COMMAND(ID_FLAGCHAR_VIEW, OnFlagcharView)
// ON_WM_DESTROY()
ON_WM_TIMER()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRichEditView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRichEditView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRichEditView::OnFilePrintPreview)
ON_MESSAGE(ID_OPENCOMM, OnOpenComm)
ON_MESSAGE(ID_CLOSECOMM, OnCloseComm)
ON_MESSAGE(OUTBAR_NOTIFY, OnOutbarNotify)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUManageView construction/destruction
CUManageView::CUManageView()
{
// TODO: add construction code here
}
CUManageView::~CUManageView()
{
ExitRevThread=1;
ExitRevThread2=1;
if(Close_Com(idCom))
app->PortState=1;
Sleep(200);
}
BOOL CUManageView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CRichEditView::PreCreateWindow(cs);
}
void CUManageView::OnInitialUpdate()
{
CRichEditView::OnInitialUpdate();
// Set the printing margins (720 twips = 1/2 inch).
SetMargins(CRect(720, 720, 720, 720));
app = (CCeToolsApp *)AfxGetApp();
GetRichEditCtrl().GetDefaultCharFormat(app->cf);
app->cf.dwMask=CFM_COLOR|CFM_SIZE|CFM_FACE;
app->cf.dwEffects=CFE_BOLD|CFE_ITALIC;
CString str;
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("FaceName"),"System");
app->logfont.lfHeight=AfxGetApp()->GetProfileInt(_T("SetRParam"),_T("lfHeight"),-21);
app->cf.yHeight=AfxGetApp()->GetProfileInt(_T("SetRParam"),_T("yHeight"),200);
lstrcpy(app->logfont.lfFaceName,str);
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("RevCharColor"),"16744448");
sscanf(str,"%u",&app->colorref_rev);
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("BackColor"),"14811135");//RGB(255,255,225)
sscanf(str,"%u",&app->colorref_back);
GetRichEditCtrl().SetBackgroundColor(FALSE,app->colorref_back);//RGB(255,255,225)
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("FlagCharColor"),"255");
sscanf(str,"%u",&app->FlagCharColor);
app->FlagCharNum=0;
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("FlagChar"),"");
if(!str.IsEmpty())
{
app->FlagCharNum=1;
app->FlagChar[0]=str;
}
// app->FlagCharNum=app->FlagCharToBuf(str,app->FlagChar);
OldSecond=0;
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("ErrRateColA"),"255");
sscanf(str,"%u",&app->LineColor.ErrRateColA);
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("ErrRateColB"),"255");
sscanf(str,"%u",&app->LineColor.ErrRateColB);
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("DataColA"),"255");
sscanf(str,"%u",&app->LineColor.DataColA);
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("DataColB"),"255");
sscanf(str,"%u",&app->LineColor.DataColB);
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("NoDataCol"),"255");
sscanf(str,"%u",&app->LineColor.NoDataCol);
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("FlagCol"),"255");
sscanf(str,"%u",&app->LineColor.FlagCol);
str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("CursorCol"),"255");
sscanf(str,"%u",&app->LineColor.CursorCol);
ViewPause=1;
FirstShowStaBar=0;
SetTimer(1,250,NULL);
SynCode[0]=0xfd;
SynCode[1]=0xc8;
SynCode[2]=0xe9;
SynCode[3]=0x2e;
SynCode2[0]=0x7c;
SynCode2[1]=0xd2;
SynCode2[2]=0x15;
SynCode2[3]=0xd8;
XorCode[0]=0x74;
XorCode[1]=0x97;
XorCode[2]=0x13;
XorCode[3]=0xbf;
ExitRevThread2=0;
InitRevParm();
// m_AnimateIcon_Ctrl.SetImageList(IDB_ANIM_IMGLIST,4,RGB(0,0,0));
m_AnimateIcon_Ctrl.SetImageList(IDB_BITMAP2,4,RGB(0,0,0));
// m_AnimateIcon_Ctrl.ShowNextImage();
}
/////////////////////////////////////////////////////////////////////////////
// CUManageView printing
BOOL CUManageView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
/*
void CUManageView::OnDestroy()
{
// Deactivate the item on destruction; this is important
// when a splitter view is being used.
CRichEditView::OnDestroy();
COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this);
if (pActiveItem != NULL && pActiveItem->GetActiveView() == this)
{
pActiveItem->Deactivate();
ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL);
}
}
*/
/////////////////////////////////////////////////////////////////////////////
// CUManageView diagnostics
/*
#ifdef _DEBUG
void CUManageView::AssertValid() const
{
CRichEditView::AssertValid();
}
void CUManageView::Dump(CDumpContext& dc) const
{
CRichEditView::Dump(dc);
}
CUManageDoc* CUManageView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CUManageDoc)));
return (CUManageDoc*)m_pDocument;
}
#endif //_DEBUG
*/
/////////////////////////////////////////////////////////////////////////////
// CUManageView message handlers
void CUManageView::OnOpenComm(WPARAM wParam,LPARAM lParam)
{
idCom=0;
idCom=OpenComm(app->SetParam.PortNo,app->SetParam.Baud,3,0,0,&dcb);
if(idCom>0)
{
app->PortState=2;
ExitRevThread2=0;
app->ErrCodeRate_m.run=1;
app->ErrCodeRate2_m.run=1;
InitRevParm();
AfxBeginThread(CommRev,this);
StartRthread();
}
else
{
MessageBox("串口打开失败!","错误",MB_ICONERROR);
app->PortState=0;
}
::SendMessage(app->m_hWnd,ID_APPINFO,0,0);
ListViewCount=1000;
}
HANDLE CUManageView::OpenComm(int Port, int Baud, int Data, int Stop, int Even,DCB *dcb)
{
char ComPort[20];
char ComCtrl[40];
int err;
HANDLE idCom;
COMMTIMEOUTS Commtimeouts;
sprintf(ComPort,"COM%d",Port+1);
ComCtrl[0]='\0';
switch(Baud)
{
case 0:
strcat(ComCtrl,"300,");
break;
case 1:
strcat(ComCtrl,"600,");
break;
case 2:
strcat(ComCtrl,"1200,");
break;
case 3:
strcat(ComCtrl,"2400,");
break;
case 4:
strcat(ComCtrl,"4800,");
break;
case 5:
strcat(ComCtrl,"9600,");
break;
case 6:
strcat(ComCtrl,"19200,");
break;
case 7:
strcat(ComCtrl,"38400,");
break;
default:
strcat(ComCtrl,"1200,");
break;
}
switch(Even)
{
case 0:
strcat(ComCtrl,"n,");
break;
case 1:
strcat(ComCtrl,"o,");
break;
case 2:
strcat(ComCtrl,"e,");
break;
default:
strcat(ComCtrl,"n,");
break;
}
switch(Data)
{
case 0:
strcat(ComCtrl,"5,");
break;
case 1:
strcat(ComCtrl,"6,");
break;
case 2:
strcat(ComCtrl,"7,");
break;
case 3:
strcat(ComCtrl,"8,");
break;
default:
strcat(ComCtrl,"8,");
break;
}
switch(Stop)
{
case 0:
strcat(ComCtrl,"1");
break;
case 1:
strcat(ComCtrl,"2");
break;
default:
strcat(ComCtrl,"1");
break;
}
idCom= CreateFile(ComPort,
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,//FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);
if(idCom<0)
return(0);
err=SetupComm(idCom,1000,1000);
PurgeComm(idCom, PURGE_TXABORT | PURGE_RXABORT |
PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
dcb->DCBlength = sizeof( DCB ) ;
GetCommState(idCom, dcb ) ;
err=BuildCommDCB(ComCtrl,dcb);
if(err<1)
return(FALSE);
dcb->fBinary = TRUE ;
dcb->fParity = TRUE ;
dcb->fRtsControl = RTS_CONTROL_HANDSHAKE ;
dcb->fDtrControl = DTR_CONTROL_HANDSHAKE ;
err=SetCommState(idCom,dcb);
if(err<1)
return(0);
else
{
memset(&Commtimeouts,0,sizeof(Commtimeouts));
Commtimeouts.ReadIntervalTimeout =MAXDWORD;
Commtimeouts.ReadTotalTimeoutMultiplier =0;
Commtimeouts.ReadTotalTimeoutConstant =2000;
Commtimeouts.WriteTotalTimeoutMultiplier =0;
Commtimeouts.WriteTotalTimeoutConstant =2000;
SetCommTimeouts(idCom,&Commtimeouts);
}
return idCom;
}
int CUManageView::Write_Com(HANDLE idCom, BYTE *SdBuff, DWORD Slen, BYTE Code)
{
DWORD num;
WriteFile(idCom,SdBuff,Slen,&num,NULL);
// WriteFile(idCom,SdBuff,Slen,&num,&olappend);
return (int)num;
}
int CUManageView::Read_Com(HANDLE idCom, BYTE *RvBuff, DWORD Rlen)
{
DWORD num=0;
DWORD dwErrorMask;
COMSTAT Comstat;
ClearCommError(idCom,&dwErrorMask,&Comstat);
ReadFile(idCom,RvBuff,min(Comstat.cbInQue,(DWORD)Rlen),&num,NULL);
// ReadFile(idCom,RvBuff,Rlen,&num,NULL);
return num;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?