📄 eyegraphwnd.cpp
字号:
// EyeGraphWnd.cpp : implementation file
//
#include "stdafx.h"
#include "ENT_JAT.h"
#include "EyeGraphWnd.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define Y_OFFSET 0
#define X_OFFSET 40
#define DB_H 50
#define GRIDDING_X 80
#define V_GRID 30
#define H_GRID 100
#define DRAW_Y_RANG 710 //30*24+20
#define TIME_LEGHT 60*60
/////////////////////////////////////////////////////////////////////////////
// VngGraphView
//EVE_DATA * eve_data_start;
//EVE_DATA * eve_data;
//EVE_DATA * pevedata;
#define SAMPLE_DEPTH TIME_LEGHT*100
WORD vlot[SAMPLE_DEPTH][3];//20*60*50
int data_count;
CRect clinet_rect;
int m_Voffset;
int m_time_offset;
/////////////////////////////////////////////////////////////////////////////
// EyeGraphWnd
EyeGraphWnd::EyeGraphWnd()
{
m_Voffset=DRAW_Y_RANG/2;
m_time_offset=0;
data_count=0;
CRect rc(0,0,0,0);
isZoom=false;
isRectangleSel=false;
m_second_zoom=2;
m_play_button_down=false;
isTime_zoom=1;
}
EyeGraphWnd::~EyeGraphWnd()
{
}
BEGIN_MESSAGE_MAP(EyeGraphWnd, CStatic)
//{{AFX_MSG_MAP(EyeGraphWnd)
ON_WM_VSCROLL()
ON_WM_HSCROLL()
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_SIZE()
ON_WM_SIZING()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_MOUSEWHEEL()
ON_WM_RBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// EyeGraphWnd message handlers
void EyeGraphWnd::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// int nCurrentPos=m_scrollbar_right.GetScrollPos ();
/* switch (nSBCode)
{
case SB_THUMBTRACK :
case SB_THUMBPOSITION:
// m_scrollbar_right.SetScrollPos(nPos,1);
break;
case SB_LINEUP:
// m_scrollbar_right.SetScrollPos(nCurrentPos-1,1);
break;
case SB_LINEDOWN:
// m_scrollbar_right.SetScrollPos(nCurrentPos+1,1);
break;
case SB_PAGEUP:
// m_scrollbar_right.SetScrollPos(nCurrentPos-30,1);
break;
case SB_PAGEDOWN :
// m_scrollbar_right.SetScrollPos(nCurrentPos+30,1);
break;
}
// m_Voffset=m_scrollbar_right.GetScrollPos ();
Invalidate (0);
CStatic::OnVScroll(nSBCode, nPos, pScrollBar);*/
}
void EyeGraphWnd::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int nCurrentPos=m_scrollbar_bottom.GetScrollPos ();
switch (nSBCode)
{
case SB_THUMBTRACK :
case SB_THUMBPOSITION:
m_scrollbar_bottom.SetScrollPos(nPos,1);
break;
case SB_LINELEFT:
m_scrollbar_bottom.SetScrollPos(nCurrentPos-1,1);
break;
case SB_LINERIGHT:
m_scrollbar_bottom.SetScrollPos(nCurrentPos+1,1);
break;
case SB_PAGELEFT:
m_scrollbar_bottom.SetScrollPos(nCurrentPos-1,1);
break;
case SB_PAGERIGHT:
m_scrollbar_bottom.SetScrollPos(nCurrentPos+1,1);
break;
}
m_time_offset=m_scrollbar_bottom.GetScrollPos ();
Invalidate (0);
CStatic::OnHScroll(nSBCode, nPos, pScrollBar);
}
BOOL EyeGraphWnd::PreCreateWindow(CREATESTRUCT& cs)
{
return CStatic::PreCreateWindow(cs);
}
int EyeGraphWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CStatic::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
void EyeGraphWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
GetClientRect(&clinet_rect);
clinet_rect.top+=Y_OFFSET;
clinet_rect.bottom-=18;
DrawDispBar(&dc);
DrawGraph(&dc,&clinet_rect);
// Do not call CStatic::OnPaint() for painting messages
}
void EyeGraphWnd::DrawDispBar(CDC *pDC)
{
CRect rect,rt;
GetClientRect(&rect);
CBrush brush(::GetSysColor(COLOR_SCROLLBAR));
CBrush *oldbrush;
oldbrush=pDC->SelectObject (&brush);
rt.left =0;rt.right =rect.right ;
rt.top =0;rt.bottom =Y_OFFSET ;
pDC->Rectangle (&rt);
rt.left =0;rt.right =0;
rt.top =rect.bottom-18;rt.bottom =rect.bottom ;
pDC->Rectangle (&rt);
rt.left +=1;
rt.right -=1;
rt.top +=1;
rt.bottom -=1;
pDC->Draw3dRect(&rt,
::GetSysColor(COLOR_BTNSHADOW),
::GetSysColor(COLOR_BTNHIGHLIGHT));
pDC->SetBkMode (TRANSPARENT);
pDC->DrawText("10s",
&rt,
DT_CENTER|DT_VCENTER|DT_SINGLELINE);
pDC->SelectObject (oldbrush);
}
void EyeGraphWnd::DrawGraph(CDC *pDC, CRect *rect)
{
CDC dc_Mem;
CBitmap Black_Bitmap;
CBitmap * oldBmp= NULL;
dc_Mem.CreateCompatibleDC(pDC);
Black_Bitmap.CreateCompatibleBitmap(pDC,rect->Width (),rect->Height());
oldBmp=dc_Mem.SelectObject(&Black_Bitmap);
CBrush wbrush(RGB(255,255,255));
dc_Mem.SelectObject (&wbrush);
CRect rt(0,0,rect->Width (),rect->Height());
dc_Mem.Rectangle (&rt);
DrawLine(&dc_Mem,&rt,0);
pDC->BitBlt(rect->left,rect->top,rect->Width (),rect->Height (),&dc_Mem,0,0,SRCCOPY);
dc_Mem.SelectObject(oldBmp);
dc_Mem.DeleteDC ();
}
const char * vlem[]={"4V","3V","2V","1V","0V"};
void EyeGraphWnd::DrawLine(CDC *pDC, CRect *rect, int y_site)
{
CBrush brush(::GetSysColor(COLOR_SCROLLBAR));
CPen Pen(PS_SOLID, 1,RGB(255,0,0));
pDC->SetBkMode (TRANSPARENT);
pDC->SelectObject (&brush);
int x0,y0,x1,y1;
pDC->Rectangle (rect->left ,rect->top ,rect->left +X_OFFSET,rect->bottom );
CPen* pOldPen = pDC->SelectObject(&Pen);
int j=0;
int h0=rect->Height ();
for(int i=0;i<8;i++)
{
y0=y1=rect->top+i*h0/8;
if(i%2==0)
{
x0=rect->left+5;
x1=rect->left+X_OFFSET-5;
pDC->TextOut (x0,y0+2,vlem[j++]);
}
else
{
x0=rect->left+15;
x1=rect->left+X_OFFSET-15;
}
pDC->MoveTo (x0, y0);
pDC->LineTo (x1, y1);
}
CPen grayPen(PS_SOLID, 1, RGB(200, 200, 200));
pDC->SelectObject(&grayPen);
for( i = 0; i < 8; i += 2)
{
y0 = y1 = rect -> top+i * h0/8;
x0 = rect -> left + X_OFFSET + 1;
x1 = rect -> right;
pDC -> MoveTo(x0, y0);
pDC -> LineTo(x1, y1);
}
pDC -> SetTextColor (RGB(0, 0, 0));
CString str;
y0 = rect -> top; y1 = rect -> bottom;
x0 = rect -> left + H_GRID + X_OFFSET;
j = m_time_offset + 1;
for(; x0 < rect -> right; x0 += H_GRID)
{
x1 = x0;
pDC -> MoveTo(x0, y0);
pDC -> LineTo(x1, y1);
str.Format("%d.0", j++);
pDC -> TextOut(x0+1, y_site+2, str);
}
CPen redPen(PS_SOLID, 2, RGB(255, 0, 0));
CPen bluePen(PS_SOLID, 2, RGB(0, 0, 255));
CPen greenPen(PS_SOLID, 2, RGB(0, 255, 0));
pDC->SelectObject(&redPen);
i = m_time_offset * 50;
int h = rect -> Height();
x0 = rect -> left + X_OFFSET + 1;
y0 = rect -> bottom - vlot[i++][0] * h / 1024;
pDC -> MoveTo(x0, y0);
x1=x0;
while(x1 < rect -> right && i < data_count)
{
x1 += m_second_zoom;
y1 = rect -> bottom - vlot[i++][0] * h / 1024;
pDC -> LineTo (x1, y1);
}
pDC -> SelectObject(&bluePen);
i=m_time_offset*50;
x0=rect->left+X_OFFSET+1;
y0=rect->bottom-vlot[i++][1]*h/1024;
pDC->MoveTo(x0,y0);
x1=x0;
while(x1<rect->right && i<data_count)
{ x1+=m_second_zoom;
y1= rect->bottom-vlot[i++][1]*h/1024;
pDC->LineTo (x1,y1);
}
/*
pDC -> SelectObject(&greenPen);
i = m_time_offset * 50;
x0 = rect -> left + X_OFFSET + 1;
y0 = rect -> bottom - vlot[i++][2] * h / 1024;
pDC->MoveTo(x0,y0);
x1=x0;
while(x1<rect->right && i<data_count)
{ x1+=m_second_zoom;
y1= rect->bottom-vlot[i++][2]*h/1024;
pDC->LineTo (x1,y1);
}
*/
pDC->SelectObject(pOldPen);
}
void EyeGraphWnd::OnSize(UINT nType, int cx, int cy)
{
if(m_scrollbar_bottom)
{
CRect rect;
GetClientRect(&rect);
rect.left=X_OFFSET;
// rect.right-=18;
rect.top=rect.bottom -18;
m_scrollbar_bottom.MoveWindow (&rect,true);
}
CStatic::OnSize(nType, cx, cy);
}
void EyeGraphWnd::OnSizing(UINT fwSide, LPRECT pRect)
{
CStatic::OnSizing(fwSide, pRect);
}
void EyeGraphWnd::PreSubclassWindow()
{
CRect rc(0,0,0,0);
m_scrollbar_bottom.Create(WS_CHILD|WS_VISIBLE|SBS_SIZEBOXBOTTOMRIGHTALIGN |SBS_HORZ,rc,this,0xffff0002);
m_scrollbar_bottom.SetScrollRange(0,TIME_LEGHT,true);
m_scrollbar_bottom.SetScrollPos(m_time_offset,true);
CStatic::PreSubclassWindow();
}
BOOL EyeGraphWnd::AddOneData(WORD ch1, WORD ch2,WORD ch3)
{
vlot[data_count][0]=ch1;
vlot[data_count][1]=ch2;
vlot[data_count][2]=ch3;
if(data_count<SAMPLE_DEPTH)
{data_count++;
if((data_count>(9*50))&&(data_count%50==0))
{m_time_offset++;
m_scrollbar_bottom.SetScrollPos(m_time_offset,1);
}
DrawEyeGraph();
return true;
}
else
return false;
}
CENT_JATApp *pApp;
void EyeGraphWnd::DrawEyeGraph()
{
m_hCursor_Zoom= pApp->LoadCursor(IDC_ZOOM);
m_hCursor_RectangleSel= pApp->LoadCursor(IDC_RECTANGLESEL);
// extern BOOL m_dltFlags;
CRect rect;
GetClientRect(&rect);
rect.top+=Y_OFFSET;
rect.bottom-=18;
CClientDC * pDC;
pDC=new CClientDC(this);
DrawGraph(pDC,&rect);
if(isRectangleSel&&m_msflags==1)
{
sel_rect.top=rect.top;
sel_rect.bottom=rect.bottom ;
CDC dc_Mem;
CBitmap Black_Bitmap;
CBitmap * oldBmp= NULL;
dc_Mem.CreateCompatibleDC(pDC);
Black_Bitmap.CreateCompatibleBitmap(pDC,sel_rect.Width(),sel_rect.Height());
oldBmp=dc_Mem.SelectObject(&Black_Bitmap);
CBrush wbrush(RGB(0,0,0));
dc_Mem.SelectObject (&wbrush);
dc_Mem.Rectangle (&sel_rect);
pDC->BitBlt(sel_rect.left,sel_rect.top,sel_rect.Width(),sel_rect.Height(),
&dc_Mem,0,0,PATINVERT );
dc_Mem.SelectObject(oldBmp);
dc_Mem.DeleteDC ();
}
/* if(m_dltFlags==1)
{
CDC dltdc;
dltdc.ExcludeClipRect(sel_rect.left,sel_rect.top,
sel_rect.right,sel_rect.bottom);
}*/
delete pDC;
}
void EyeGraphWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
m_msflags=1;
sel_rect.left=point.x;
SetCapture();
if(m_hCursor_Zoom&&isZoom)
{
::SetCursor(m_hCursor_Zoom);
m_second_zoom*=2;
isTime_zoom*=2;
}
if(m_hCursor_RectangleSel&&isRectangleSel)
{
::SetCursor(m_hCursor_RectangleSel);
}
CStatic::OnLButtonDown(nFlags, point);
}
void EyeGraphWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
sel_rect.right=point.x;
DrawEyeGraph();
m_msflags=0;
ReleaseCapture();
if(m_hCursor_Zoom&&isZoom)
{
::SetCursor(m_hCursor_Zoom);
}
if(m_hCursor_RectangleSel&&isRectangleSel)
{
::SetCursor(m_hCursor_RectangleSel);
}
CStatic::OnLButtonUp(nFlags, point);
}
void EyeGraphWnd::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_msflags==1&&nFlags==MK_LBUTTON)
{
sel_rect.right=point.x;
DrawEyeGraph();
}
if(m_hCursor_Zoom&&isZoom)
{
::SetCursor(m_hCursor_Zoom);
}
if(m_hCursor_RectangleSel&&isRectangleSel)
{
::SetCursor(m_hCursor_RectangleSel);
}
CStatic::OnMouseMove(nFlags, point);
}
BOOL EyeGraphWnd::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
//zDelta=0;
return CStatic::OnMouseWheel(nFlags, zDelta, pt);
}
void EyeGraphWnd::OnRButtonDown(UINT nFlags, CPoint point)
{
if(m_hCursor_Zoom&&isZoom)
{
::SetCursor(m_hCursor_Zoom);
m_second_zoom/=2;
isTime_zoom/=2;
}
CStatic::OnRButtonDown(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -