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

📄 displaywindow.cpp

📁 最新的USB示波器源码?可直接编译生成可执行程序,需要硬件支持
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	 str1+=str2;
	 str2=_T("");
	 switch(trigger.method)
	 {
	 case 0:
		 str2="Edge ";
			 if(trigger.slope )
				 str2+="Negative";
			       else
                    str2+="Positive";
				   break;
	 case 1:
		 str2="Video ";
		 if(trigger_video.sync)
			 str2+="TV-V";
		 else
		     str2+="TV-H";
		 break;
	 case 3:
		 str2="Plus ";

			 
	 }
	
	 DrawRectForText(pDC,x+w-2*TEXT_WND_W-4,y+h+TEXT_WND_H_OFFSET,"Trigger",str1,str2);
     str1.Format ("%s/div",time_div[ time_base.time_d]);
	 str2=acquire_freq[acquire.acquire_freq];
	 DrawRectForText(pDC,x+w-TEXT_WND_W,y+h+TEXT_WND_H_OFFSET,"TimeBase",str1,str2);
     
		 
	/*
     rect.left =x+w-2*TEXT_WND_W-4;
	 rect.right=rect.left +TEXT_WND_W;
	 rect.top =y+h+2;
	 rect.bottom =rect.top+TEXT_WND_H;
     
	 pDC->FillSolidRect(rect, RGB(121,106,173));
     rt.left =rect.left+1;
	 rt.right =rect.right -1;
	 rt.top =rect.top+2;
	 rt.bottom =rt.top+15;

	 pDC->FillSolidRect(rt, RGB(255,255,255));
     pDC->SetBkMode (OPAQUE);
     pDC->SetBkColor(RGB(255,255,255));
	 pDC->SetTextColor(RGB(0,0,0));
    
	 title="Trigger";
	// CRect t_rect;
	 t_rect.left=rect.left +1;
	 t_rect.right =rect.right -1;
	 t_rect.top =rect.top +2;
	 t_rect.bottom =t_rect.top+15;
	 pDC->DrawText (title,&t_rect,DT_CENTER);
	 
	 pDC->SetBkColor(RGB(121,106,173));
	 pDC->SetTextColor(RGB(255,255,255));
	 
	 title.Format("%s",time_div[m_time_div]);

	 t_rect.top =t_rect.bottom +1;
	 t_rect.bottom =t_rect.top+15;
	 pDC->DrawText (title,&t_rect,DT_RIGHT);

	 title="Edge";
     t_rect.top =t_rect.bottom +1;
	 t_rect.bottom =t_rect.top+15;
	 pDC->DrawText (title,&t_rect,DT_LEFT);

     if(cha_on)
	 {
     rect.left =x;
	 rect.right=rect.left +TEXT_WND_W;
	 rect.top =y+h+2;
	 rect.bottom =rect.top+TEXT_WND_H;
     
	 pDC->FillSolidRect(rect, RGB(121,106,173));
     rt.left =rect.left+1;
	 rt.right =rect.right -1;
	 rt.top =rect.top+2;
	 rt.bottom =rt.top+15;

	 pDC->FillSolidRect(rt, RGB(255,255,255));
    
     pDC->SetBkColor(RGB(255,255,255));
	 pDC->SetTextColor(RGB(0,0,0));
    
	 title="Trigger";
	// CRect t_rect;
	 t_rect.left=rect.left +1;
	 t_rect.right =rect.right -1;
	 t_rect.top =rect.top +2;
	 t_rect.bottom =t_rect.top+15;
	 pDC->DrawText (title,&t_rect,DT_CENTER);
	 
	 pDC->SetBkColor(RGB(121,106,173));
	 pDC->SetTextColor(RGB(255,255,255));
	 
	 title.Format("%s",time_div[m_time_div]);

	 t_rect.top =t_rect.bottom +1;
	 t_rect.bottom =t_rect.top+15;
	 pDC->DrawText (title,&t_rect,DT_RIGHT);

	 title="Edge";
     t_rect.top =t_rect.bottom +1;
	 t_rect.bottom =t_rect.top+15;
	 pDC->DrawText (title,&t_rect,DT_LEFT);
	 }
*/


/*
	  m_OldFont=pDC->SelectObject(m_font);
   //  CString mes;
	// float time;
  //   pDC->SetBkColor(RGB(1,0,16));
	 pDC->SetTextColor(RGB(100,100,108));
	 for(i=0;i<=10;i++)
     {
	   mes.Format("%d",i*10);
	   pDC->TextOut(x+i*w/10,y+h+2,mes);
	 }
	 pDC->TextOut(x+5*w/10,y+h+20, "Time (ms)");
    /* float  fx;
     float fa;
	 if(cntB>0)
	 {     fa=(float)cntX/(float)cntB;
	        fx=100000000.0*fa;
	          
		
			if(fx>1000000)
			{	 fx= fx/1000000.0;
                 mes.Format("%0.2fMhz",fx);
			}
	        else
			{
	        	if(fx>1000 && fx<1000000)
				{	fx=fx/1000.0;
		            mes.Format("%0.2fKhz",fx);
				}
	           else
	            mes.Format("%dhz",fx);

	  }
	 }
	 else
		 mes="XX";
	 pDC->SetTextColor(RGB(255,255,0));
     pDC->TextOut(x+7*w/10,y+h+20,mes);

	 mes.Format("cntB=%x,cntX=%x",cntB,cntX);
     pDC->TextOut(x+7*w/10,y+h,mes);
	 */


}

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;
*/
#define SA_W 8
#define SA_H 8
/*
time_div[][10]={"10s","5s","2s","1s","0.5s","0.2s","0.1s","50ms",
"20ms","10ms","5ms" ,"2ms","1ms","0.5ms","0.2ms","0.1ms","50us","20us","10us",
"5us" ,"2us","1us" ,"500ns","200ns","100ns","50ns","20ns","10ns"};*/
const long unsigned int t_div[]={0,0,2000000000,1000000000,500000000,200000000,100000000,50000000,
20000000,10000000,5000000 ,2000000,1000000,500000,200000,100000,50000,20000,10000,
5000 ,2000,1000 ,500,200,100,50,20,10,5};//,20,10};

void DisplayWindow::DisScaleLine(CDC *pDC, int x, int y,int w, int h)
{
   //CPen  Pen(PS_DOT,1,RGB(255,255,255));
   CPen * oldPen;
   oldPen = pDC->SelectObject(new CPen(PS_DOT, 1, RGB(255,255,255)));
   long unsigned int t;
   float freq,tm;
   CString mes;
   pDC->SetBkMode (TRANSPARENT);
   pDC->SetTextColor (RGB(0,180,0));
	switch(scaleline_mode)
	{
	case 1://draw || 
   
    pDC->MoveTo (x+LeftScaleSit,y);
    pDC->LineTo (x+LeftScaleSit,y+h);
    pDC->MoveTo (x+RightScaleSit,y);
    pDC->LineTo (x+RightScaleSit,y+h);
 
	delete pDC->SelectObject(new CPen(PS_SOLID, 1,  RGB(255,255,255)));
    
	pDC->MoveTo (x+LeftScaleSit,y);
    pDC->LineTo (x+LeftScaleSit-SA_W,y-SA_H);
    pDC->LineTo (x+LeftScaleSit+SA_W,y-SA_H);
    pDC->LineTo (x+LeftScaleSit,y);

	pDC->MoveTo (x+RightScaleSit,y);
    pDC->LineTo (x+RightScaleSit-SA_W,y-SA_H);
    pDC->LineTo (x+RightScaleSit+SA_W,y-SA_H);
    pDC->LineTo (x+RightScaleSit,y);
    
    pDC->MoveTo (x+LeftScaleSit,y+h);
    pDC->LineTo (x+LeftScaleSit-SA_W,y+h+SA_H);
    pDC->LineTo (x+LeftScaleSit+SA_W,y+h+SA_H);
    pDC->LineTo (x+LeftScaleSit,y+h);

	pDC->MoveTo (x+RightScaleSit,y+h);
    pDC->LineTo (x+RightScaleSit-SA_W,y+h+SA_H);
    pDC->LineTo (x+RightScaleSit+SA_W,y+h+SA_H);
    pDC->LineTo (x+RightScaleSit,y+h);
    t=0;
    mes=GetFreqString(RightScaleSit,LeftScaleSit);
	/*
	if(time_base.time_d>1)
	  { 
			t= t_div[time_base.time_d]/50; //ns级运算
			if(t>0)
		{	if(RightScaleSit!=LeftScaleSit)
            t=fabs(RightScaleSit-LeftScaleSit)*t;
            freq=(float)1000000000.0/(float)t;
	    	if(freq>1000000)
			{  freq/=1000000.0;
				 mes.Format ("X1-X2=%dns freq=%0.2fMhz",t,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
			}
			else
			{if(freq>1000)
				{  freq/=1000.0;
			        tm=(float)t/1000.0;
					 mes.Format ("X1-X2=%0.2fus freq=%0.2fKhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
				}
				else
				{
					tm=(float)t/1000000.0;
						mes.Format ("X1-X2=%0.2fms freq=%0.2fhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
				}
			}
		}
		else  //ps级运算 
		{
          t= t_div[time_base.time_d]*1000/50;
		   if(RightScaleSit!=LeftScaleSit)
             t=fabs(RightScaleSit-LeftScaleSit)*t;
		       freq=(float)1000000/(float)t;
			   if(freq>1000){
					 freq/=1000.0;
				     //  tm=(float)t/1000.0
				         mes.Format ("X1-X2=%dps freq=%0.2fGhz",t,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
			   }
			   else
			   {
                  tm=(float)t/1000.0;
				     mes.Format ("X1-X2=%0.2fns freq=%0.2fMhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
			   }

		}

	  }
	else
	 {  
		if(time_base.time_d==0)
			t=10000/50;
		else
         	if(time_base.time_d==1)
	          t=5000/50;

       if(RightScaleSit!=LeftScaleSit)
             t=fabs(RightScaleSit-LeftScaleSit)*t;
	  freq=1000.0/(float)t;
	  tm=(float)t/1000.0;

      mes.Format("X1-X2=%0.2fs freq=%0.2fhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
			
		}
   */
	 pDC->TextOut (x,y+h-18,mes);

    break;
	case 2:// draw ==
   pDC->MoveTo (x,y+UpScaleSit);
   pDC->LineTo (x+w,y+UpScaleSit);
   pDC->MoveTo (x,y+DownScaleSit);
   pDC->LineTo (x+w,y+DownScaleSit);

   delete pDC->SelectObject(new CPen(PS_SOLID, 1,  RGB(255,255,255)));
    pDC->MoveTo (x,y+UpScaleSit);
    pDC->LineTo (x-SA_W,y+UpScaleSit-SA_H);
    pDC->LineTo (x-SA_W,y+UpScaleSit+SA_H);
    pDC->LineTo (x,y+UpScaleSit);

	 pDC->MoveTo (x,y+DownScaleSit);
    pDC->LineTo (x-SA_W,y+DownScaleSit-SA_H);
    pDC->LineTo (x-SA_W,y+DownScaleSit+SA_H);
    pDC->LineTo (x,y+DownScaleSit);
    
    pDC->MoveTo (x+w,y+UpScaleSit);
    pDC->LineTo (x+w+SA_W,y+UpScaleSit-SA_H);
    pDC->LineTo (x+w+SA_W,y+UpScaleSit+SA_H);
    pDC->LineTo (x+w,y+UpScaleSit);

	pDC->MoveTo (x+w,y+DownScaleSit);
    pDC->LineTo (x+w+SA_W,y+DownScaleSit-SA_H);
    pDC->LineTo (x+w+SA_W,y+DownScaleSit+SA_H);
    pDC->LineTo (x+w,y+DownScaleSit);

	t=(fabs(DownScaleSit-UpScaleSit))* cha_param.probe *cha_param.vlot_d;// =10000; //10000mv 10V 通道衰减100db
	tm=(float)t/50.0;
    if(tm>1000)
	{	tm/=1000.0;
	    mes.Format("Y1-Y2=%0.2fV",tm);
	}else
         mes.Format("Y1-Y2=%0.2fmV",tm);

 pDC->TextOut (x,y+h-18,mes);



		break;
	case 3:  //draw |
	 pDC->MoveTo (x+LeftScaleSit,y);
   pDC->LineTo (x+LeftScaleSit,y+h);
   delete pDC->SelectObject(new CPen(PS_SOLID, 1,  RGB(255,255,255)));
    pDC->MoveTo (x+LeftScaleSit,y);
    pDC->LineTo (x+LeftScaleSit-SA_W,y-SA_H);
    pDC->LineTo (x+LeftScaleSit+SA_W,y-SA_H);
    pDC->LineTo (x+LeftScaleSit,y);

    
    pDC->MoveTo (x+LeftScaleSit,y+h);
    pDC->LineTo (x+LeftScaleSit-SA_W,y+h+SA_H);
    pDC->LineTo (x+LeftScaleSit+SA_W,y+h+SA_H);
    pDC->LineTo (x+LeftScaleSit,y+h);
		break;
	case 4:  //draw --
		pDC->MoveTo (x,y+UpScaleSit);
   pDC->LineTo (x+w,y+UpScaleSit);
   delete pDC->SelectObject(new CPen(PS_SOLID, 1,  RGB(255,255,255)));
    pDC->MoveTo (x,y+UpScaleSit);
    pDC->LineTo (x-SA_W,y+UpScaleSit-SA_H);
    pDC->LineTo (x-SA_W,y+UpScaleSit+SA_H);
    pDC->LineTo (x,y+UpScaleSit);

   
    pDC->MoveTo (x+w,y+UpScaleSit);
    pDC->LineTo (x+w+SA_W,y+UpScaleSit-SA_H);
    pDC->LineTo (x+w+SA_W,y+UpScaleSit+SA_H);
    pDC->LineTo (x+w,y+UpScaleSit);
		break;
	}
		delete pDC->SelectObject(oldPen);

}

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;
*/
}
/*
#define DISWIDTH  500
#define DISHEIGHT 400
#define XOFFSIZE  60
#define YOFFSIZE  60
#define Sample_Depth 2048
*/

#define DISLENGHT 300
#define p1 500.0/SAMPLE_DEPTH_F
#define p2 300.0/SAMPLE_DEPTH_F
#define rl p1*DISLENGHT

void DisplayWindow::DisTrig_sit(CDC *pDC, int y)
{
//	int offset;    //显示偏移
//	int trig_sit;  //触发位置
  CPen  Pen(PS_SOLID,1,RGB(255,255,255));
  CPen  Pen1(PS_DOT ,1,RGB(0,255,0));
  CPen  Pen2(PS_SOLID ,3,RGB(255,0,0));

  CPen * oldPen=pDC->SelectObject (&Pen);
	
  pDC->MoveTo(XOFFSIZE+(DISWIDTH-DISLENGHT)/2,y+YOFFSIZE);
  pDC->LineTo(XOFFSIZE+(DISWIDTH-DISLENGHT)/2,y+YOFFSIZE+10);
  pDC->SelectObject (&Pen1);
  pDC->MoveTo(XOFFSIZE+(DISWIDTH-DISLENGHT)/2,y+YOFFSIZE+5);

⌨️ 快捷键说明

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