umanageview.cpp

来自「串口通讯演示程序」· C++ 代码 · 共 746 行 · 第 1/2 页

CPP
746
字号
void CUManageView::OnCloseComm(WPARAM wParam,LPARAM lParam)
{
	ExitRevThread=1;
	ExitRevThread2=1;
	if(Close_Com(idCom))
		app->PortState=1;
	app->ErrCodeRate_m.run=0;
	app->ErrCodeRate2_m.run=0;
}
int CUManageView::Close_Com(HANDLE idCom)
{
	if(PurgeComm(idCom,PURGE_RXCLEAR) && PurgeComm(idCom,PURGE_TXCLEAR))
	{
		CloseHandle(idCom); 
		return 1;
	}
	return 0;
}
void CUManageView::OnFontSet() 
{
	CFontDialog dlg(&app->logfont,CF_SCREENFONTS);
	if(dlg.DoModal()==IDOK)
	{
		app->logfont.lfHeight=dlg.m_lf.lfHeight;
		lstrcpy(app->logfont.lfFaceName,dlg.GetFaceName());

		app->cf.yHeight=dlg.GetSize();
		lstrcpy(app->cf.szFaceName,dlg.GetFaceName());

		AfxGetApp()->WriteProfileInt(_T("SetRParam"),_T("lfHeight"),app->logfont.lfHeight);
		AfxGetApp()->WriteProfileInt(_T("SetRParam"),_T("yHeight"),app->cf.yHeight);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("FaceName"),app->logfont.lfFaceName);
	}
	
}
void CUManageView::OnBackcolor() 
{
	CString str;
	CColorDialog dlg(app->colorref_back);
	if(dlg.DoModal()==IDOK)
	{
		app->colorref_back=dlg.GetColor();
		str.Format("%u",app->colorref_back);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("BackColor"),str);
		GetRichEditCtrl().SetBackgroundColor(FALSE,app->colorref_back);
	}
	
}
void CUManageView::OnCharcolorRev() 
{
	CString str;
	CColorDialog dlg(app->colorref_rev);
	if(dlg.DoModal()==IDOK)
	{
		app->colorref_rev=dlg.GetColor();
		str.Format("%u",app->colorref_rev);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("RevCharColor"),str);
	}
	
}

