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

📄 displaywindow.cpp

📁 USB接口虚拟示波器软件软件工程
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				//	a = ADdata[i-1];	// Edge Triggered

				/* trigger NEG to POS */
				if (addata[i] <= a && addata[i-1] > a)
				{
					m_nTriggerCH1 = i;
					
					/* Disable trigger for scroll mode */
				//	if (pApp->m_nSampleMode == 0) m_nTriggerCH1 = 0; // disbale trigger

				
					break;
				}
			}

		}
return m_nTriggerCH1;
}

BOOL DisplayWindow::DrawDispBack(CDC *pDC,int Width, int Height)
{

	CDC dc_Mem;
    CBitmap * oldBmp = NULL;
	dc_Mem.CreateCompatibleDC(pDC);
	oldScreen_Bitmap.CreateCompatibleBitmap(pDC,Width,Height);
	oldBmp=dc_Mem.SelectObject(&oldScreen_Bitmap);
    CBrush newBrush(RGB(1,0,16));
	CRect rcClip(0,0,Width,Height);
	dc_Mem.FillRect(rcClip,&newBrush);
 	
	int h_st=Height/8;
	int w_st=Width/10;

	//CPen  dotPen(PS_DOT,1,RGB(100,100,108));
	CPen  SoldPen(PS_SOLID,1,RGB(100,100,108));
//  CPen  SoldPen(PS_SOLID,1,RGB(100,100,108));
    CPen * oldPen=dc_Mem.SelectObject(&SoldPen);
	int j;
	for(int i=1;i<9;i++)
 	 {  //draw ____line    .
		for(j=0;j<Width;j+=5)
		dc_Mem.SetPixel(j,h_st*i,RGB(100,100,108));
		//dc_Mem.MoveTo(0,h_st*i);
	    //dc_Mem.LineTo(Width,h_st*i);
	}
	for(i=1;i<10;i++){
      //draw | line  .
		for(j=0;j<Height;j+=5)
		dc_Mem.SetPixel(i*w_st,j,RGB(100,100,108));
		//dc_Mem.MoveTo(i*w_st,0);
		//dc_Mem.LineTo(i*w_st,Height);
      }
     //dc_Mem.SelectObject(oldPen);
     //oldPen=dc_Mem.SelectObject(&SoldPen);
     //draw --Line 
	 dc_Mem.MoveTo(0,h_st*4);
     dc_Mem.LineTo(Width,h_st*4);
     //draw | line  .
     dc_Mem.MoveTo(5*w_st,0);
	 dc_Mem.LineTo(5*w_st,Height);
	 //draw ^
	for(i=0;i<50;i++)
	{ dc_Mem.MoveTo(w_st/5*i,h_st*4-3);
      dc_Mem.LineTo(w_st/5*i,h_st*4+3);
     //draw | line  .
     dc_Mem.MoveTo(5*w_st-3,h_st/5*i);
	 dc_Mem.LineTo(5*w_st+3,h_st/5*i);
	}	
//	dc_Mem.BitBlt(0,0,ww,hh,pDC,0,0,SRCCOPY); //  将原屏幕图象(oldScreen_Bitmap)
	dc_Mem.SelectObject (GetStockObject(NULL_BRUSH));
	dc_Mem.Rectangle (0,0,Width,Height);
	dc_Mem.SelectObject (oldPen);
	dc_Mem.SelectObject (oldBmp);
	dc_Mem.DeleteDC();
  
   return true;
}

void DisplayWindow::DisVoltage(CDC *pDC,int x, int y, int w, int h)
{
     char vv[13][10]={"40.0","36.0","32.0","28.0","24.0",
		 "20.0","16.0","12.0","8.0","4.0","0.0"};
     m_OldFont=pDC->SelectObject(m_font);
     CString mes;
     pDC->SetBkColor(RGB(1,0,16));
	 pDC->SetTextColor(RGB(100,100,108));
   
	 
	 /* if(vlots/100>=1)
	 {
		 for( int i=0;i<=5;i++)
			 { mes.Format("%0.1f",(vlots/1000.)*(5-i));
			    pDC->TextOut(25,y+i*h/10,mes);
			}
		 for(;i<=10;i++)
			{ mes.Format("-%0.1f",(vlots/1000.0)*(i-5));
			pDC->TextOut(25,y+i*h/10,mes);
			}
		 mes="Vlotage (V)";
	 }
	 else
	 {
		 for( int i=0;i<=5;i++)
			 { mes.Format("%0.1f",vlots*(5-i));
			    pDC->TextOut(25,y+i*h/10,mes);
			}
		 for(;i<=10;i++)
			{ mes.Format("-%0.1f",vlots*(i-5));
				pDC->TextOut(25,y+i*h/10,mes);
			}
		 mes="Vlotage (mV)";
	 }
	
	 */


	for( int i=0;i<=10;i++)
	 { 
	  pDC->TextOut(25,y+i*h/10,vv[i]);
	}
	mes="Current (A)";
	CFont sFont;
	sFont.CreateFont(15,0,900,0,0,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
         CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,NULL);
	 CFont * pOldFont;
	 pOldFont=pDC->SelectObject(&sFont);
     pDC->TextOut(5,y+h/2+40,mes);
	 //CRect rt(5,0,20,h);
	 //pDC->DrawText (mes,rt,DT_CENTER|DT_BOTTOM |DT_SINGLELINE);
	 pDC->SelectObject(pOldFont);
 }

void DisplayWindow::DisTimeVlem(CDC *pDC, int x, int y, int w, int h)
{
	 m_OldFont=pDC->SelectObject(m_font);
     CString mes,title;
	// float time;
     pDC->SetBkColor(RGB(1,0,16));
	 pDC->SetTextColor(RGB(100,100,108));
     float f;
	 int t=time_div[tdv]/100000;
      if(t>0)
		{ f=t/10.0;
		  title="Time (ms)";
		}
	  else
	  {
		  t=time_div[tdv]/100;
              if(t>0)
			  { f=t/10.0;
                  title="Time (us)";
			  }
			  else
			  { f=time_div[tdv];
                 title="Time (ns)";
			  }
	  }

	 for(int i=0;i<=10;i++)
     {
	   mes.Format("%.1f",i*f);
	   pDC->TextOut(x+i*w/10,y+h+2,mes);
	 }
	 pDC->TextOut(x+5*w/10,y+h+20, title);
     
	
}

void DisplayWindow::DisLeftAxis(CDC *pDC, int x, int y)
{
   CDC m_DC;
   m_DC.CreateCompatibleDC (pDC);
   CBitmap * pOldBitmap =m_DC.SelectObject(&LeftBitmap);
   lrect.left=x;lrect.top=y-leftbm.bmHeight/2;
   lrect.right=x+leftbm.bmWidth;
   lrect.bottom=lrect.top+leftbm.bmHeight;
   pDC->BitBlt ( lrect.left,lrect.top,leftbm.bmWidth ,leftbm.bmHeight,&m_DC,0,0,SRCCOPY);
   m_DC.SelectObject (pOldBitmap);
   m_DC.DeleteDC (); 
}

void DisplayWindow::DisTopAxis(CDC *pDC, int x, int y)
{
/* CDC m_DC;
   m_DC.CreateCompatibleDC (pDC);
   CBitmap * pOldBitmap =m_DC.SelectObject(&TopBitmap);
   trect.left=x-topbm.bmWidth/2;
   trect.top=y-topbm.bmHeight;
   trect.right=trect.left+topbm.bmWidth;
   trect.bottom=trect.top+topbm.bmHeight;
   pDC->BitBlt (trect.left,trect.top,topbm.bmWidth ,topbm.bmHeight,&m_DC,0,0,SRCCOPY);
   m_DC.SelectObject (pOldBitmap);
   m_DC.DeleteDC (); 
*/
}
//#define DISWIDTH 600
//#define DISHEIGHT 400

void DisplayWindow::DisScaleLine()
{
   disScaleLine=!disScaleLine;
   if(disScaleLine)
   {
	LeftScaleSit=DISWIDTH/3;
	RightScaleSit=2*DISWIDTH/3;
	UpScaleSit=DISHEIGHT/3;
	DownScaleSit=2*DISHEIGHT/3;
    
   }
   ReDrawSCreen();
}
/******************************************************
DisScaleLine x is X offsize;
             y is Y offsize;
             w is disWindowsWidth; 
             h is disWindowsHeight;
			 下面的这些参数是显示测量线的所用的.
CRect LeftScaleRect,RightScaleRect,UpScaleRect,DownScaleRect;
int LeftScaleSit,RightScaleSit,UpScaleSit,DownScaleSit;
*/

void DisplayWindow::DisScaleLine(CDC *pDC, int x, int y,int w, int h)
{
   CString mes;
   unsigned int t,F;
   float fx;
   LeftScaleRect.left=x+LeftScaleSit-topbm.bmWidth/2;
   LeftScaleRect.top=y-topbm.bmHeight;
   LeftScaleRect.right=LeftScaleRect.left+topbm.bmWidth;
   LeftScaleRect.bottom=LeftScaleRect.top+topbm.bmHeight;

   RightScaleRect.left=x+RightScaleSit-topbm.bmWidth/2;
   RightScaleRect.top=y-topbm.bmHeight;
   RightScaleRect.right=RightScaleRect.left+topbm.bmWidth;
   RightScaleRect.bottom=RightScaleRect.top+topbm.bmHeight;
	
   UpScaleRect.left=x+w;
   UpScaleRect.top=y+UpScaleSit-leftscalebm.bmHeight/2;
   UpScaleRect.right=UpScaleRect.left+leftscalebm.bmWidth;
   UpScaleRect.bottom=UpScaleRect.top+leftscalebm.bmHeight;

   DownScaleRect.left=x+w;
   DownScaleRect.top=y+DownScaleSit-leftscalebm.bmHeight/2;
   DownScaleRect.right=DownScaleRect.left+leftscalebm.bmWidth;
   DownScaleRect.bottom=DownScaleRect.top+leftscalebm.bmHeight;
   

   pDC->SetBkColor (RGB(0,0,0));
   pDC->SetTextColor (RGB(255,255,255));
   t=time_div[tdv]/50;
   if(RightScaleSit==LeftScaleSit)
    F=1000000000*t;
   else
    F=1000000000/(fabs((RightScaleSit-LeftScaleSit))*t);
   
   if(F>1000000000)
   {  fx=F/1000000000.0;
      mes.Format ("X1-X2=%.2fGhz , l=%d",fx,RightScaleSit-LeftScaleSit);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
   }
   else
   { if(F>1000000)
	{ fx=F/1000000.0;
      mes.Format ("X1-X2=%.2fMhz , l=%d",fx,RightScaleSit-LeftScaleSit);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
	}
   else
   { if(F>1000)
		{fx=F/1000.0;
          mes.Format ("X1-X2=%.2fKhz , l=%d",fx,RightScaleSit-LeftScaleSit);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
		   }
         else
		  mes.Format ("X1-X2=%dhz , l=%d",F,RightScaleSit-LeftScaleSit);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);

   }
   }

   pDC->TextOut (40,y-40,mes);
   mes.Format("Y1-Y2=%d",DownScaleSit-UpScaleSit);
	pDC->TextOut (40,y-20,mes);
   CPen  Pen(PS_DOT,1,RGB(255,255,255));
   CPen * oldPen=pDC->SelectObject (&Pen);
	
   CDC m_DC_Top;
   m_DC_Top.CreateCompatibleDC (pDC);
   CBitmap * pOldBitmap =m_DC_Top.SelectObject(&TopBitmap);

   pDC->BitBlt (LeftScaleRect.left,LeftScaleRect.top,topbm.bmWidth ,topbm.bmHeight,&m_DC_Top,0,0,SRCCOPY);   
   pDC->BitBlt (RightScaleRect.left,RightScaleRect.top,topbm.bmWidth ,topbm.bmHeight,&m_DC_Top,0,0,SRCCOPY);
   
   m_DC_Top.SelectObject (pOldBitmap);
   m_DC_Top.DeleteDC ();
   
   pDC->MoveTo (LeftScaleRect.left+topbm.bmWidth/2,LeftScaleRect.top+topbm.bmHeight);
   pDC->LineTo (LeftScaleRect.left+topbm.bmWidth/2,LeftScaleRect.top+topbm.bmHeight+h);

   pDC->MoveTo (RightScaleRect.left+topbm.bmWidth/2,RightScaleRect.top+topbm.bmHeight);
   pDC->LineTo (RightScaleRect.left+topbm.bmWidth/2,RightScaleRect.top+topbm.bmHeight+h);


   CDC m_DC_Left;
   m_DC_Left.CreateCompatibleDC (pDC);
   pOldBitmap =m_DC_Left.SelectObject(&LeftSCaleBitmap);
   
   pDC->BitBlt (UpScaleRect.left,UpScaleRect.top,leftscalebm.bmWidth ,leftscalebm.bmHeight,&m_DC_Left,0,0,SRCCOPY);   
   pDC->BitBlt (DownScaleRect.left,DownScaleRect.top,leftscalebm.bmWidth ,leftscalebm.bmHeight,&m_DC_Left,0,0,SRCCOPY);
   
   m_DC_Left.SelectObject (pOldBitmap);
   m_DC_Left.DeleteDC (); 

   pDC->MoveTo (x,UpScaleRect.top+leftscalebm.bmHeight/2);
   pDC->LineTo (UpScaleRect.left,UpScaleRect.top+leftscalebm.bmHeight/2);

   pDC->MoveTo (x,DownScaleRect.top+leftscalebm.bmHeight/2);
   pDC->LineTo (DownScaleRect.left,DownScaleRect.top+leftscalebm.bmHeight/2);

}

void DisplayWindow::DrawIcurrenWave()
{/*
	CClientDC * pDC;
	pDC=new CClientDC(this);
	static int count;
	CString mes;
	CDC dc_Mem_B;
    CBitmap Black_Bitmap;
	CBitmap * oldBmp_B= NULL;
	dc_Mem_B.CreateCompatibleDC(pDC);
    Black_Bitmap.CreateCompatibleBitmap(pDC,DISWIDTH,DISWIDTH);
	//Black_Bitmap.CreateCompatibleBitmap(pDC,rcClip.Width (),rcClip.Height ());
	oldBmp_B=dc_Mem_B.SelectObject(&Black_Bitmap);
	
	CDC dc_Mem_temp;
    CBitmap * oldBmp_temp = NULL;
	dc_Mem_temp.CreateCompatibleDC(pDC);
	oldBmp_temp=dc_Mem_temp.SelectObject(&oldScreen_Bitmap);
	
	dc_Mem_B.BitBlt(0,0,DISWIDTH,DISWIDTH,&dc_Mem_temp,0,0,SRCCOPY); 
	
	dc_Mem_temp.SelectObject(oldBmp_temp);
	dc_Mem_temp.DeleteDC ();
	
	CPen  newPen(PS_SOLID,1,RGB(0,255,0));
    CPen  newPen1(PS_SOLID,1,RGB(255,0,0));
	CPen *  oldPen=NULL;

	int h=DISHEIGHT;
	int width=DISWIDTH;
    int y;
    for(int i=0;i<Sample_Depth-1;i++)
		addata[i]=addata[i+1];

	oldPen=dc_Mem_B.SelectObject(&newPen);

    y=h-addata[0]*h/40000;
    if(y<0)y=0;

	dc_Mem_B.MoveTo(0,y);

   for(i=1;i<Sample_Depth;i++)
   {	
	 y=h-addata[i]*h/40000;	
	 if(y<0)y=0;
	dc_Mem_B.LineTo(i,y);	
		
   }

   //Draw vlot 
for( i=0;i<Sample_Depth-1;i++)
		vlot[i]=vlot[i+1];
	oldPen=dc_Mem_B.SelectObject(&newPen1);

    y=h-vlot[0]*h/1024;
    if(y<0)y=0;

	dc_Mem_B.MoveTo(0,y);

   for(i=1;i<Sample_Depth;i++)
   {	
	 y=h-vlot[i]*h/1024;	
	 if(y<0)y=0;
	dc_Mem_B.LineTo(i,y);	
		
   }


//#define DISWIDTH 600
//#define DISHEIGHT 400
//#define XOFFSIZE  30
//#define YOFFSIZE  20
     

	count++;
	CDC dc_Mem;
    CBitmap Dis_Bitmap;
	CBitmap * oldBmp= NULL;
	dc_Mem.CreateCompatibleDC(pDC);
    Dis_Bitmap.CreateCompatibleBitmap(pDC,rcClip.Width (),rcClip.Height ());
	oldBmp=dc_Mem.SelectObject(&Dis_Bitmap);
	
	dc_Mem.BitBlt(XOFFSIZE,YOFFSIZE,DISWIDTH,DISWIDTH,&dc_Mem_B,0,0,SRCCOPY); 
	dc_Mem_B.SelectObject(oldPen);
	dc_Mem_B.SelectObject(oldBmp_B);
	dc_Mem_B.DeleteDC ();

	DisVoltage(&dc_Mem,XOFFSIZE,YOFFSIZE-10,DISWIDTH,DISHEIGHT);
    DisTimeVlem(&dc_Mem,XOFFSIZE-15,YOFFSIZE,DISWIDTH,DISHEIGHT);
	DisLeftAxis(&dc_Mem,XOFFSIZE+DISWIDTH+2, YOFFSIZE+leftSit);
	

	if(disScaleLine)
      DisScaleLine(&dc_Mem,XOFFSIZE,YOFFSIZE,DISWIDTH,DISHEIGHT);
	//DisTopAxis(&dc_Mem, XOFFSIZE+topSit, YOFFSIZE);
	
	pDC->BitBlt(0,0,rcClip.Width (),rcClip.Height (),&dc_Mem,0,0,SRCCOPY); 
    dc_Mem.SelectObject(oldBmp);
	dc_Mem.DeleteDC ();
	delete pDC;
*/
}

void DisplayWindow::DisCymometer(CDC *pDC, int x, int y)
{    unsigned int cntB,cntX,t;
     unsigned char *p;
	 CFont *oldfont,font;
	 CString tmp;
	 float Fx,fx;
	 
	 font.CreateFont(-MulDiv(10,-pDC->GetDeviceCaps(LOGPIXELSY),42),
					0,0,0,FW_NORMAL,0,0,0,GB2312_CHARSET,
					OUT_STROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY,
					VARIABLE_PITCH|FF_SWISS,_T("黑体"));
	
	
	
	 p=addata+1024;
	 t=0;
	 for(int i=0;i<3;i++)
	 {	 t|=*p++;
		 t<<=8;
	 }
	 t|=*p;
	 cntB=t;
	 p++;
	 t=0;
	 for(i=0;i<3;i++)
	 {t|=* p++;
	   t<<=8;
	 }
	 t|=*p;
	 cntX=t;
	 if(cntB>0)
	 {
      fx=(50000.0*cntX)/cntB;
	  fx*=1000.0;
      if(fx>1000000)
	  {	 Fx= fx/1000000.0;
         tmp.Format("%0.2fMhz",Fx/* cntB=%d,cntX=%d,cntB,cntX*/);
	  }
	  else
	  {
		if(fx>1000&&fx<1000000)
		{	Fx=fx/1000.0;
		tmp.Format("%0.2fKhz",Fx/*,cntB,cntX*/);
		}
	  else
	  {   Fx=fx/1.0;
		  tmp.Format("%dhz",Fx/*,cntB,cntX*/);
	  }
	  }
      pDC->SetTextColor(RGB(255,255,0));
	  pDC->SetBkColor(RGB(1,0,16));
	  oldfont=pDC->SelectObject(&font);
      pDC->TextOut(x,y,tmp);
	  pDC->SelectObject(oldfont);
		
	 }

}

⌨️ 快捷键说明

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