📄 displaywindow.cpp
字号:
pOldPen = pDC->SelectObject(&pen);
m_OldFont=pDC->SelectObject(m_font);
if(x<40||x>800){delete pDC;return;}
pDC->SetROP2 (R2_XORPEN);
pDC->MoveTo(x,20);
pDC->LineTo(x,hh-25-(4*h_st));
int i=x-40;
char mes[50];
wsprintf(mes,"x=%d,Ldy=%d,Rdy=%d ",i,
data[1][i],data[3][i]);
pDC->SetBkColor(RGB(0,0,0));
pDC->SetTextColor(RGB(255,255,0));
pDC->TextOut(ww/2+150,3,mes);
*/
//delete pDC;
}
void DisplayWindow::DisDinBiaoLine(CDC * pDC)
{
}
void DisplayWindow::draw_line(CDC *pDC,int x, BOOL flag, char F)
{
}
void DisplayWindow::ReDrawSCreen()
{ // if(pagedata_start==NULL)return;
// DrawLine(0,0);
// acquire.counter++;
isDrawOther=true;
DrawLine();
}
void DisplayWindow::OnRButtonDown(UINT nFlags, CPoint point)
{
// if (m_hCursor2)
// ::SetCursor(m_hCursor2);
// mouse_XB=point.x;
// SetCapture();
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MENU_SETUP));
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(pPopup != NULL);
CWnd* pWndPopupOwner = this;
while (pWndPopupOwner->GetStyle() & WS_CHILD)
pWndPopupOwner = pWndPopupOwner->GetParent();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y+90,
pWndPopupOwner);
CStatic::OnRButtonDown(nFlags, point);
}
void DisplayWindow::OnRButtonUp(UINT nFlags, CPoint point)
{ // Play=0;
// ReleaseCapture();
CStatic::OnRButtonUp(nFlags, point);
}
BOOL DisplayWindow::GetDinBiaoData(int x)
{
return 1;
}
BOOL DisplayWindow::GetDYData()
{
return 1;
}
BOOL DisplayWindow::DrwaDyRrand(int s)
{
return 1;
}
void DisplayWindow::GetFenXinData()
{/* CClientDC * pDC;
pDC=new CClientDC(this);
delete pDC;
*/
}
BOOL DisplayWindow::GetADdata(HANDLE hDevice)
{
ULONG length;
ULONG nBytes;
BOOL bResult;
BULK_TRANSFER_CONTROL bulkControl;
DWORD ioctl_val ;
int i,j;
//int ay1,ay2,by1,by2,x1,x2;
bulkControl.pipeNum = 1;
length = SAMPLE_DEPTH*2;
ioctl_val = IOCTL_EZUSB_BULK_READ;
BYTE c;
if (hDevice != NULL)
{
bResult = DeviceIoControl (hDevice,
ioctl_val,
&bulkControl,
sizeof (BULK_TRANSFER_CONTROL),
addata_buffer,//cha_addata,
length,
&nBytes,
NULL);
if( bResult != TRUE)
{
::AfxMessageBox("获取数据有错误!");
return 0;
}
j=0;
if(time_base.time_d<24)
{for(i=0;i<SAMPLE_DEPTH*2;i+=4)
{
chb_addata[j]=addata_buffer[i];
cha_addata[j]=addata_buffer[i+2];
j++;
chb_addata[j]=addata_buffer[i+1];
cha_addata[j]=addata_buffer[i+3];
j++;
}
}
// i=SAMPLE_DEPTH-time_base.trigger_offset+20;
if(time_base.time_d==24)//100ns/div 2ns/pixel
{
j=0;
i=time_base.trigger_offset*2-SAMPLE_DEPTH/2+10*2;
for(j=0;j<SAMPLE_DEPTH;j+=2,i+=4)//偶数地址放数据
{ chb_addata[j]=addata_buffer[i];
cha_addata[j]=addata_buffer[i+2];
j+=2;
// chb_addata[j]=addata_buffer[i]-9;
// cha_addata[j]=addata_buffer[i+2];
// j++;
chb_addata[j]=addata_buffer[i+1];//(addata_buffer[i+1]-addata_buffer[i])/2+(addata_buffer[i]-9);
cha_addata[j]=addata_buffer[i+3];//(addata_buffer[i+3]-addata_buffer[i+2])/2+addata_buffer[i+2];
}
for(j=1;j<SAMPLE_DEPTH;j+=2)//线性插值
{ chb_addata[j]=(chb_addata[j+1]-chb_addata[j-1])/2+chb_addata[j-1];
cha_addata[j]=(cha_addata[j+1]-cha_addata[j-1])/2+cha_addata[j-1];
}
}
if(time_base.time_d==25)//50ns/div 1ns/pixel
{ j=0;
i=time_base.trigger_offset*2-SAMPLE_DEPTH/4+10*2;
for(j=0;j<SAMPLE_DEPTH;j+=8,i+=4)//偶数地址放数据
{ chb_addata[j]=addata_buffer[i];
cha_addata[j]=addata_buffer[i+2];
chb_addata[j+4]=addata_buffer[i+1];//(addata_buffer[i+1]-addata_buffer[i])/2+(addata_buffer[i]-9);
cha_addata[j+4]=addata_buffer[i+3];//(addata_buffer[i+3]-addata_buffer[i+2])/2+addata_buffer[i+2];
}
for(j=1;j<SAMPLE_DEPTH;j+=4)//
{ chb_addata[j]=Intrepol_sin(j,chb_addata,4);//(chb_addata[j+3]-chb_addata[j-1])/4+chb_addata[j-1];
cha_addata[j]=Intrepol_sin(j,cha_addata,4);//(cha_addata[j+3]-cha_addata[j-1])/4+cha_addata[j-1];
chb_addata[j+1]=Intrepol_sin(j+1,chb_addata,4);//(chb_addata[j+3]-chb_addata[j-1])/2+chb_addata[j-1];
cha_addata[j+1]=Intrepol_sin(j+1,cha_addata,4);//(cha_addata[j+3]-cha_addata[j-1])/2+cha_addata[j-1];
chb_addata[j+2]=Intrepol_sin(j+2,chb_addata,4);//(chb_addata[j+3]-chb_addata[j-1])*3/4+chb_addata[j-1];
cha_addata[j+2]=Intrepol_sin(j+2,cha_addata,4);//(cha_addata[j+3]-cha_addata[j-1])*3/4+cha_addata[j-1];
}
}
if(time_base.time_d>25)
{j=0;
i=SAMPLE_DEPTH-time_base.trigger_offset+20;
do{ cha_addata[j++]=addata_buffer[i+2];
cha_addata[j++]=addata_buffer[i+1];
cha_addata[j++]=addata_buffer[i+3];
cha_addata[j++]=addata_buffer[i];
i+=4;
}while (j<SAMPLE_DEPTH-1);
}
if(isRecord)
{
AddPage();
}
return true;
}
return false;
}
/*
float v;
float ft=(float)(rand()%100);
for(int i=0;i<1024;i++)
{v=0.3*sin(2*PI*i/ft);
if(v>=0)
ADdata[i]=128+BYTE(v*128);
else
ADdata[i]=fabsf(v)*128;
}
return true;
/* for(i=0;i<SAMPLE_DEPTH;i+=2)
{
c=cha_addata[i];
cha_addata[i]=cha_addata[i+1];
cha_addata[i+1]=c;
}*/
/*else
{ j=0;
for(i=0;i<SAMPLE_DEPTH*2;i+=4)
{ cha_addata[j++]=usb_buffer[i];
cha_addata[j++]=usb_buffer[i+1];
}
/* for(i=0;i<2048;i+4)
{
cha_addata[j++]=usb_buffer[i];
cha_addata[j++]=usb_buffer[i+1];
}*/
/* j=0;
for(i=2;i<SAMPLE_DEPTH*2;i+=4)
{ chb_addata[j++]=usb_buffer[i];
chb_addata[j++]=usb_buffer[i+1];
}*/
/* for(i=2;i<2048;i+4)
{
cha_addata[j++]=usb_buffer[i];
cha_addata[j++]=usb_buffer[i+1];
}*/
void DisplayWindow::GetBackToBmp()
{
if(firstdiswindow)
{CClientDC * pDC;
pDC=new CClientDC(this);
CDC dc_Mem;
CBitmap * oldBmp = NULL;
dc_Mem.CreateCompatibleDC(pDC);
oldScreen_Bitmap.CreateCompatibleBitmap(pDC,ww,hh);
oldBmp=dc_Mem.SelectObject(&oldScreen_Bitmap);
dc_Mem.BitBlt(0,0,ww,hh,pDC,0,0,SRCCOPY); // 将原屏幕图象(oldScreen_Bitmap)
dc_Mem.SelectObject (oldBmp);
dc_Mem.DeleteDC();
firstdiswindow=0;
delete pDC;
}
}
void DisplayWindow::StartAD()
{
Caiyang=1;
comEventStart.SetEvent();
}
void DisplayWindow::PauseAD()
{
Caiyang=false;
}
void DisplayWindow::StopAD()
{
// KillTimer(1);
// CloseHandle (hUsbInDevice);
}
void DisplayWindow::OnTimer(UINT nIDEvent)
{
}
int DisplayWindow::Trigger()
{
WORD a=512;
int m_nTriggerCH1=0;
/* CH1 Tigger */
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<10;i++)
{ //draw ____line .
for(j=0;j<Width;j+=4)
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);
//draw | line .
for(j=0;j<Height;j+=4)
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<=4;i++)
{ mes.Format("%0.1f",(vlots/1000.)*(4-i));
pDC->TextOut(25,y+i*h/8,mes);
}
for(;i<=8;i++)
{ mes.Format("-%0.1f",(vlots/1000.0)*(i-4));
pDC->TextOut(25,y+i*h/8,mes);
}
mes="Vlotage (V)";
}
else
{
for( int i=0;i<=4;i++)
{ mes.Format("%0.1f",vlots*(4-i));
pDC->TextOut(25,y+i*h/8,mes);
}
for(;i<=8;i++)
{ mes.Format("-%0.1f",vlots*(i-4));
pDC->TextOut(25,y+i*h/8,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);*/
}
const char 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","5ns"};
const char acquire_freq[][10]={"25MHz","50MHz","100MHz","250MHz","500MHz"};
//const char time_div_str[][10]={ "s","s","s","s","s","s","s","ms","ms","ms","ms","ms", "ms","ms" ,"ms" ,"ms" ,"us",
//"us","us","us","us","us", "us", "us", "us","ns","ns","ns"};
#define TEXT_WND_W 100
#define TEXT_WND_H 50
#define TEXT_WND_H_OFFSET 32
void DisplayWindow::DisTimeVlem(CDC *pDC, int x, int y, int w, int h)
{
m_OldFont=pDC->SelectObject(m_font);
CString title;
CString str1;
CString str2;
float t_level;
int cha_vd=0;
int chb_vd=0;
pDC->SetBkMode (TRANSPARENT);
CRect rect,rt;
if(cha_param.display )
{ cha_vd=cha_param.vlot_d *cha_param.probe;
if( cha_vd/1000>=1)
str1.Format ("%dV/div",cha_vd/1000);
else
str1.Format ("%dmV/div",cha_vd);
if(cha_param.couping)
str2="AC coupline";
else
str2="DC coupline";
// cha_param.y_offset
DrawRectForText(pDC,x,y+h+TEXT_WND_H_OFFSET,"CHA",str1,str2);
}
if(chb_param.display )
{chb_vd=chb_param.vlot_d *chb_param.probe;
if(chb_vd/1000>=1)
str1.Format ("%dV/div",chb_vd/1000);
else
str1.Format ("%dmV/div",chb_vd);
if(chb_param.couping)
str2="AC coupline";
else
str2="DC coupline";
DrawRectForText(pDC,x+TEXT_WND_W+4,y+h+TEXT_WND_H_OFFSET,"CHB",str1,str2);
}
int vd=0;
str1=_T("");
str2=_T("");
switch(trigger.source )
{
case 0: //CHA
str1="CHA ";
vd=cha_vd;
break;
case 1: //CHB
str1="CHB ";
vd=chb_vd;
break;
case 2: //EXT
str1="Ext ";
vd=0;
break;
case 3: //EXT/5
str1="Ext/5 ";
vd=0;
break;
}
switch(trigger.coupling)
{
case 0:
str1+="DC ";
break;
case 1:
str1+="AC ";
break;
case 2:
str1+="LF ";
break;
case 3:
str1+="HF ";
break;
}
if(vd>0){
t_level=(float)((((float)(trigger.level)-128.0)/128.0)*vd*5.0);
//(float)((float)m_cha_vlot_div*4.0*(DISHEIGHT/2-trig_level))/(DISHEIGHT/2);
if(abs(t_level/1000)>=1)
str2.Format ("%0.2fV",t_level/1000);
else
str2.Format ("%0.2fmV",t_level);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -