⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 一个很好的串口监视程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				m_unCycTimer=0;
				AfxMessageBox("报文格式不对!组合键Ctrl+Alt+P分析错误!");
			}
		}
		break;
	case 102:
		{
			SendLine(m_btTriggerCOM,m_dlgSend.Trigger[m_btTrigger].unTrigger-1);			
			KillTimer(102);
		}
		break;
	case 103:
		{
			if(!AutoSave.bSave&&!AutoSave.bClear)	KillTimer(103);
			if(AutoSave.bSave)
			{
				CTime ttmp=CTime::GetCurrentTime();
				CString strs;
				strs.Format ("%04d%02d%02d %02d%02d",ttmp.GetYear (),ttmp.GetMonth (),ttmp.GetDay (),
					ttmp.GetHour(),ttmp.GetMinute());
				strs=AutoSave.strPath+strs+".pcf";
				GetView()->SaveFile(strs);
				strs.Empty();
			}
			if(AutoSave.bClear)	SendMessage(WM_COMMAND,ID_SCC_CLEARDATA);
		}
		break;
	}
	CGuiFrameWnd::OnTimer(nIDEvent);
}

void CMainFrame::OnFileOpen() 
{
	// TODO: Add your command handler code here
	CString strs=GetRWPath(1,"打开串口监视报文");
	if(!strs.IsEmpty())
	{
		if(GetView()->LoadFile(strs))	AfxGetApp()->AddToRecentFileList(strs);
		strs.Empty();
	}
}

void CMainFrame::OnFileXsave() 
{
	// TODO: Add your command handler code here
	CTime ttmp=CTime::GetCurrentTime();
	CString strs;
	strs.Format ("%04d%02d%02d %02d%02d",ttmp.GetYear (),ttmp.GetMonth (),ttmp.GetDay (),
		ttmp.GetHour(),ttmp.GetMinute());
	strs=GetRWPath(0,"保存串口监视报文",strs);
	if(!strs.IsEmpty())
	{
		if(GetView()->SaveFile(strs))	AfxGetApp()->AddToRecentFileList(strs);
		strs.Empty();
	}
}

void CMainFrame::OnUpdateFileXsave(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable(GetView()->IsModifyed());
}

