📄 displaywindow.cpp
字号:
pDC->LineTo(XOFFSIZE+(DISWIDTH-DISLENGHT)/2+DISLENGHT,y+YOFFSIZE+5);
pDC->SelectObject (&Pen);
pDC->MoveTo(XOFFSIZE+(DISWIDTH-DISLENGHT)/2+DISLENGHT,y+YOFFSIZE);
pDC->LineTo(XOFFSIZE+(DISWIDTH-DISLENGHT)/2+DISLENGHT,y+YOFFSIZE+10);
pDC->SelectObject (GetStockObject(NULL_BRUSH));
//float p2=DISLENGHT/DISWIDTH;
//int rl=p1*DISLENGHT;
CRect rect;
int offset_min=(int)(float)time_base.memory_offset*p2+XOFFSIZE+(DISWIDTH-DISLENGHT)/2;
rect.left=offset_min;
rect.top=y+YOFFSIZE ;
rect.right=offset_min+rl;
rect.bottom=y+YOFFSIZE+10;
pDC->Rectangle (&rect);
pDC->SelectObject (&Pen2);
int sit=(int)(float)(time_base.trigger_offset)*p2+XOFFSIZE+(DISWIDTH-DISLENGHT)/2;
pDC->MoveTo(sit-5,y+YOFFSIZE);
pDC->LineTo(sit+5,y+YOFFSIZE);
pDC->LineTo(sit,y+YOFFSIZE+5);
pDC->LineTo(sit-5,y+YOFFSIZE);
pDC->SelectObject(oldPen);
}
BOOL DisplayWindow::SetCha_ON_OFF(BOOL isOn)
{ if(isOn)
cha_on=true;
else
cha_on=false;
ReDrawSCreen();
return true;
}
BOOL DisplayWindow::SetChb_ON_OFF(BOOL isOn)
{
if(isOn)
chb_on=true;
else
chb_on=false;
ReDrawSCreen();
return true;
}
void DisplayWindow::OpenScaleLine(BYTE mode)
{
scaleline_mode=mode;
switch(scaleline_mode)
{
case 0:
LeftScaleSit=0;
RightScaleSit=0;
UpScaleSit=0;
DownScaleSit=0;
break;
case 1: // ||
LeftScaleSit=DISWIDTH/3;
RightScaleSit=2*DISWIDTH/3;
break;
case 2:// =
UpScaleSit=DISHEIGHT/3;
DownScaleSit=2*DISHEIGHT/3;
break;
case 3: // |
LeftScaleSit=DISWIDTH/3;
break;
case 4: // -
UpScaleSit=DISHEIGHT/3;
break;
}
ReDrawSCreen();
}
void DisplayWindow::SetTime_Div(int i)
{
m_time_div=i;
ReDrawSCreen();
}
void DisplayWindow::DrawRectForText(CDC *pDC, int x, int y, CString title, CString str1, CString str2)
{
m_OldFont=pDC->SelectObject(m_font);
pDC->SetBkMode (TRANSPARENT);
CRect rect,rt;
rect.left =x;
rect.right=rect.left +TEXT_WND_W;
rect.top =y;
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->SetTextColor(RGB(0,0,0));
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));
t_rect.top =t_rect.bottom +1;
t_rect.bottom =t_rect.top+15;
pDC->DrawText (str1,&t_rect,DT_RIGHT);
t_rect.top =t_rect.bottom +1;
t_rect.bottom =t_rect.top+15;
pDC->DrawText (str2,&t_rect,DT_RIGHT);
}
void DisplayWindow::SetChaVlot_Div(int v)
{
m_cha_vlot_div=v;
ReDrawSCreen();
}
void DisplayWindow::SetChbVlot_Div(int v)
{ m_chb_vlot_div=v;
ReDrawSCreen();
}
void DisplayWindow::SetTriggerLevel(WORD v)
{
trig_level=(DISHEIGHT*v)/1024;
ReDrawSCreen();
}
void DisplayWindow::DrawLineGraph(WPARAM wParam, LPARAM lParam)
{
ReDrawSCreen();
//DrawLine();
}
BOOL DisplayWindow::UsbOpenDriver(HANDLE *phDeviceHandle, PCHAR devicename)
{
char completeDeviceName[64] = "";
strcat (completeDeviceName,"\\\\.\\");
strcat (completeDeviceName,devicename);
*phDeviceHandle = CreateFile(completeDeviceName,
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
if (*phDeviceHandle == INVALID_HANDLE_VALUE)
return (FALSE);
else
return (TRUE);
}
#define PT_W (( DisplayWindow *)pParam)
//采集数据线程.
UINT GetADdata_ThreadProc(void * pParam)
{
HANDLE hInDevice = NULL;
char DeviceName[50] = "Ezusb-0";
// BYTE ord[8];
if (PT_W->UsbOpenDriver (&hInDevice, DeviceName) != TRUE)
{ ::AfxMessageBox( "无效设备,请重试!");
return 0;
}
PT_W->comEventStart.Lock();
while(PT_W->Kill_Theard)
{
while(PT_W->Caiyang)
{
if(!PT_W->GetADdata(hInDevice))return 0;
// fps++;
// if((fps%2)==0)
::PostMessage (PT_W->m_hWnd,WM_MY_DRAWGRAPH,0,0);
// Sleep(100);
if(trigger.mode ==2)
PT_W->comEventStart.Lock();
// else
// {
//
// }
// Sleep(100);
//PT_W->ReDrawSCreen();
// ord[0]='R';
// PT_W->SendCommandToUSB(ord,VR_USRCMD);
}
PT_W->comEventStart.Lock();
}
CloseHandle (hInDevice);
return 1;
}
BOOL DisplayWindow::SendCommandToUSB(BYTE * cmd_buffer,BYTE order)
{
VENDOR_OR_CLASS_REQUEST_CONTROL myRequest;
HANDLE hInDevice = NULL;
ULONG bufferSize = 8;
BOOL bResult=false;
char DeviceName[20] = "Ezusb-0";
unsigned char sum;
sum=0;
for(int i=0;i<7;i++)
sum+=*(cmd_buffer+i);
sum=~sum+1;
*(cmd_buffer+i)=sum;
if (UsbOpenDriver (&hInDevice, DeviceName) != TRUE)
{
MessageBox( "无效设备,请重试!","错误",MB_ICONERROR);
return false;
}
else
{ DWORD dwReturned;
myRequest.request = order;
myRequest.value = 8;
myRequest.index = 0xBEEF;
myRequest.direction = 0;
myRequest.requestType=2; // vendor specific request type (2)
myRequest.recepient=0; // recepient is device (0)
bResult = DeviceIoControl(hInDevice,
IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,
&myRequest,
sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),
cmd_buffer,8,
(unsigned long *)&dwReturned,
NULL);
if (bResult!=TRUE)
MessageBox("命令失败!","错误",MB_ICONERROR);
CloseHandle (hInDevice);
}
return bResult;
}
void DisplayWindow::RecordWave(BOOL flag)
{
isRecord=flag;
}
void DisplayWindow::Recall()
{
if(pagedata_start){acquire.counter=0;
pg=pagedata_start;
memcpy(cha_addata,pg->cha_data,SAMPLE_DEPTH);
ReDrawSCreen();
}
}
void DisplayWindow::Play_Back()
{
if((pg!=NULL)&&(pg!=pagedata_start))
{ pg=pg->up;
memcpy(cha_addata,pg->cha_data,SAMPLE_DEPTH);
ReDrawSCreen();
}
}
void DisplayWindow::Play_Next()
{
if((pg!=NULL)&&(pg->next!=NULL))
{ pg=pg->next;
memcpy(cha_addata,pg->cha_data,SAMPLE_DEPTH);
ReDrawSCreen();
}
}
CString DisplayWindow::GetFreqString(int RightScaleSit, int LeftScaleSit)
{ CString mes;
int t;
float freq,tm;
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 ("T=%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 ("T=%0.2fus freq=%0.2fKhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
}
else
{
tm=(float)t/1000000.0;
mes.Format ("T=%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 ("T=%dps freq=%0.2fGhz",t,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
}
else
{
tm=(float)t/1000.0;
mes.Format ("T=%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("T=%0.2fs freq=%0.2fhz",tm,freq);//; Y1-Y2=%d",,DownScaleSit-UpScaleSit);
}
return mes;
}
void DisplayWindow::GetFreq(int chx, int *left_sit, int *right_sit)
{
int x1,x2,x3,x4,x5,x6,x7,x8;
int xi=time_base.memory_offset ;
x1=x2=x3=x4=x5=x6=x7=x8=0;
BYTE level,min,max;
min=255;max=0;
if(chx==0)
{
for(; xi<(DISWIDTH+time_base.memory_offset);xi++)
{
if(cha_addata[xi]<min)
min=cha_addata[xi];
if(cha_addata[xi]>max)
max=cha_addata[xi];
}
level=min+(max-min)/2;
trigger.level=level;
xi=time_base.memory_offset ;
for(; xi<(DISWIDTH+time_base.memory_offset);xi++)
{
if(x1==0)
{ //if(cha_addata[xi]>(trigger.level-TRIG_OFFSET))
if(cha_addata[xi]>(level-TRIG_OFFSET))
{ x1=xi;
continue;
}
}
if(x1>0 && x2==0)
{
// if(cha_addata[xi]>(trigger.level+TRIG_OFFSET))
if(cha_addata[xi]>(level+TRIG_OFFSET))
{ x2=xi;
continue;
}
}
///////////////////////////////////////////////////////////////
if(x2>0 && x3==0)
{
// if(cha_addata[xi]<(trigger.level+TRIG_OFFSET))
if(cha_addata[xi]<(level+TRIG_OFFSET))
{ x3=xi;
continue;
}
}
if(x3>0 && x4==0)
{
// if(cha_addata[xi]<(trigger.level-TRIG_OFFSET))
if(cha_addata[xi]<(level-TRIG_OFFSET))
{ x4=xi;
continue;
}
}
///////////////////////////////////////////////////////////
if(x4>0 && x5==0)
{
// if(cha_addata[xi]>(trigger.level-TRIG_OFFSET))
if(cha_addata[xi]>(level-TRIG_OFFSET))
{ x5=xi;
continue;
}
}
if(x5>0 && x6==0)
{
// if(cha_addata[xi]>(trigger.level+TRIG_OFFSET))
if(cha_addata[xi]>(level+TRIG_OFFSET))
{ x6=xi;
continue;
}
}
///////////////////////////////////////////////
if(x6>0 && x7==0)
{
// if(cha_addata[xi]<(trigger.level+TRIG_OFFSET))
if(cha_addata[xi]<(level+TRIG_OFFSET))
{ x7=xi;
continue;
}
}
if(x7>0 && x8==0)
{
// if(cha_addata[xi]<(trigger.level-TRIG_OFFSET))
if(cha_addata[xi]<(level-TRIG_OFFSET))
{ x8=xi;
break;
}
}
}
} else
{
for(; xi<(DISWIDTH+time_base.memory_offset);xi++)
{ if(x1==0)
{ //if(cha_addata[xi]>(trigger.level-TRIG_OFFSET))
if(cha_addata[xi]>(level-TRIG_OFFSET))
{ x1=xi;
continue;
}
}
if(x1>0 && x2==0)
{
// if(cha_addata[xi]>(trigger.level+TRIG_OFFSET))
if(cha_addata[xi]>(level+TRIG_OFFSET))
{ x2=xi;
continue;
}
}
///////////////////////////////////////////////////////////////
if(x2>0 && x3==0)
{
//if(cha_addata[xi]<(trigger.level+TRIG_OFFSET))
if(cha_addata[xi]<(level+TRIG_OFFSET))
{ x3=xi;
continue;
}
}
if(x3>0 && x4==0)
{
// if(cha_addata[xi]<(trigger.level-TRIG_OFFSET))
if(cha_addata[xi]<(level-TRIG_OFFSET))
{ x4=xi;
continue;
}
}
///////////////////////////////////////////////////////////
if(x4>0 && x5==0)
{
//if(cha_addata[xi]>(trigger.level-TRIG_OFFSET))
if(cha_addata[xi]>(level-TRIG_OFFSET))
{ x5=xi;
continue;
}
}
if(x5>0 && x6==0)
{
//if(cha_addata[xi]>(trigger.level+TRIG_OFFSET))
if(cha_addata[xi]>(level+TRIG_OFFSET))
{ x6=xi;
continue;
}
}
///////////////////////////////////////////////
if(x6>0 && x7==0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -