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

📄 eyegraphwnd.cpp

📁 USB HID 设备数据采集程序 HID外设使用的MC68HC908JB8ADW单片机
💻 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 + -