📄 displaywindow.cpp
字号:
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 + -