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 + -
显示快捷键?