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

📄 rtlrightview.cpp

📁 一个串口通信的程序
💻 CPP
字号:
// RtlRightView.cpp : implementation file
//

#include "stdafx.h"
#include "DataSvr.h"
#include "RtlRightView.h"
#include "glovar.h"

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

/////////////////////////////////////////////////////////////////////////////
// CRtlRightView
#define DISTEXTHIGH 7

IMPLEMENT_DYNCREATE(CRtlRightView, CView)

CRtlRightView::CRtlRightView()
{
	Font1.CreatePointFont(DISTEXTHIGH*10,"Arial");
//	Font2.CreatePointFont(10,"System");
	Font2.CreateFont(
	   12,                        // nHeight
	   0,                         // nWidth
	   0,                         // nEscapement
	   0,                         // nOrientation
	   FW_NORMAL,                 // nWeight
	   FALSE,                     // bItalic
	   FALSE,                     // bUnderline
	   0,                         // cStrikeOut
	   GB2312_CHARSET,	          // nCharSet
	   OUT_DEFAULT_PRECIS,        // nOutPrecision
	   CLIP_DEFAULT_PRECIS,       // nClipPrecision
	   DEFAULT_QUALITY,           // nQuality
	   DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
	   "Arial");                 
	WhichCurve = -1;
	LOGBRUSH lb;
	lb.lbStyle = BS_SOLID;
	lb.lbColor = RGB(255,0,0);
	
	LineBrush.CreateBrushIndirect(&lb);

	BluePen.CreatePen(PS_SOLID, 1, RGB(0,0,125));   
	GreenPen.CreatePen(PS_SOLID, 1, RGB(0,255,0));   
	RedPen.CreatePen(PS_SOLID , 1, RGB(255,0,0));   

}

CRtlRightView::~CRtlRightView()
{
}


BEGIN_MESSAGE_MAP(CRtlRightView, CView)
	ON_MESSAGE(WM_SHOWVALUE,ShowValue)
	//{{AFX_MSG_MAP(CRtlRightView)
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRtlRightView drawing

void CRtlRightView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	int viewcount=0;

	CRect rect;
	GetClientRect( &rect );
