📄 usbtestview.cpp
字号:
// USBTESTView.cpp : implementation of the CUSBTESTView class
//
#include "stdafx.h"
#include "USBTEST.h"
#include "USBTESTDoc.h"
#include "USBTESTView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "FTD2XX.h"
/////////////////////////////////////////////////////////////////////////////
// CUSBTESTView
IMPLEMENT_DYNCREATE(CUSBTESTView, CView)
BEGIN_MESSAGE_MAP(CUSBTESTView, CView)
//{{AFX_MSG_MAP(CUSBTESTView)
ON_COMMAND(IDM_TESTUSB, OnTestusb)
ON_WM_SIZE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CUSBTESTView construction/destruction
CUSBTESTView::CUSBTESTView()
{
// TODO: add construction code here
m_lX=20;
m_lY=60;
m_NumFrame=0;
}
CUSBTESTView::~CUSBTESTView()
{
}
BOOL CUSBTESTView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CUSBTESTView drawing
void CUSBTESTView::OnDraw(CDC* pDC)
{
CUSBTESTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// CClientDC dc(this);
// this->Invalidate();
// this->UpdateWindow();
CClientDC dc(this);
CPen* pPenRed=new CPen;
pPenRed->CreatePen(PS_SOLID,46,RGB(0,0,0));
/* CPen* pOldPen=dc.SelectObject(pPenRed);
dc.MoveTo(10,10);
dc.LineTo(10,280);
dc.LineTo(320,280);
dc.SelectObject(pOldPen);
*/
CPen* pOldPen=pDC->SelectObject(pPenRed);
pDC->MoveTo(1000,-1000);
pDC->LineTo(1000,-17000);
pDC->LineTo(26000,-17000);
pDC->SelectObject(pOldPen);
delete pPenRed;
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CUSBTESTView printing
BOOL CUSBTESTView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CUSBTESTView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CUSBTESTView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CUSBTESTView diagnostics
#ifdef _DEBUG
void CUSBTESTView::AssertValid() const
{
CView::AssertValid();
}
void CUSBTESTView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CUSBTESTDoc* CUSBTESTView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CUSBTESTDoc)));
return (CUSBTESTDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CUSBTESTView message handlers
void CUSBTESTView::OnTestusb()
{
// TODO: Add your command handler code here
FT_STATUS mStatus;
TEXTMETRIC tm;
int tHeight,tWidth;
char str[6];
char tmp[100],tmp1[100];
CRect rc;
GetClientRect(&rc);//range
DWORD i;
CClientDC dc(this);
dc.GetTextMetrics(&tm);
tHeight=tm.tmHeight;//字符高度
tWidth=tm.tmAveCharWidth;//字符宽度
MSG msg;
int test=0;
CUSBTESTDoc *mDoc=(CUSBTESTDoc*)GetDocument();
CMainFrame* m_pMainFrm=(CMainFrame*)AfxGetMainWnd();
DWORD dwAmountInRx,dwAmountInRet;
CBrush br;
br.CreateSolidBrush(dc.GetBkColor());
CBrush *pbrOld;
pbrOld=dc.SelectObject(&br);
CString strSaveFileType="文本文件(*.txt)|*.txt||";
// CFileDialog FileDlg(FALSE ,"*.txt",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,strSaveFileType);
CFileDialog FileDlg(FALSE ,"*.txt",NULL,OFN_HIDEREADONLY,strSaveFileType);
CFile fileOpen;
if(FileDlg.DoModal()==IDOK)
{
if(!fileOpen.Open(FileDlg.GetPathName(),CFile::modeCreate|CFile::modeWrite))
{
AfxMessageBox("cannot create the file to save");
return;
}
}
while(1)//循环接受,等待键击退出
{
mStatus=FT_GetQueueStatus(mDoc->m_ftHandle,&dwAmountInRx);//查询队列中字符数
if(dwAmountInRx==0)
{ AfxMessageBox("no data",IDOK,0);//队列无数据,退出
break;}
//申请内存空间
mDoc->m_lpData=new char[dwAmountInRx];
mStatus=FT_Read(mDoc->m_ftHandle,(LPVOID)mDoc->m_lpData,dwAmountInRx,&dwAmountInRet);//读取队列数据
if(mStatus!=FT_OK)
return;
sprintf(tmp,"当前接收队列中的字符数= %7d",dwAmountInRx);//状态栏中显示接受字符数
m_pMainFrm->m_wndStatusBar.SetPaneText(0,tmp,TRUE);
m_NumFrame=m_NumFrame+1;//number of loop
//存盘文件
sprintf(tmp1,"\n\nFrame=%d\t",m_NumFrame);
fileOpen.Write(tmp1,strlen(tmp1));
sprintf(tmp,"当前接收队列中的字符数= %7d\n\n",dwAmountInRx);
fileOpen.Write(tmp,strlen(tmp));
for(i=0;i<dwAmountInRx;i++)
{
itoa((int)((unsigned char)( *(mDoc->m_lpData+i))),str,10);//convert to string
if((i%32)==0)
sprintf(tmp,"\n%6s",str);
else
sprintf(tmp,"%6s",str);
fileOpen.Write(tmp,strlen(tmp));
}
// fileOpen.Flush();
// if(m_NumFrame==5)break;//exit from loop
dc.FillRect(&rc,&br);//清屏幕
//display
// dc.TextOut(m_lX,m_lY,mDoc->m_lpData);//just display the character
sprintf(tmp1,"Frame=%d",m_NumFrame);
dc.TextOut(20,20,tmp1);
m_lX=20;//每一轮坐标的开始
m_lY=60;
if(dwAmountInRx>600)
dwAmountInRx=600;
for(i=0;i<dwAmountInRx;i++)
{
itoa((int)((unsigned char)( *(mDoc->m_lpData+i))),str,10);//convert to string
// AfxMessageBox(str,IDOK,0);
if(m_lX+(strlen(str)+4)*tWidth+10>rc.right-rc.left)
{
m_lY=m_lY+tHeight;
if(m_lY+tHeight+10>rc.bottom-rc.top)
{m_lY=60;
//dc.FillRect(&rc,&br);
//dc.TextOut(20,20,tmp1);
}
m_lX=20;
}
dc.TextOut(m_lX,m_lY-20,str);
m_lX=m_lX+(4+strlen(str))*tWidth;
}
//test=test+10;
//GetMessage(&msg,this->m_hWnd,0,0);
PeekMessage(&msg,this->m_hWnd,WM_KEYFIRST,WM_KEYLAST,PM_REMOVE);
if(msg.message==WM_KEYDOWN){
//fileOpen.Flush();
break;}
delete []mDoc->m_lpData;
Sleep(400);
//响应其他消息
}
if(mDoc->m_lpData!=NULL)
delete []mDoc->m_lpData;
m_lX=20;
m_lY=60;
m_NumFrame=0;
dc.SelectObject(pbrOld);
fileOpen.Flush();
fileOpen.Close();
FT_ResetDevice(mDoc->m_ftHandle);
return;
}
void CUSBTESTView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
// CView::OnPrepareDC(pDC, pInfo);
int m_zoomScale=1;
CSize SizXY;
char tmp[100];
CRect rc;
GetClientRect(&rc);
CClientDC dc(this);
// CUSBTESTView::OnPrepareDC(pDC, pInfo);
pDC->SetMapMode(MM_HIMETRIC);//两个方向上放大倍数同
int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
//sprintf(tmp,"%d %d",xLogPixPerInch,yLogPixPerInch);
SizXY=pDC->GetWindowExt();
sprintf(tmp,"%d %d",rc.bottom-rc.top,rc.right-rc.left);
// AfxMessageBox(tmp,IDOK,0);
// pDC->LPtoDP(&rc);
// pDC->SetWindowExt(512,512);
// pDC->SetViewportExt( 512,512);
//pDC->SetViewportExt(abs(rc.right-rc.left),abs(rc.bottom-rc.top));
//pDC->SetViewportExt(10000,10000);
//pDC->SetViewportOrg(0,0);
GetClientRect(&rc);
SizXY=pDC->GetWindowExt();
//pDC->LPtoDP(&rc);
// sprintf(tmp,"%d %d",rc.bottom-rc.top,rc.right-rc.left);
sprintf(tmp,"%d %d",SizXY.cx,SizXY.cy);
// AfxMessageBox(tmp,IDOK,0);
// pDC->SetWindowOrg(0,SizXY.cy);
// pDC->SetViewportOrg(0,SizXY.cy);
}
void CUSBTESTView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
CUSBTESTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_nCurrentWidth=cx;
pDoc->m_nCurrentHeight=cy;
pDoc->m_nCurrentDisWidth=cx-100;
pDoc->m_nCurrentDisHeight=cy;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -