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

📄 displaywindow.cpp

📁 最新的USB示波器源码?可直接编译生成可执行程序,需要硬件支持
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// DisplayWindow.cpp : implementation file
//

#include "stdafx.h"
#include "DisplayWindow.h"
#include "DSOTEST.h"
#include "math.h"
#include "Resource.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define PI 3.1415926
#define BULK_SIZE 512
int  xx;
//short int data[5][1520]; 

//#define W 760
#define H 20
#define ST 95
#define S 4


#define XOFFSIZE  26
#define YOFFSIZE  20
#define TRIG_OFFSET 2

// DisplayWindow
CBitmap  Back;
//PAGEDATA * p;

IMPLEMENT_DYNCREATE(DisplayWindow, CStatic)
static BOOL F_B,F_H,F_S,F_I,F_D,F_E,F_b,F_h,F_s,F_i,F_d,F_e;
int mouse_XB,mouse_XE;
BOOL b1_F,b2_F;

CFont  * m_font;
CFont * m_OldFont;

CDSOTESTApp *pApp;
CRect LeftScaleRect;
CRect RightScaleRect;
CRect UpScaleRect;
CRect DownScaleRect;
static CBitmap  oldScreen_Bitmap;
static BOOL first_draw=false;
DWORD fps;

extern CH_PARAM cha_param;
extern CH_PARAM chb_param;
extern MATH_OPERATION math_operation;
extern RUNNING_CONTROL run_ctrl;
extern TIME_BASE time_base;
extern TRIGGER trigger;
extern TRIGGER_VIDEO trigger_video;
extern ACQUIRE acquire;
extern DISPLAY display;

UINT GetADdata_ThreadProc(void * pParam);
unsigned char usb_buffer[SAMPLE_DEPTH*2+512];

unsigned char cha_addata[SAMPLE_DEPTH];
unsigned char chb_addata[SAMPLE_DEPTH];
unsigned char addata_buffer[SAMPLE_DEPTH*2];
int      zhifu[255];
CString freq;
DisplayWindow::DisplayWindow()
{  int i;
	EnableAutomation();
    b1_F=1;
	b2_F=1;
	page=0;
	Caiyang=0;
	RecFlag=0;
///	AfxOleLockApp();
//	speed=1;
    stp=1;
	mouse_x=0;
	DrawLineFlag=0;

	dis_DyRound=0;
	pagedata=NULL;
    pagedata_start=NULL;
   	pg=NULL;
//	Lr=0;
//	Rr=0;
	hUsbInDevice = NULL; 
	m_nTriggerType=false;

//	sampleFt=0.005;//20.0;  //初始化采样频率 20M
//	vlots=10000.0;   //初始化Vlots/Div=10000mV 10V/Div;

     m_cha_vlot_div=100*1000;
   	 m_chb_vlot_div=100*1000;
	 m_time_div=0;

//	leftSit=DISHEIGHT/2;
//	topSit=DISWIDTH/2;

	cha_offset=DISHEIGHT/4;
	chb_offset=DISHEIGHT*3/4;

	cha_on=true;
	chb_on=false;
    trigger_line_on=true;
	trig_level=DISHEIGHT/2;
	isDrawOther=false;
    isRecord=false;
	fps=0;
//	LeftBitmap.LoadBitmap (IDB_LEFTAXIS);	
	
//	LeftBitmap.GetObject(sizeof(BITMAP),&leftbm);
	
//	TopBitmap.LoadBitmap (IDB_TOPAXIS);
 //   TopBitmap.GetObject(sizeof(BITMAP),&topbm);
	
//	LeftSCaleBitmap.LoadBitmap (IDB_LEFTAXIS);
//    LeftSCaleBitmap.GetObject(sizeof(BITMAP),&leftscalebm);
	

	Select=0;
//	disScaleLine=false;

	pApp = (CDSOTESTApp *)AfxGetApp();
	m_hCursor_H = pApp->LoadStandardCursor(IDC_SIZEWE);
	m_hCursor_V = pApp->LoadStandardCursor(IDC_SIZENS);
//	offset=0;  //显示缓冲区偏移量
	
//	for(int i=0;i<1024;i++)
//		ADdata[i]=0x80;
for(i=0;i<SAMPLE_DEPTH;i++)
       cha_addata[i]=chb_addata[i]=128;
float v;
  //  float ft=(float)(rand()%100);
///	for( i=0;i<1024;i++)
//		{v=0.3*sin(2*PI*i/ft);
	     //if(v>=0)
//			addata[i]=128+BYTE(v*128);
//			
//
	int h=DISHEIGHT/2;
	h+=50;

   // float v;
    for(i=0;i<256;i++)
    {   v=(float)(i/128.0);
     	ht[i]=h*v-h; 
    
     }
/*	for(;i<256;i++)
	{   v=(float)(i/128.0);
     	ht[i]=h*v-h; 
    
     }*/
//	Ix=0;
//	Iu=0;
//	tdv=5; // 1ms/div
	offset=(SAMPLE_DEPTH-DISWIDTH)/2;//显示缓冲区偏移量
    trig_sit=SAMPLE_DEPTH/2;  
//	sampleT=1000; // ns

	cntB=cntX=0;
    Kill_Theard=true;
    Caiyang=false;
	cha_arrow_rect=CRect(0,0,0,0);
	chb_arrow_rect=CRect(0,0,0,0);

LeftScaleSit=RightScaleSit=UpScaleSit=DownScaleSit=0;


}


DisplayWindow::~DisplayWindow()
{
     Kill_Theard=0;
	 Kill_Play=0;

//   if(FenXindata!=NULL)
//	 delete FenXindata;
//   AfxOleUnlockApp();
	if(m_font!=NULL)
	 m_font->DeleteObject ();
	 

}

void DisplayWindow::OnFinalRelease()
{
	
	CStatic::OnFinalRelease();
}


BEGIN_MESSAGE_MAP(DisplayWindow, CStatic)
	//{{AFX_MSG_MAP(DisplayWindow)
	ON_WM_ERASEBKGND()
	ON_WM_PAINT()
	ON_WM_NCHITTEST()
	ON_WM_TIMER()
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	ON_WM_RBUTTONDOWN()
	ON_WM_RBUTTONUP()
	ON_MESSAGE(WM_MY_DRAWGRAPH,DrawLineGraph)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BEGIN_DISPATCH_MAP(DisplayWindow, CStatic)
	//{{AFX_DISPATCH_MAP(DisplayWindow)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()

// Note: we add support for IID_IDisplayWindow to support typesafe binding
//  from VBA.  This IID must match the GUID that is attached to the 
//  dispinterface in the .ODL file.

// {FC97F5C0-5127-11D6-A757-00055DA07630}
static const IID IID_IDisplayWindow =
{ 0xfc97f5c0, 0x5127, 0x11d6, { 0xa7, 0x57, 0x0, 0x5, 0x5d, 0xa0, 0x76, 0x30 } };

BEGIN_INTERFACE_MAP(DisplayWindow, CStatic)
	INTERFACE_PART(DisplayWindow, IID_IDisplayWindow, Dispatch)
END_INTERFACE_MAP()

// {FC97F5C1-5127-11D6-A757-00055DA07630}
IMPLEMENT_OLECREATE(DisplayWindow, "TestRo.DisplayWindow", 0xfc97f5c1, 0x5127, 0x11d6, 0xa7, 0x57, 0x0, 0x5, 0x5d, 0xa0, 0x76, 0x30)

/////////////////////////////////////////////////////////////////////////////
// DisplayWindow message handlers

BOOL DisplayWindow::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}

//在显示窗口内画出表格/////////////


BOOL DisplayWindow::OnEraseBkgnd(CDC* pDC) 
{  
	
	 GetClientRect(rcClip);
	 CBrush newBrush(RGB(1,0,16));
	 pDC->FillRect(rcClip,&newBrush);
    
	return CStatic::OnEraseBkgnd(pDC);
}

void DisplayWindow::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
   	GetClientRect(rcClip);
    int top=rcClip.top;
    int left=rcClip.left; 
   	isDrawOther=true;
	if(!firstdiswindow)
	 {
	firstdiswindow=DrawDispBack(&dc,DISWIDTH,DISHEIGHT);
	DisRect.left=left+XOFFSIZE;
	DisRect.top=top+YOFFSIZE;
	DisRect.right=DisRect.left+DISWIDTH;
	DisRect.bottom=DisRect.top+DISHEIGHT;
	}
	if(firstdiswindow)
	{

	//CDC m_DC;
    //m_DC.CreateCompatibleDC (&dc);
	//CBitmap * pOldBitmap =m_DC.SelectObject(&oldScreen_Bitmap);
    //dc.BitBlt( DisRect.left,DisRect.top,DISWIDTH ,DISHEIGHT,&m_DC,0,0,SRCCOPY);
	//m_DC.SelectObject (pOldBitmap);
	//m_DC.DeleteDC (); 
    DrawLine();
	}
    //DisVoltage(&dc,left+XOFFSIZE,top+YOFFSIZE-10,DISWIDTH,DISHEIGHT);
    //DisTimeVlem(&dc,left+XOFFSIZE-15,top+YOFFSIZE,DISWIDTH,DISHEIGHT);
	//DisLeftAxis(&dc, left+XOFFSIZE+DISWIDTH+2, top+YOFFSIZE+leftSit);
	//DisTopAxis(&dc, left+XOFFSIZE+topSit, top+YOFFSIZE);
}



void DisplayWindow::PreSubclassWindow() 
{    
	 
	 //dis_Flag=TRUE;
   
	 firstdiswindow=false;
//	 m_hCursor1 = AfxGetApp()->LoadCursor(IDC_LINE);
//	 m_hCursor2 = AfxGetApp()->LoadCursor(IDC_ZOOM);
//   SetTimer(1,10,NULL);
//   启动采集及绘制曲线线程。
#ifdef COMM_PORT
	 #else
     AfxBeginThread(GetADdata_ThreadProc,this,THREAD_PRIORITY_NORMAL); 
#endif
  //  AfxBeginThread(PlayDrawLine_ThreadProc,this,THREAD_PRIORITY_NORMAL);   
     m_font=new CFont;
     m_font->CreateFont(-12,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,
	 OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
	 DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,
	 "Time Roman");
  	
	 CStatic::PreSubclassWindow();
}

BOOL DisplayWindow::DestroyWindow() 
{ 
//	KillTimer(1);
/*	while(pagedata_start!=NULL)
	{
     GlobalFree(pagedata_start->hHandle);
     pagedata_start=pagedata_start->next;
	}*/
	return CStatic::DestroyWindow();
}

void DisplayWindow::ReDraw()
{	 //ps=40;
     SelectT=0;
	 DrawLineFlag=0;
    // for(int i=0;i<5;i++)
	// for(int j=0;j<1520;j++)
	//data[i][j]=0;
	 Invalidate();
   
}
//   在显示框中绘制曲线图案             。

void DisplayWindow::line(int xx)
{	
/*	CClientDC * pDC;
	pDC=new CClientDC(this);
	
	static float temp[5];
    static int frist=1;
	CPen  m_Pen_11,m_Pen_Black,m_Pen_13,m_Pen_12;
	CPen *m_OldPen_11,* m_OldPen_Black,*m_OldPen_13,*m_OldPen_12;
	int k,qi_y;
	static int h=81,hhh;
    if(frist)
	{
	for(int i=0;i<5;i++)
	{ if(i==4) 
	  temp[i]= pData->e[i]*xindian_db;
	 else 
	   temp[i]=pData->e[i]*db;
	}
	frist=0;
	} 
    
	m_Pen_Black.CreatePen(PS_SOLID,2,RGB(0,0,0));
	m_OldPen_Black=pDC->SelectObject(&m_Pen_Black);
    //画1条宽8点黑色|线擦掉原屏幕内容。
	pDC->MoveTo(xx+41,20);
	pDC->LineTo(xx+41,hh-20);
	pDC->SelectObject(m_OldPen_Black);
	if(xx==1)return;

	m_Pen_13.CreatePen(PS_SOLID,1,RGB(0,100,100));
	m_OldPen_13=pDC->SelectObject(&m_Pen_13);
   
	// 恢复表格线。      
    for(k=0;k<=20;k++)
	{//绘制方格 ——线  。
      qi_y=30*k+20;
      pDC->MoveTo(40+xx-step,qi_y);
      pDC->LineTo(40+xx,qi_y);
	}
	//  绘制方格| 线 。
    m_OldPen_13=pDC->SelectObject(&m_Pen_13);

	if(((xx+1)%38)==0)
	{
		pDC->MoveTo(xx+40,20);
		pDC->LineTo(xx+40,hh-20);
	}

/*

	if(xx%w_st==0)
	{pDC->MoveTo(Xx[int((xx)/48)],20);            
	 pDC->LineTo(Xx[int((xx)/48)],hh-20);
	}
*/
/*	m_Pen_11.CreatePen(PS_SOLID,1,RGB(0,255,0));
	m_OldPen_11=pDC->SelectObject(&m_Pen_11);
   
	m_Pen_12.CreatePen(PS_SOLID,1,RGB(255,255,64));
	//m_OldPen_12=pDC->SelectObject(&m_Pen_12);
 
	int y0,y1;
	for(int n=0;n<5;n++)
	{ 
	    y0=(int)temp[n];
	    if(n==4)
			y1=(int)(pData->e[n]*xindian_db);
	      else
		    y1=(int)(pData->e[n]*db);
	    
		  if(y0>((2*n+1)*60)) y0=(2*n+1)*60;
			 else
				 if(y0<((10-(2*n+1))*-60))y0=(10-(2*n+1))*-60;
			
			if(y1>((2*n+1)*60)) y1=(2*n+1)*60;
			 else
				 if(y1<((10-(2*n+1))*-60))y1=(10-(2*n+1))*-60;

			if(n==4)
         m_OldPen_12=pDC->SelectObject(&m_Pen_12);
	    pDC->MoveTo(40+xx-step,draw[n].y-y0);
       pDC->LineTo(40+xx,draw[n].y-y1);
		
	}  

	for(int i=0;i<5;i++)
         if(i==4)temp[i]=pData->e[i]*xindian_db;
	        else
		temp[i]=pData->e[i]*db;
	

	pDC->SelectObject(m_OldPen_12);
  	pDC->SelectObject(m_OldPen_11);
	 m_OldFont=pDC->SelectObject(m_font);
    char mes[30];
	if(RecFlag)
	wsprintf(mes,"x=%d 正在记录第%d页   ",xx,page);
	else
     wsprintf(mes,"x=%d 记录停止            ",xx);
	
	pDC->SetBkColor(RGB(0,0,0));
	pDC->SetTextColor(RGB(255,255,0));
    pDC->TextOut(ww/2+150,3,mes);
	delete pDC;
*/	
 
}

UINT DisplayWindow::OnNcHitTest(CPoint point) 
{
	return CStatic::OnNcHitTest(point);
}


void DisplayWindow::DisMes(CString mes)
{	CDC * pDC;
 	pDC=new CClientDC(this);
	//CFont   m_font;
	//CFont  * m_OldFont;
    //m_font=new CFont;
    //m_font.CreateFont(-12,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,
    //OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,
    //DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,
    //"Time Roman");

	 m_OldFont=pDC->SelectObject(m_font);

	pDC->SetBkColor(RGB(0,0,0));
	pDC->SetTextColor(RGB(255,255,0));
   // wsprintf(mes,"Width=%d,Height=%d",ww-108,hh-60);
	pDC->TextOut(80,3,mes);
	 //  pDC->SelectObject(m_OldFont);
     // m_font.DeleteObject ();

delete pDC;
}

#define PT_W (( DisplayWindow *)pParam) 

//采集数据线程.

///////////////////////////////////////////////////////////
BOOL DisplayWindow::AddPage()
{ PAGEDATA  * item=NULL;
  GLOBALHANDLE hBuffer;
  hBuffer=GlobalAlloc(GHND,sizeof(PAGEDATA));
  item=(PAGEDATA *)GlobalLock(hBuffer);
  if(item==NULL)
  {MessageBox("Memory error!");
  return FALSE;
  }
  memcpy(item->cha_data,cha_addata,SAMPLE_DEPTH);

  item->hHandle=hBuffer;
	if(pagedata==NULL)
	{ pagedata=item;
      pagedata_start=item;
	  pg=item;
      item->up=NULL;
	}
	 else 
	 {	 pagedata->next=item;
	     item->up=pagedata;
		 item->next=NULL;
	 }
	pagedata=item;
GlobalUnlock(hBuffer);

return TRUE;
}

void DisplayWindow::DisPageData(BOOL up_next)
{ 
 
}
/*
 int i,y0,y1;
  int h=disHight/2;
  int s_y=h;
  for(i=1;i<disWidth-1;i++)
  {  if(ad_data[i]>128)
        y0= s_y-hh[ad_data[i]]+h;
        else
          y0=s_y+s_y-hh[ad_data[i]];
      if(y0<=0) y0=0;
      else
        if(y0>disHight)
            y0=disHight-1;
  
     if(ad_data[i+1]>128)
        y1= s_y-hh[ad_data[i+1]]+h;
        else
          y1=s_y+s_y-hh[ad_data[i+1]];

⌨️ 快捷键说明

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