//	rect.right -= cxVScroll;
//	pDC->MoveTo(0, 1);
//	pDC->LineTo(rect.right, rect.bottom);

	int viewh=rect.Height()/5;
	int vieww=rect.Width();

	int OldBKMode = pDC->SetBkMode( TRANSPARENT );
	COLORREF OldColor = pDC->SetTextColor(RGB(128,128,128));
	CFont *OldFont=(CFont *)pDC->SelectObject(CFont::FromHandle(Font2));
	CBrush *OldBrush = pDC->SelectObject( &LineBrush);
	CPen *OldPen=pDC->SelectObject(&BluePen);

	for(int i=0;i<arrRT.GetSize();i++)
	{
		NPRT nprt=arrRT.GetAt(i);
		NPCD npcd;
		NPYB npyb;
		NPCS npcs;
		for(int j=0;j<arrCD.GetSize();j++)
		{
			npcd=arrCD.GetAt(j);
			if(npcd->cdid==nprt->cdid)break;
		}
		for(j=0;j<arrCS.GetSize();j++)
		{
			npcs=arrCS.GetAt(j);
			if(npcs->csid==nprt->csid)break;
		}
		for(j=0;j<arrYB.GetSize();j++)
		{
			npyb=arrYB.GetAt(j);
			if(npyb->ybid==npcd->ybid)break;
		}
		float maxvalue=nprt->hisory[0],minvalue=nprt->hisory[0];
		
		for(j=0;j<200;j++)
		{
			if(nprt->hisory[j]>nprt->range_low && nprt->hisory[j]<nprt->range_hi || !nprt->warn_enble)
			{
				if(nprt->hisory[j]>maxvalue)maxvalue=nprt->hisory[j];
				if(nprt->hisory[j]<minvalue)minvalue=nprt->hisory[j];
			}
		}

//		maxvalue=nprt->range_hi ; minvalue=nprt->range_low ;
//		float temp = 0 ;
//		if(minvalue>maxvalue){temp=minvalue;minvalue=maxvalue;maxvalue=temp;}
		if(maxvalue-minvalue==0)minvalue-=minvalue/100;
		if(maxvalue==minvalue && minvalue==0)maxvalue=1;
		if(nprt->view)
		{
			CString str;
			str.Format("%s %s",npcd->cdname,npcs->csname);
			pDC->SetTextAlign(TA_RIGHT);
			pDC->SelectObject(CFont::FromHandle(Font2));
			pDC->TextOut(vieww-1,viewcount*viewh,str);
			pDC->SetTextAlign(TA_LEFT);
			pDC->SelectObject(CFont::FromHandle(Font1));
			pDC->SelectObject(&BluePen);
			str.Format("%f",maxvalue);
			pDC->TextOut(1,viewcount*viewh+7,str);
			str.Format("%f",minvalue);
			pDC->TextOut(1,(viewcount+1)*viewh-11,str);
			str.Format("%f",(minvalue+maxvalue)/2);
			pDC->TextOut(1,(viewcount+0.5)*viewh+2,str);
//			pDC->SetTextColor(RGB(255,0,0));
//			pDC->MoveTo(0,viewh*viewcount);pDC->LineTo(vieww,viewh);
			int begin=nprt->hendp;
			int x,y,xx;
			x=2;y=viewh*(viewcount)+11;
			pDC->MoveTo(x,y);
			pDC->LineTo(vieww-2,y);
			x=2;y=viewh*(viewcount+1)-1;
			pDC->MoveTo(x,y);
			pDC->LineTo(vieww-2,y);
			x=2;y=viewh*(viewcount+0.5)+5;
			pDC->MoveTo(x,y);
			pDC->LineTo(vieww-2,y);
			for(int jjj=0;jjj<=11;jjj++)
			{
				x=2+(vieww-4)*jjj/10;y=viewcount*viewh+11;
				pDC->MoveTo(x,y);
				pDC->LineTo(x,(viewcount+1)*viewh-1);

			}

			pDC->SelectObject(&GreenPen);
			xx=(vieww-4)/200;
			x=2;
			y=(int)(((viewcount+1)*viewh-2)-(nprt->hisory[begin]-minvalue)*(viewh-13)/(maxvalue-minvalue));
			pDC->MoveTo(x,y);
			for(int j=1;j<200;j++)
			{
//				x+=xx;
				x=(vieww-4)*j/200;
				begin=(begin+1)%200;
				//++begin%=100;
				y=(int)(((viewcount+1)*viewh-2)-(nprt->hisory[begin]-minvalue)*(viewh-13)/(maxvalue-minvalue));
				if(( nprt->hisory[begin]<=nprt->range_hi && nprt->hisory[begin]>=nprt->range_low) || !nprt->warn_enble)
				{
//					pDC->MoveTo(x,y);
					pDC->LineTo(x,y);
				}
			}
			str.Format("%s %s",npcd->cdname,npcs->csname);
			pDC->SetTextAlign(TA_RIGHT);
			pDC->SelectObject(CFont::FromHandle(Font2));
			pDC->TextOut(vieww-1,viewcount*viewh,str);
			pDC->SetTextAlign(TA_LEFT);
			pDC->SelectObject(CFont::FromHandle(Font1));
			pDC->SelectObject(&BluePen);
			str.Format("%f",maxvalue);
			pDC->TextOut(1,viewcount*viewh+7,str);
			str.Format("%f",minvalue);
			pDC->TextOut(1,(viewcount+1)*viewh-11,str);
			str.Format("%f",(minvalue+maxvalue)/2);
			pDC->TextOut(1,(viewcount+0.5)*viewh+2,str);
			viewcount++;
		}
	}
	pDC->SetBkMode( OldBKMode );
	pDC->SetTextColor( OldColor );
	pDC->SelectObject( OldFont );
	pDC->SelectObject( OldBrush);
	pDC->SelectObject( OldPen);
