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

📄 cetoolsview.cpp

📁 串口通讯演示程序
💻 CPP
字号:
// CeToolsView.cpp : implementation of the CCeToolsView class
//

#include "stdafx.h"
#include "CeTools.h"

#include "CeToolsDoc.h"
#include "CeToolsView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCeToolsView

IMPLEMENT_DYNCREATE(CCeToolsView, CFormView)

BEGIN_MESSAGE_MAP(CCeToolsView, CFormView)
	//{{AFX_MSG_MAP(CCeToolsView)
	ON_WM_SIZE()
	ON_WM_CREATE()
	ON_WM_TIMER()
	ON_CBN_SELCHANGE(IDC_COMBO_BAUD, OnSelchangeComboBaud)
	ON_CBN_SELCHANGE(IDC_COMBO_PORTNO, OnSelchangeComboPortno)
	ON_WM_MOUSEMOVE()
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
	ON_MESSAGE(OUTBAR_NOTIFY, OnOutbarNotify)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCeToolsView construction/destruction

CCeToolsView::CCeToolsView()
	: CFormView(CCeToolsView::IDD)
{
	//{{AFX_DATA_INIT(CCeToolsView)
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CCeToolsView::~CCeToolsView()
{
//	if(m_bitmap.m_hObject!=NULL)
//		m_bitmap.DeleteObject();
}

void CCeToolsView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCeToolsView)
	DDX_Control(pDX, IDC_PROGRESS8, m_Progress8_Ctrl);
	DDX_Control(pDX, IDC_PROGRESS7, m_Progress7_Ctrl);
	DDX_Control(pDX, IDC_COMBO_PORTNO, m_Combo_PortNo_Ctrl);
	DDX_Control(pDX, IDC_COMBO_BAUD, m_Combo_Baud_Ctrl);
	DDX_Control(pDX, IDC_PROGRESS3, m_Progress3_Ctrl);
	DDX_Control(pDX, IDC_PROGRESS2, m_Progress2_Ctrl);
	//}}AFX_DATA_MAP
}

BOOL CCeToolsView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFormView::PreCreateWindow(cs);
}

void CCeToolsView::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();


	app = (CCeToolsApp *)AfxGetApp();

	InitSet();
	SetTimer(1,100,NULL);
	InitRv();
	ShowRev(SW_SHOW);
	ShowSet(SW_HIDE);

}

/////////////////////////////////////////////////////////////////////////////
// CCeToolsView printing

BOOL CCeToolsView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CCeToolsView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CCeToolsView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

void CCeToolsView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
	// TODO: add customized printing code here
}

/////////////////////////////////////////////////////////////////////////////
// CCeToolsView diagnostics
/*
#ifdef _DEBUG
void CCeToolsView::AssertValid() const
{
	CFormView::AssertValid();
}

void CCeToolsView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}

CCeToolsDoc* CCeToolsView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCeToolsDoc)));
	return (CCeToolsDoc*)m_pDocument;
}
#endif //_DEBUG
*/
/////////////////////////////////////////////////////////////////////////////
// CCeToolsView message handlers

void CCeToolsView::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	
}


int CCeToolsView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	return 0;
}
long CCeToolsView::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
{
	switch(wParam)
	{
	case 1:
		UseTool.CurUseSubTool=lParam;
		if(UseTool.CurUseTool==0)
		{
			app->CurRevType=UseTool.CurUseSubTool;
			switch(UseTool.CurUseSubTool)
			{
			case 0://无编码
				app->BmState=0;
				break;
			case 1://有编码
				app->BmState=1;
				break;
			case 2://解码
				break;
			case 3://停止
				break;
			}
		}
		else
			SaveSetData();
		break;
	case 5:
		UseTool.CurUseTool=lParam;
		switch(lParam)
		{
		case 0:
			ShowRev(SW_SHOW);
			ShowSet(SW_HIDE);
			break;
		case 1:
			ShowRev(SW_HIDE);
			ShowSet(SW_SHOW);
			ShowSetData();
			break;
		}
		UseTool.PreUseTool=UseTool.CurUseTool;
		break;
	}
	return 0;
}

void CCeToolsView::ShowRev(int show)
{
	if(m_Progress2_Ctrl.m_hWnd==NULL)
		return;
	if(m_Progress3_Ctrl.m_hWnd==NULL)
		return;
	if(m_Progress7_Ctrl.m_hWnd==NULL)
		return;
	if(m_Progress8_Ctrl.m_hWnd==NULL)
		return;
	if(m_Static5_Ctrl.m_hWnd==NULL)
		return;
	if(m_Static6_Ctrl.m_hWnd==NULL)
		return;
	if(m_Static7_Ctrl.m_hWnd==NULL)
		return;
	if(m_Static9_Ctrl.m_hWnd==NULL)
		return;
	if(m_Static28_Ctrl.m_hWnd==NULL)
		return;
	if(m_Static11_Ctrl.m_hWnd==NULL)
		return;
	m_Static5_Ctrl.ShowWindow(show);
	m_Static6_Ctrl.ShowWindow(show);
	m_Static7_Ctrl.ShowWindow(show);
	m_Static9_Ctrl.ShowWindow(show);
	m_Static28_Ctrl.ShowWindow(show);
	m_Static11_Ctrl.ShowWindow(show);
	m_Progress2_Ctrl.ShowWindow(show);
	m_Progress3_Ctrl.ShowWindow(show);
	m_Progress7_Ctrl.ShowWindow(show);
	m_Progress8_Ctrl.ShowWindow(show);

	ViewPause=0;
}

void CCeToolsView::OnTimer(UINT nIDEvent) 
{
	ViewData();//接收数据

	CFormView::OnTimer(nIDEvent);
}


void CCeToolsView::ShowSet(int show)
{
	if(m_Static24_Ctrl.m_hWnd==NULL)
		return;
	if(m_Static25_Ctrl.m_hWnd==NULL)
		return;
	if(m_Combo_PortNo_Ctrl.m_hWnd==NULL)
		return;
	if(m_Combo_Baud_Ctrl.m_hWnd==NULL)
		return;

	m_Static24_Ctrl.ShowWindow(show);
	m_Static25_Ctrl.ShowWindow(show);

	m_Combo_PortNo_Ctrl.ShowWindow(show);
	m_Combo_Baud_Ctrl.ShowWindow(show);

	if(RadioButton1.m_hWnd!=NULL)
		RadioButton1.ShowWindow(show);
	if(RadioButton3.m_hWnd!=NULL)
		RadioButton3.ShowWindow(show);
}

void CCeToolsView::InitSet()
{

	m_Static24_Ctrl.SubclassDlgItem(IDC_STATIC24, this);
	m_Static24_Ctrl.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	m_Static24_Ctrl.SetBkColor(RGB(255,255,255));

	m_Static25_Ctrl.SubclassDlgItem(IDC_STATIC25, this);
	m_Static25_Ctrl.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	m_Static25_Ctrl.SetBkColor(RGB(255,255,255));

	RadioButton1.SubclassDlgItem(IDC_RADIO1,this);
	RadioButton1.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	RadioButton1.SetBkColor(RGB(255,255,255));

	RadioButton3.SubclassDlgItem(IDC_RADIO3,this);
	RadioButton3.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	RadioButton3.SetBkColor(RGB(255,255,255));

	SetBkImage(MAKEINTRESOURCE(IDB_BITMAP1));
//读配置
	app->SetParam.PortNo=AfxGetApp()->GetProfileInt(_T("SetRParam"),_T("PortNo"),0);
	app->SetParam.Baud=AfxGetApp()->GetProfileInt(_T("SetRParam"),_T("PortBaud"),6);
	app->RunNT=AfxGetApp()->GetProfileInt(_T("SetRParam"),_T("RunNT"),0);
	app->SetParam.Modified=0;
}

void CCeToolsView::OnDraw(CDC* pDC) 
{

 	CRect rcClient;
 	GetClientRect(&rcClient);

	EraseBkgnd(pDC,&rcClient);
}

BOOL CCeToolsView::EraseBkgnd(CDC *pDC,CRect *rect)
{
	CDC dc;
	dc.CreateCompatibleDC(pDC);
	dc.SelectObject(m_bitmap);

	BITMAP bm;
	int bmwidth,bmheight;
	m_bitmap.GetBitmap(&bm);
	bmwidth=bm.bmWidth;
	bmheight=bm.bmHeight;

	int i,j,x,y;
	x=(rect->right-rect->left+bmwidth)/bmwidth;
	y=(rect->bottom-rect->top+bmheight)/bmheight;
	for(i=0;i<x;i++)
		for(j=0;j<y;j++)
			pDC->BitBlt(i*bmwidth,j*bmheight,bmwidth,bmheight,&dc,0,0,SRCCOPY);

	return TRUE;
}

BOOL CCeToolsView::SetBkImage(LPCTSTR lpszResourceName)
{
	if(m_bitmap.m_hObject!=NULL)
		m_bitmap.DeleteObject();
	HBITMAP hBmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),
		lpszResourceName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
	if(hBmp==NULL)
		return FALSE;
	m_bitmap.Attach(hBmp);

	return TRUE;
}
void CCeToolsView::SaveSetData()
{
	CString str;
	if(app->SetParam.Modified!=1)
		return;
	app->SetParam.PortNo=m_Combo_PortNo_Ctrl.GetCurSel();
	app->SetParam.Baud=m_Combo_Baud_Ctrl.GetCurSel();

	AfxGetApp()->WriteProfileInt(_T("SetRParam"),_T("PortNo"),app->SetParam.PortNo);
	AfxGetApp()->WriteProfileInt(_T("SetRParam"),_T("PortBaud"),app->SetParam.Baud);
	app->SetParam.Modified=0;
}

void CCeToolsView::ShowSetData()
{
	m_Combo_PortNo_Ctrl.SetCurSel(app->SetParam.PortNo);
	m_Combo_Baud_Ctrl.SetCurSel(app->SetParam.Baud);

	if(RadioButton1.m_hWnd!=NULL)
		if(app->RunNT!=1)
			RadioButton1.SetCheck(TRUE);
	if(RadioButton3.m_hWnd!=NULL)
		if(app->RunNT)
			RadioButton3.SetCheck(TRUE);

	app->SetParam.Modified=0;
}

void CCeToolsView::OnSelchangeComboBaud() 
{
	app->SetParam.Modified=1;
}

void CCeToolsView::OnSelchangeComboPortno() 
{
	app->SetParam.Modified=1;
}

int CCeToolsView::StringToByte(CString *str, BYTE *buf, int MaxLen,int flag)
{
	CString str1,str2;
	int i,m,k;
//flag 0:16进制 1:10进制
	m=str->GetLength();
	str2.Empty();
	k=0;
	for(i=0;i<m;i++)
	{
		str1=str->Mid(i,1);
		if(str1!=" ")
			str2+=str1;
		else
		{
			if(!str2.IsEmpty())
			{
				if(flag)
					sscanf(str2,"%02d",&buf[k]);
				else
					sscanf(str2,"%02x",&buf[k]);
				str2.Empty();
				k++;
				if(k>=MaxLen)
					break;
			}
		}
	}
	if(k<MaxLen)
	{
		if(!str2.IsEmpty())
		{
			if(flag)
				sscanf(str2,"%02d",&buf[k]);
			else
				sscanf(str2,"%02x",&buf[k]);
			str2.Empty();
			k++;
		}
	}
	return k;
}
int CCeToolsView::ViewData() 
{
	CString str,str1;

	m_Progress2_Ctrl.SetPos((int)app->ErrCodeRate.ErrCodeRate);
	str.Format("误码率A:%2.2f",app->ErrCodeRate.ErrCodeRate);
	str+="%";
	m_Static5_Ctrl.SetWindowText(str);

	m_Progress3_Ctrl.SetPos((int)app->ErrCodeRate2.ErrCodeRate);
	str.Format("误码率B:%2.2f",app->ErrCodeRate2.ErrCodeRate);
	str+="%";
	m_Static6_Ctrl.SetWindowText(str);

	app->ErrCodeRate_t.ErrCodeRate=app->ExpErrRate(app->ErrCodeRate_t.ErrLen,app->ErrCodeRate_t.TotalLen);
	m_Progress7_Ctrl.SetPos((int)app->ErrCodeRate_t.ErrCodeRate);
	
	str.Format("总误码率A:%2.2f",app->ErrCodeRate_t.ErrCodeRate);
	str+="%";
	m_Static7_Ctrl.SetWindowText(str);
	str.Format("%d/%d  运行%d 秒",app->ErrCodeRate_t.ErrLen,app->ErrCodeRate_t.TotalLen,app->TotalRunTime);
	m_Static28_Ctrl.SetWindowText(str);

	app->ErrCodeRate2_t.ErrCodeRate=app->ExpErrRate(app->ErrCodeRate2_t.ErrLen,app->ErrCodeRate2_t.TotalLen);
	m_Progress8_Ctrl.SetPos((int)app->ErrCodeRate2_t.ErrCodeRate);
	str.Format("总误码率B:%2.2f",app->ErrCodeRate2_t.ErrCodeRate);
	str+="%";
	m_Static9_Ctrl.SetWindowText(str);
	str.Format("%d/%d  运行%d 秒",app->ErrCodeRate2_t.ErrLen,app->ErrCodeRate2_t.TotalLen,app->TotalRunTime);
	m_Static11_Ctrl.SetWindowText(str);
	return 1;
}
void CCeToolsView::InitRv()
{
	ListViewCount=1000;

	m_Static5_Ctrl.SubclassDlgItem(IDC_STATIC5, this);
	m_Static5_Ctrl.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	m_Static5_Ctrl.SetBkColor(RGB(255,255,255));
	m_Static6_Ctrl.SubclassDlgItem(IDC_STATIC6, this);
	m_Static6_Ctrl.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	m_Static6_Ctrl.SetBkColor(RGB(255,255,255));
	m_Static7_Ctrl.SubclassDlgItem(IDC_STATIC7, this);
	m_Static7_Ctrl.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	m_Static7_Ctrl.SetBkColor(RGB(255,255,255));
	m_Static9_Ctrl.SubclassDlgItem(IDC_STATIC9, this);
	m_Static9_Ctrl.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	m_Static9_Ctrl.SetBkColor(RGB(255,255,255));
	m_Static28_Ctrl.SubclassDlgItem(IDC_STATIC28, this);
	m_Static28_Ctrl.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	m_Static28_Ctrl.SetBkColor(RGB(255,255,255));
	m_Static11_Ctrl.SubclassDlgItem(IDC_STATIC11, this);
	m_Static11_Ctrl.SetTextColor(::GetSysColor(COLOR_INFOTEXT));
	m_Static11_Ctrl.SetBkColor(RGB(255,255,255));

	m_Static5_Ctrl.SetWindowText("误码率A:0%");
	m_Progress2_Ctrl.SetRange32(0,100);
	m_Static6_Ctrl.SetWindowText("误码率B:0%");
	m_Progress3_Ctrl.SetRange32(0,100);
	m_Static7_Ctrl.SetWindowText("总误码率A:");
	m_Progress7_Ctrl.SetRange32(0,100);
	m_Static9_Ctrl.SetWindowText("总误码率B:");
	m_Progress8_Ctrl.SetRange32(0,100);
}

void CCeToolsView::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;
	}
	
	CFormView::OnMouseMove(nFlags, point);
}

void CCeToolsView::OnRadio1() 
{
	app->RunNT=FALSE;
	AfxGetApp()->WriteProfileInt(_T("SetRParam"),_T("RunNT"),app->RunNT);
}

void CCeToolsView::OnRadio3() 
{
	app->RunNT=TRUE;
	AfxGetApp()->WriteProfileInt(_T("SetRParam"),_T("RunNT"),app->RunNT);
}

⌨️ 快捷键说明

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