void CUManageView::OnClearChar() 
{
	GetRichEditCtrl().SetSel(0,GetRichEditCtrl().GetTextLength());
	GetRichEditCtrl().Clear();
	
}
void CUManageView::OnFlagcolor() 
{
	CString str;
	CColorDialog dlg(app->FlagCharColor);
	if(dlg.DoModal()==IDOK)
	{
		app->FlagCharColor=dlg.GetColor();
		str.Format("%u",app->FlagCharColor);
		AfxGetApp()->WriteProfileString(_T("SetRParam"),_T("FlagCharColor"),str);
	}
	
}
void CUManageView::OnFlagchar() 
{
	CSetFlagCharDlg dlg;
	CString str,str1,str2,ss;
	int i=0;
	dlg.para="SetRParam";
	if(dlg.DoModal()==IDOK)
	{
		app->FlagCharNum=0;
		str=AfxGetApp()->GetProfileString(_T("SetRParam"),_T("FlagChar"),"");
		app->FlagCharNum=1;
		app->FlagChar[0]=str;
//		app->FlagCharNum=app->FlagCharToBuf(str,app->FlagChar);
		AfxGetApp()->WriteProfileInt(_T("SetRParam"),_T("FlagCharNum"),app->FlagCharNum);
  }
}
BOOL CUManageView::PreTranslateMessage(MSG* pMsg) 
{
	if (pMsg->message == WM_RBUTTONDOWN)
	{
		CMenu Menu;
		CPoint pt;

		pt.x = LOWORD(pMsg->lParam);
		pt.y = HIWORD(pMsg->lParam);
		ClientToScreen(&pt);

		if (Menu.LoadMenu(IDR_MENU2))
		{
			CMenu* pSubMenu = Menu.GetSubMenu(0);

			if (pSubMenu!=NULL)
			{
				pSubMenu->RemoveMenu(6,MF_BYPOSITION);
				pSubMenu->RemoveMenu(5,MF_BYPOSITION);

				CHARRANGE cr;
				GetRichEditCtrl().GetSel(cr);
				if(cr.cpMin==cr.cpMax)
					pSubMenu->EnableMenuItem(ID_EDIT_COPY,MF_GRAYED);
				if(ViewPause)
					pSubMenu->EnableMenuItem(ID_P_VIEW,MF_GRAYED);
				else
					pSubMenu->EnableMenuItem(ID_C_VIEW,MF_GRAYED);

				CWnd* pWndPop=this;
				pWndPop=pWndPop->GetParent();
				pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,pWndPop);
			}
		}
	}
	
	return CRichEditView::PreTranslateMessage(pMsg);
}
/***********************************************************
	用途:显示Buffer中的数据
	调用:CommRev线程
	参数:要显示的数据及长度
	返回:
***********************************************************/
void CUManageView::AddToList(BYTE *Buffer, int len, int flag)
{
	CString str1,str2;
	long eChart;

	if(ViewPause==1)
		return ;
	str1="";
	for(int i=0;i<len;i++)
	{
		str2.Format("%02X ",Buffer[i]);
		str1+=str2;
	}
	eChart=GetRichEditCtrl().GetTextLength();
	GetRichEditCtrl().SetSel(eChart,eChart);
	app->cf.crTextColor=app->colorref_rev;
	SetCharFormat(app->cf);
	GetRichEditCtrl().ReplaceSel(str1);
	i=GetRichEditCtrl().GetLineCount();
	if(GetRichEditCtrl().GetLineCount()>ListViewCount)
		OnClearChar();
}
void CUManageView::OnCView() 
{
	ViewPause=0;	
}

void CUManageView::OnPView() 
{
	ViewPause=1;	
}

/***********************************************************
	用途:按照设定的颜色标记关键字
	调用:手动调用
	参数:无
	返回:无
***********************************************************/
void CUManageView::OnFlagcharView() 
{
	for(int i=0;i<app->FlagCharNum;i++)
	{
		GetRichEditCtrl().SetSel(0,0);
		while(FindText(app->FlagChar[i]))
		{
			app->cf.crTextColor=app->FlagCharColor;
			SetCharFormat(app->cf);
			GetRichEditCtrl().ReplaceSel(app->FlagChar[i]);
		}
	}
}

void CUManageView::OnTimer(UINT nIDEvent) 
{
	int sc;
	CString str;
	if(FirstShowStaBar==0)
	{
		::SendMessage(app->m_hWnd,ID_APPINFO,0,0);
		FirstShowStaBar=1;
		KillTimer(1);
		SetTimer(1,1000,NULL);
		return;
	}
	systime=CTime::GetCurrentTime();
	sc=systime.GetSecond();
	if(sc<OldSecond)
	{
		app->ErrCodeRate_m.ErrCodeRate=
			app->ExpErrRate(app->ErrCodeRate_m.ErrLen,app->ErrCodeRate_m.TotalLen);
		app->ErrCodeRate2_m.ErrCodeRate=
			app->ExpErrRate(app->ErrCodeRate2_m.ErrLen,app->ErrCodeRate2_m.TotalLen);
//A通道
		WriteLogFile(app->ErrCodeRate_m.run,app->ErrCodeRate_m.ErrCodeRate,app->ErrCodeRate_t.ErrCodeRate,app->ErrCodeRate_m.TotalLen,app->ErrCodeRate_m.CommTotalLen,0);
//B通道
		WriteLogFile(app->ErrCodeRate2_m.run,app->ErrCodeRate2_m.ErrCodeRate,app->ErrCodeRate2_t.ErrCodeRate,app->ErrCodeRate2_m.TotalLen,app->ErrCodeRate2_m.CommTotalLen,1);

		app->ErrCodeRate_m.ErrLen=0;
		app->ErrCodeRate_m.CommTotalLen=0;
		app->ErrCodeRate_m.TotalLen=0;

		app->ErrCodeRate2_m.ErrLen=0;
		app->ErrCodeRate2_m.CommTotalLen=0;
		app->ErrCodeRate2_m.TotalLen=0;
	}
	OldSecond=sc;
	if(app->PortState==2)
		app->TotalRunTime++;

	::SendMessage(app->m_hWnd,ID_APPINFO,0,0);

	CRichEditView::OnTimer(nIDEvent);
}