/*	CRect rect;
	GetClientRect( &rect );
	rect.right -= cxVScroll;
	int OldBKMode = pDC->SetBkMode( TRANSPARENT );
	CFont *OldFont=(CFont *)pDC->SelectObject(CFont::FromHandle(Font1));
	pDC->TextOut(rect.right+2,-1,"s");
	pDC->MoveTo(0, 1);
	pDC->LineTo(rect.right, 1);

	double *RelateTime = pDoc->RelateTime;
	double m_XSizeFactor = pDoc->m_XSizeFactor;
	unsigned long EndSampNum = pDoc->EndSampNum;
	unsigned long PageFromSampNum=pDoc->PageFromSampNum;
	unsigned long LCursor = pDoc->LCursor;
	unsigned long RCursor = pDoc->RCursor;
	double LCursorA = pDoc->LCursorA;
	double RCursorA = pDoc->RCursorA;
	int nWhichCurve = pDoc->nWhichCurve;
	if(nWhichCurve >= 0) 
		WhichCurve = nWhichCurve;
	if(WhichCurve >= 0) 
	{
		Channel* m_pChannel = &(pDoc->m_pChannel[WhichCurve]);
		double a = m_pChannel->a;
		double b = m_pChannel->b;
		LCursorA = a*LCursorA+b;
		RCursorA = a*RCursorA+b;
	}

	CString strTemp;
	strTemp.Format("%-10.3f",RelateTime[EndSampNum-1]/1000);
	strTemp.TrimRight();
	CSize size=pDC->GetTextExtent(strTemp);
	int step = size.cx;
	int cyH = DISTEXTHIGH+1;
	int nGrid = 0;
	int xcStart = 0;
	int xlstartA = 0;
	ShortNode *pShortNode = pDoc->m_pShortNode;
	while(pShortNode[xlstartA].lend <= PageFromSampNum) 
		xlstartA ++;
	xlstartA--;
	int& ShortNodeNum=pDoc->ShortNodeNum;
	unsigned long lli = PageFromSampNum;
	while(xlstartA < ShortNodeNum)
	{
		while(xlstartA < ShortNodeNum && pShortNode[xlstartA].bShow==0)
		{
			int tw;
			if(lli == pShortNode[xlstartA].lend)
				tw = pDoc->ShortWidth;
			else
				tw = pDoc->ShortWidth/2;
			pDC->MoveTo(xcStart, 0);
			pDC->LineTo(xcStart, cyH);
			pDC->MoveTo(xcStart+tw, 0);
			pDC->LineTo(xcStart+tw, cyH);
			xcStart += tw;
			xlstartA++;
			lli = pShortNode[xlstartA].lend;
			if(xcStart >= rect.right) break;
		}
		xlstartA ++;
		unsigned long lle;
		if(xlstartA < ShortNodeNum)
		{
			lle = pShortNode[xlstartA].lend;
			if(lle != EndSampNum) lle++;
		}
		else
			goto next;
		double xxi = xcStart;
		for(; lli < lle; lli++)
		{
			if(xxi >= nGrid*step)
			{
				nGrid ++;
				int xi = intINT( xxi );
				pDC->MoveTo(xi,  0);
				pDC->LineTo(xi,cyH);
				strTemp.Format("%-10.3f",RelateTime[lli]/1000);
				pDC->TextOut(int(xi), cyH, strTemp);
			}
			xxi = xxi+m_XSizeFactor;
			if(xxi > rect.right) 
				goto next;
		}
		lli = pShortNode[xlstartA].lend;
		xcStart = intINT(xxi);
	} // end while(xlstartA < ShortNodeNum)

next:

	rect.top = cyH+size.cy;
	pDC->SelectStockObject(WHITE_BRUSH);
	rect.right += cxVScroll+1;
	rect.left = -1;
	rect.bottom += 1;
    pDC->Rectangle( rect );

    pDC->SelectObject(CFont::FromHandle(Font2));
	step = rect.right/6;
	xcStart = 0;
	cyH = rect.top+1;
	double time = RelateTime[LCursor]/1000;
	strTemp.Format("TL= %-10.3f",time);
	COLORREF OldColor = pDC->SetTextColor(LRGB);
	pDC->TextOut(xcStart,cyH,strTemp);
	xcStart += step-10;
	double timea = RelateTime[RCursor]/1000;
	strTemp.Format("TR=%-10.3f",timea);
	pDC->SetTextColor(RRGB);
	pDC->TextOut(xcStart,cyH,strTemp);
	xcStart += step-10;
	strTemp.Format("TL-TR=%-10.3f",time-timea);
	pDC->SetTextColor(MRGB);
	pDC->TextOut(xcStart,cyH,strTemp);
	xcStart += step+20;
	if(WhichCurve==-1)
		strTemp=_T("VL=");
	else 
		strTemp.Format("VL=%-10.4f",LCursorA);
	pDC->SetTextColor(LRGB);
	pDC->TextOut(xcStart,cyH,strTemp);
	xcStart += step-5;
	if(WhichCurve==-1)
		strTemp=_T("VR=");
	else 
		strTemp.Format("VR=%-10.4f",RCursorA);
	pDC->SetTextColor(RRGB);
	pDC->TextOut(xcStart,cyH,strTemp);
	xcStart += step-5;
	if(WhichCurve==-1)
		strTemp=_T("VL-VR=");
	else 
		strTemp.Format("VL-VR=%-10.4f",LCursorA-RCursorA);
	pDC->SetTextColor(MRGB);
	pDC->TextOut(xcStart,cyH,strTemp);

	pDC->SetTextColor( OldColor );
	pDC->SetBkMode( OldBKMode );
	pDC->SelectObject( &OldFont );
*/
}

/////////////////////////////////////////////////////////////////////////////
// CRtlRightView diagnostics

#ifdef _DEBUG
void CRtlRightView::AssertValid() const
{
	CView::AssertValid();
}

void CRtlRightView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CRtlRightView message handlers

BOOL CRtlRightView::PreCreateWindow(CREATESTRUCT& cs) 
{
	cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, 
		AfxGetApp()->LoadStandardCursor(IDC_ARROW), (HBRUSH)GetStockObject(BLACK_BRUSH));
	
	return CView::PreCreateWindow(cs);
}

int CRtlRightView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	cxVScroll = GetSystemMetrics(SM_CXVSCROLL);
	
	return 0;
}

LRESULT CRtlRightView::ShowValue( WPARAM wParam, LPARAM lParam )
{
	this->Invalidate();
	return 1;
}


⌨️ 快捷键说明

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