?? usbdlg.cpp
字號:
int i;
for(i=0;i<m_XLineStart.GetSize();i++)
{
pDC->MoveTo (m_XLineStart[i],m_InnerUHScreen);
pDC->LineTo (m_XLineStart[i],m_InnerDHScreen);
}
for(i=0;i<m_YLineStart.GetSize();i++)
{
pDC->MoveTo (m_InnerLWScreen,m_YLineStart[i]);
pDC->LineTo (m_InnerRWScreen,m_YLineStart[i]);
}
pDC->SelectObject (pOldPen);
}
void CUSBDlg::XLPtoXVP (int x,float *X)
{
*X=m_xStart+(x-m_InnerLWScreen)*m_XOriginScale;
}
void CUSBDlg::YLPtoYVP (int y,float *Y)
{
*Y=m_yStart+(m_InnerDHScreen-y)*m_YOriginScale;
}
void CUSBDlg::XVPtoXLP(float x,int *X)
{
float TempX;
TempX=((x-m_xStart)/m_XOriginScale+(float)0.5)+m_InnerLWScreen;
if(TempX > 3000) TempX = 3000;
*X=(int)TempX;
}
void CUSBDlg::YVPtoYLP(float y,int *Y)
{
float TempY;
TempY=m_InnerDHScreen-((y-m_yStart)/m_YOriginScale+(float)0.5);
if(TempY > 3000) TempY = 3000;
*Y = (int)TempY;
}
void CUSBDlg::GetBackLines(float xRectStart,float yRectStart,float xRectEnd,float yRectEnd)
{
if(m_XLineStart.GetSize()>0)
m_XLineStart.RemoveAll();
if(m_YLineStart.GetSize()>0)
m_YLineStart.RemoveAll();
float xL;
float xd;
float xLine;
xL=xRectEnd-xRectStart;
if(xL<0) xL=-xL;
if(xL==0) return;
xd=xL/8;
m_xLineStart[0]=xRectStart;
m_XLineStart.Add(m_InnerLWScreen);
m_xn=0;
xLine=xd;
while(xLine<xL)
{
m_xn=m_xn+1;
m_xLineStart[m_xn]=m_xn*xd;
m_XLineStart.Add((int)(xLine/m_XOriginScale)+m_InnerLWScreen);
xLine=xLine+xd;
}
m_xn=m_xn+1;
m_xLineStart[m_xn]=xRectEnd;
m_XLineStart.Add((int)((xRectEnd-xRectStart)/m_XOriginScale)+m_InnerLWScreen-1);
float yL;
float yd;
float yLine;
yL=yRectEnd-yRectStart;
if(yL<0) yL=-yL;
if(yL==0) return;
yd=yL/6;
m_yLineStart[0]=yRectStart;
m_yn=0;
m_YLineStart.Add(m_InnerDHScreen-1);
yLine=yd;
while(yLine<yL)
{
m_yn=m_yn+1;
m_yLineStart[m_yn]=m_yn*yd;
m_YLineStart.Add(m_InnerDHScreen-(int)(yLine/m_YOriginScale));
yLine=yLine+yd;
}
m_yn=m_yn+1;
m_yLineStart[m_yn]=yRectEnd;
m_YLineStart.Add(m_InnerDHScreen-(int)((yRectEnd-yRectStart)/m_YOriginScale));
}
void CUSBDlg::DrawCurve (CDC *pDC)
{
int x1,y1;
CPen npen((int)PS_SOLID,(int)1,RGB(255,255,0));
CPen* npOldPen=pDC->SelectObject (&npen);
pDC->SetROP2(R2_COPYPEN);
XVPtoXLP(m_PointList[0].x,&x1);
YVPtoYLP(m_PointList[0].y,&y1);
pDC->MoveTo (x1,y1);
for(int i=1;i<256;i++)
{
XVPtoXLP(m_PointList[i].x,&x1);
YVPtoYLP(m_PointList[i].y,&y1);
pDC->LineTo (x1,y1);
}
pDC->SelectObject (npOldPen);
}
void CUSBDlg::DrawUDLRrect (CDC *pDC)
{
pDC->SetBkColor(12632256);
CBrush brush(pDC->GetBkColor ());
pDC->FillRect(Urect,&brush);
pDC->FillRect(Drect,&brush);
pDC->FillRect(Lrect,&brush);
pDC->FillRect(Rrect,&brush);
pDC->DrawEdge(TotalRect,EDGE_SUNKEN,BF_RECT);
}
void CUSBDlg::DrawLab(CDC *pDC)
{
pDC->TextOut(m_InnerLWScreen-30,m_InnerUHScreen-27,"幅度值");
pDC->TextOut(m_InnerLWScreen/2-15 + m_InnerRWScreen/2,m_InnerDHScreen+ 20, "點數值");
char str[10];
for(int i=0;i<m_YLineStart.GetSize();i++)
{
sprintf(str,"%5.1f",(MaxValue-MinValue)/6.0*i+MinValue);
pDC->TextOut(m_InnerLWScreen-45,m_YLineStart[i]-10,str);
}
for(i=0;i<m_XLineStart.GetSize();i++)
{
sprintf(str,"%d",i*32);
pDC->TextOut(m_XLineStart[i]-5,m_InnerDHScreen+5,str);
}
pDC->TextOut(m_InnerLWScreen+150,m_InnerUHScreen-27,"波形顯示");
}
////////////////////////////////////////////////////////////////////////////////
BOOL CUSBDlg::EzusbShortdataIn(HANDLE hDevice, BYTE *data, DWORD &lenBytes)
{
BULK_TRANSFER_CONTROL bulkControl;
bulkControl.pipeNum=0x02;
BOOLEAN bResult= FALSE;
unsigned short temp,TempMax,TempMin;
bResult = DeviceIoControl (hDevice,
IOCTL_EZUSB_BULK_READ,
&bulkControl,
sizeof (BULK_TRANSFER_CONTROL),
data,
8192,
&lenBytes,
NULL);
for (int i=0;i<(unsigned int)(lenBytes/16);i++)
{
temp=data[8*i];//+(data[4*i+1])*16;
//if(temp>4096) temp=2048;
m_PointList[count++].y = temp;
if (count==255) count=0;
}
TempMax=TempMin=m_PointList[0].y;
for (i=1;i<256;i++)
{
if(m_PointList[i].y>TempMax)
TempMax=m_PointList[i].y;
else if(m_PointList[i].y<TempMin)
TempMin=m_PointList[i].y;
}
MaxValue=500;//TempMax+100;
MinValue=-100;//TempMin-100;
CRect r;
r.SetRect(m_InnerLWScreen , m_InnerUHScreen, m_InnerRWScreen , m_InnerDHScreen);
InvalidateRect(r,TRUE);
return bResult;
}
void CUSBDlg::OnBeginWork()
{
if(m_hDevice==NULL)
{
MessageBox("設備沒有打開,請確定設備已經打開,再重新打開本程序!");
return;
}
threadController=1;
AfxBeginThread(threadproc1,this,THREAD_PRIORITY_NORMAL);
AfxBeginThread(threadproc1,this,THREAD_PRIORITY_NORMAL);
GetDlgItem(IDC_BeginWork)->EnableWindow(0);
GetDlgItem(IDC_Pause)->EnableWindow(1);
}
void CUSBDlg::OnPause()
{
threadController=0;
GetDlgItem(IDC_BeginWork)->EnableWindow(1);
}
void CUSBDlg::OnClose()
{
if(threadController)
{
MessageBox("請先暫停,再退出!");
return;
}
CDialog::OnClose();
}
void CUSBDlg::OnOK()
{
if(threadController)
{
MessageBox("請先暫停,再退出!");
return;
} // TODO: Add extra validation here
CDialog::OnOK();
}
void CUSBDlg::AddDataToList(CString str)
{
//CString str1;
//m_DataDisplay.GetWindowText(str1);
//str1+=str;
//m_DataDisplay.SetWindowText(str1);
m_DataDisplay.SetWindowText(str);
}
void CUSBDlg::OnClearData()
{
m_DataDisplay.SetWindowText("");
}
void CUSBDlg::OnAbout()
{
CAboutDlg dlg;
dlg.DoModal();
}
void CUSBDlg::OnSaveButton()
{
// TODO: Add your control notification handler code here
if(threadController)
{
MessageBox("請首先結束當前線程!", "錯誤", MB_ICONERROR | MB_OK);
return;
}
CFileDialog SaveDlg(FALSE,"uad","*.uad");
if (SaveDlg.DoModal()==IDOK)
{
CFile SaveFile;
if(!SaveFile.Open(SaveDlg.GetPathName(),CFile::modeCreate|CFile::modeWrite))
{
AfxMessageBox("打開文件失敗!");
return;
}
else
{
unsigned short* pBuf = new unsigned short[256];
CString str;
for(int i = 0; i < 256; i++)
{
pBuf[i] = m_PointList[i].y;
str.Format(_T("[%d]:0x%x"),i,pBuf[i]);
// m_UsbList.AddString(str);
}
SaveFile.Write( pBuf, 512);
SaveFile.Close();
delete pBuf;
}
}
}
void CUSBDlg::OnReplayButton()
{
// TODO: Add your control notification handler code here
if(threadController)
{
MessageBox("請首先結束當前線程!", "錯誤", MB_ICONERROR | MB_OK);
return;
}
CFileDialog OpenDlg(TRUE,"uad","*.uad");
if (OpenDlg.DoModal()==IDOK)
{
CFile OpenFile;
if(!OpenFile.Open(OpenDlg.GetPathName(),CFile::modeRead))
{
AfxMessageBox("打開文件失敗!");
return;
}
else
{
unsigned short* pBuf = new unsigned short[256];
CString str;
UINT nBytesRead = OpenFile.Read( pBuf, 512);
for(int i = 0; i < 256; i++)
{
m_PointList[i].y=pBuf[i];
str.Format(_T("[%d]:0x%x"),i,pBuf[i]);
// m_UsbList.AddString(str);
}
unsigned short TempMax,TempMin;
TempMax=TempMin=m_PointList[0].y;
for (i=1;i<256;i++)
{
if(m_PointList[i].y>TempMax)
TempMax=m_PointList[i].y;
else if(m_PointList[i].y<TempMin)
TempMin=m_PointList[i].y;
}
MaxValue=TempMax+100;
MinValue=TempMin-100;
CRect r;
r.SetRect(m_InnerLWScreen , m_InnerUHScreen, m_InnerRWScreen , m_InnerDHScreen);
InvalidateRect(r,TRUE);
OpenFile.Close();
delete pBuf;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -