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