WORD CUManageView::CheckSum(BYTE *buf, int len)
{
	int i;
	BYTE bv1,bv2;
	if(len<=0)
		return 0;
	bv1=0;
	bv2=0;
	for(i=0;i<len;i++)
	{
		bv1+=buf[i];
		if(i%2==0)
			bv2-=buf[i];
		else
			bv2+=buf[i];
	}
	return bv1<<8|bv2;
}

DWORD CUManageView::GetInBuffCount(HANDLE idCom)
{
	DWORD num=0;

//	if(GetOverlappedResult(idCom,&olappend,&num,0))
//		EnableSend=1;
//	else
//		EnableSend=0;
//	return num;

	ClearCommError(idCom,&dwErrorMask,&Comstat);
	num=Comstat.cbInQue;
	return num;
}

void CUManageView::AddXorCode(BYTE *Buff, DWORD len)
{
	BYTE bpos=0;
	for(DWORD i=0;i<len;i++)
	{
		Buff[i]^=XorCode[bpos++];
		bpos%=4;
	}
}

void CUManageView::AddSynCode(BYTE *Buf, BYTE *SynCode, int len)
{
	int i;
	for(i=0;i<len;i++)
		Buf[i]=SynCode[i];
}
void CUManageView::StartRthread()
{
	if(app->PortState!=2)
	{
		MessageBox("串口未打开!");
		return;
	}
//	AfxBeginThread(CommRev,this);
	AfxBeginThread(DataExp,this);
}
void CUManageView::InitRevParm()
{
	ExitRevThread=0;
	RvStr.TimerCount=0;
	RvStr.Endp=0;
	RvStr.sp=0;
}
long CUManageView::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
{
	switch(wParam)
	{
	case 1:
		UseTool.CurUseSubTool=lParam;
		if(UseTool.CurUseTool==0)
		{
			switch(UseTool.CurUseSubTool)
			{
			case 0:
				ExitRevThread=1;
				Sleep(200);
				InitRevParm();
				app->BmState=0;
				StartRthread();
				break;
			case 1:
				ExitRevThread=1;
				Sleep(200);
				InitRevParm();
				app->BmState=1;
				StartRthread();
				break;
			case 2:
				break;
			case 3:
				ExitRevThread=1;
				break;
			}
			break;
		}
		break;
	case 5:
		UseTool.CurUseTool=lParam;
		break;
	}
	return 0;
}

void CUManageView::WriteLogFile(int run,float a, float b,int total,int commtotal,int AB)
{
	int sc,mc;
	CStdioFile csf;
	CString str,str1;

	str1=systime.Format("%Y%m%d");
	if(AB)
		str1+="B";
	else
		str1+="A";
	str=str1+".txt";
	if(!csf.Open(str,CFile::modeWrite|CFile::typeText))
		csf.Open(str,CFile::modeCreate|CFile::modeWrite|CFile::typeText);
	csf.SeekToEnd();
	sc=systime.GetMinute();
	mc=systime.GetHour();
	str.Format("%d %d %d %f %f %d %d\n",run,mc,sc,a,b,total,commtotal);//运行,时间,误码率_分,误码率_总,字节数_分
	csf.WriteString(str);
	csf.Close();
}
void CUManageView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(app->ShowMouseFlag==0)
	{
		ShowCursor(TRUE);
		app->ShowMouseFlag=1;
	}
	CRichEditView::OnMouseMove(nFlags, point);
}

⌨️ 快捷键说明

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