📄 rtlrightview.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 + -