void CMainFrame::OnSCCMRU(UINT nID)
{
	int nIndex = nID - ID_FILE_MRU_FILE1;
	ASSERT((*(theApp.GetFileList()))[nIndex].GetLength() != 0);
	if (!GetView()->LoadFile((*(theApp.GetFileList()))[nIndex]))
		theApp.RemoveFile(nIndex);
}
void CMainFrame::OnSCCView(UINT nID)
{
	int ny=GetSystemMetrics(SM_CYSCREEN);
	int nx=GetSystemMetrics(SM_CXSCREEN);
	if(nID==ID_VIEW_CENTER)	MoveWindow(CRect(nx/4,ny/4,nx*3/4,ny*3/4));
	else if(nID==ID_VIEW_TOPHARF)		MoveWindow(CRect(0,0,nx,ny/2));
	else if(nID==ID_VIEW_BOTTOMHARF)	MoveWindow(CRect(0,ny/2,nx,ny));
	else if(nID==ID_VIEW_LEFTHARF)		MoveWindow(CRect(0,0,nx/2,ny));
	else if(nID==ID_VIEW_RIGHTHARF)		MoveWindow(CRect(nx/2,0,nx,ny));
	else if(nID==ID_ALWAYSONTOP)	
	{
		DWORD dwConfig=AfxGetApp()->GetProfileInt("Settings","Common",1);
		if(GetExStyle()&WS_EX_TOPMOST)
		{
			SetWindowPos(&wndNoTopMost,0, 0, 0, 0,SWP_NOSIZE|SWP_NOMOVE);
			dwConfig&=0xFEFF;
		}
		else
		{
			SetWindowPos(&wndTopMost,0, 0, 0, 0,SWP_NOSIZE|SWP_NOMOVE);
			dwConfig|=0x100;
		}
		AfxGetApp()->WriteProfileInt("Settings","Common",dwConfig);
	}
	else if(nID==ID_ADVANCE_SEND)	
	{
		m_dlgSend.ShowWindow(1);
		m_dlgSend.SetFocus();
	}
	else if(nID==ID_SCC_CYCSEND)
	{
		if(m_unCycTimer==0)	
		{
			m_unCycTimer=SetTimer(101,m_dlgSend.m_unTime,NULL);
			m_unMulti=m_dlgSend.m_unStart;
		}
		else
		{
			KillTimer(m_unCycTimer);
			m_unCycTimer=0;
		}
	}
	else if(nID==ID_SCC_TRIGGER)
	{
		m_bTrigger=!m_bTrigger;
	}
	else if(nID==ID_SCC_TRANSMIT)
	{
		CTransmit dlgTrans;
		if(dlgTrans.DoModal()==IDCANCEL)
		{
			Trasmt.bCOM=dlgTrans.m_bCOM;
			Trasmt.btCOM1=dlgTrans.m_btCOM1;
			Trasmt.btCOM2=dlgTrans.m_btCOM2;
		}
	}
	else if(nID==ID_FILE_AUTOSAVE)
	{
		CDlgAutoSave dlgAS;
		dlgAS.m_bAS=AutoSave.bSave;
		dlgAS.m_bClear=AutoSave.bClear;
		dlgAS.m_nASTime=AutoSave.nTime;
		dlgAS.m_strPath=AutoSave.strPath;
		if(dlgAS.DoModal()==IDOK)
		{
			KillTimer(103);
			AutoSave.strPath=dlgAS.m_strPath;
			AutoSave.bClear=dlgAS.m_bClear;
			AutoSave.bSave=dlgAS.m_bAS;
			AutoSave.nTime=dlgAS.m_nASTime;
			if(AutoSave.bSave||AutoSave.bClear)	
				SetTimer(103,AutoSave.nTime*60*1000,NULL);
		}
	}
	else if(nID==ID_SHOW_FILTER)
	{
		m_dlgFilter.ShowWindow(1);
		m_dlgFilter.SetFocus();
	}
	else if(nID==ID_FILE_OPENS)
	{
		CString strs=GetRWPath(1,"打开发送窗报文");
		if(!strs.IsEmpty())
		{
			m_wndSF.m_xrec.LoadFile(strs);
			strs.Empty();
		}
	}
	else if(nID==ID_FILE_SAVESEND)
	{
		CString strs=GetRWPath(0,"保存发送窗报文","SCC");
		if(!strs.IsEmpty())
		{
			m_wndSF.m_xrec.SaveFile(strs);
			strs.Empty();
		}
	}
}
void CMainFrame::OnUpdateSCCView(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if(pCmdUI->m_nID ==ID_ALWAYSONTOP)	pCmdUI->SetCheck(GetExStyle()&WS_EX_TOPMOST);
	else if(pCmdUI->m_nID ==ID_ADVANCE_SEND)	
	{
	//	pCmdUI->SetCheck(m_dlgSend.IsWindowVisible());
	//	pCmdUI->SetText(m_dlgSend.IsWindowVisible()?"隐藏高级发送窗(&A)":"显示高级发送窗(&A)");
	}
	else if(pCmdUI->m_nID ==ID_SCC_CYCSEND)	
	{
		pCmdUI->SetCheck(m_unCycTimer!=0);
	}
	else if(pCmdUI->m_nID ==ID_SCC_TRIGGER)	
	{
		pCmdUI->SetCheck(m_bTrigger);
	}
	else if((pCmdUI->m_nID ==ID_FILE_OPENS)	||(pCmdUI->m_nID ==ID_FILE_SAVESEND))
	{
		pCmdUI->Enable(m_wndSF.IsVisible());
	}
}

void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu) 
{
//	CGuiFrameWnd::OnMenuSelect(nItemID, nFlags, hSysMenu);
	
	// TODO: Add your message handler code here
	if ((ID_FILE_MRU_FILE1<=nItemID && nItemID<=ID_FILE_MRU_FILE16) 
		||(nItemID==ID_SCC_OPEN)||(nItemID==ID_SCC_PAUSE))
	{
		CString sFileName;
		if(nItemID==ID_SCC_OPEN)
		{
			sFileName.Format("COM%d",m_nCurCOM+1);
			if(IsCOMOpen())	sFileName="关闭"+sFileName;
			else	sFileName="打开"+sFileName;
		}
		else if(nItemID==ID_SCC_PAUSE)
		{
			sFileName=(m_bPauseDis?"继续报文监视":"暂停报文监视");
		}
	//	else if(nItemID==ID_ADVANCE_SEND)
	//	{
		//	sFileName=(m_dlgSend.IsWindowVisible()?"隐藏高级发送窗":"显示高级发送窗");
	//	}
		else
		{
			sFileName=(*(theApp.GetFileList()))[nItemID-ID_FILE_MRU_FILE1];
			if(!sFileName.IsEmpty())	sFileName=_T("打开文件 ")+sFileName;
		}
		if(!sFileName.IsEmpty())
			SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)(LPCTSTR)sFileName);
		sFileName.Empty();
	}
	else 	CGuiFrameWnd::OnMenuSelect(nItemID, nFlags, hSysMenu);
}

BOOL CMainFrame::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)
{
	ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

	// need to handle both ANSI and UNICODE versions of the message
	TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
	TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
	TCHAR szFullText[256];
	CString strTipText;
	UINT nID = pNMHDR->idFrom;
	if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
		pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
	{
		// idFrom is actually the HWND of the tool
		nID = ::GetDlgCtrlID((HWND)nID);
	}
	if(nID==ID_SCC_OPEN)
	{
		strTipText.Format("COM%d",m_nCurCOM+1);
		if(IsCOMOpen())	strTipText="关闭"+strTipText;
		else	strTipText="打开"+strTipText;	
		SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)(LPCTSTR)strTipText);
	}
	else if(nID==ID_SCC_PAUSE)
	{
		strTipText=(m_bPauseDis?"继续报文监视":"暂停报文监视");
		SendMessage(WM_SETMESSAGESTRING, 0, (LPARAM)(LPCTSTR)strTipText);
	}
//	else if(nID==ID_ADVANCE_SEND)
//	{
	//	strTipText=(m_dlgSend.IsWindowVisible()?"隐藏高级发送窗":"显示高级发送窗");
//	}
	else if (nID != 0) // will be zero on a separator
	{
		// don't handle the message if no string resource found
		if (AfxLoadString(nID, szFullText) == 0)
			return FALSE;

		// this is the command id, not the button index
		AfxExtractSubString(strTipText, szFullText, 1, '\n');
	}
#ifndef _UNICODE
	if (pNMHDR->code == TTN_NEEDTEXTA)
		lstrcpyn(pTTTA->szText, strTipText, _countof(pTTTA->szText));
	else
		_mbstowcsz(pTTTW->szText, strTipText, _countof(pTTTW->szText));
#else
	if (pNMHDR->code == TTN_NEEDTEXTA)
		_wcstombsz(pTTTA->szText, strTipText, _countof(pTTTA->szText));
	else
		lstrcpyn(pTTTW->szText, strTipText, _countof(pTTTW->szText));
#endif
	*pResult = 0;

	// bring the tooltip window above other popup windows
	::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,
		SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);
	strTipText.Empty();
	return TRUE;    // message was handled
}


void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
{
	CGuiFrameWnd::OnActivate(nState, pWndOther, bMinimized);
	
	// TODO: Add your message handler code here
//	m_dlgSend.SetTransper(23);
}

int CMainFrame::IsTriggerLine(CString str)
{
	for(int i=0;i<TRIGGER_MAX;i++)
	{
		if(m_dlgSend.Trigger[i].bValiu)
		{
			if(str==m_wndSF.m_xrec.GetLineStr(m_dlgSend.Trigger[i].unLine-1))
				return i;
			//	return m_dlgSend.Trigger[i].unTrigger;
		}
	}
	return -1;
}

void CMainFrame::Transmits(int nCOM,LPBYTE lpbt, int nLength)
{
	if(!Trasmt.bCOM)	return;
	CString str;
	if(Trasmt.btCOM1==nCOM+1)	nCOM=Trasmt.btCOM2-1;
	else if(Trasmt.btCOM2==nCOM+1)	nCOM=Trasmt.btCOM1-1;
	if(!IsCOMOpen(nCOM))	return;
	if(m_bAscRecv)	str=((CString)lpbt).Left (nLength);
	else	str=CSCCTools::HexToStr(lpbt,nLength);
	DisplayStr(str,nCOM,0);
	GetCOM(nCOM)->WriteData(lpbt,nLength);
	str.Empty();
}

BOOL CMainFrame::IsFilterFrame(LPBYTE lpb, int nLength)
{
	if(!m_dlgFilter.m_bFilter)	return 1;
	BOOL bFilter=1;
	for(int i=0;i<FILTER_MAX;i++)
	{
		if(m_dlgFilter.Filter[i].bFilter)
		{
			bFilter=0;
			if(m_dlgFilter.Filter[i].btNo>nLength)	return 0;
			if(lpb[m_dlgFilter.Filter[i].btNo-1]==m_dlgFilter.Filter[i].btValiu)
				return 1;
		}
	}
	return bFilter;
}

CString CMainFrame::GetRWPath(BOOL bOpen, LPCSTR lpstr,LPCSTR lpstrName)
{
	CString strs;
	CFileDialog* dlgFileOpen=new CFileDialog(bOpen,".pcf",lpstrName); 
	dlgFileOpen->m_ofn.lStructSize=(GetVersion() < 0x80000000)?88:76; 
	dlgFileOpen->m_ofn .lpstrFilter ="PCStudio Frame Files(*.pcf)\0*.pcf\0";
	dlgFileOpen->m_ofn.lpstrTitle =lpstr;
	strs.Empty ();	
	if(dlgFileOpen->DoModal()==IDOK)	strs=dlgFileOpen->GetPathName();
	delete dlgFileOpen;
	dlgFileOpen=NULL;
	return strs;
}

void CMainFrame::SaveIni()
{
//	CFile fIni("conf.ini")
}

⌨️ 快捷键说明

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