📄 dlqview.cpp
字号:
// dlqView.cpp : implementation of the CDlqView class
//
#include "stdafx.h"
#include "dlq.h"
#include "math.h"
#include "dlqDoc.h"
#include "dlqView.h"
#include "clrdlg.h"
#include "bilidlg.h"
#include "validlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define ID_COMMCTRL WM_USER+5
/////////////////////////////////////////////////////////////////////////////
// CDlqView
IMPLEMENT_DYNCREATE(CDlqView, CScrollView)
BEGIN_MESSAGE_MAP(CDlqView, CScrollView)
//{{AFX_MSG_MAP(CDlqView)
ON_WM_TIMER()
ON_COMMAND(ID_DIS_OR_REC, OnDisOrRec)
ON_COMMAND(ID_INPUT_DATA, OnInputData)
ON_COMMAND(ID_SEL_LINE, OnSelLine)
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_STOP_INPUT, OnStopInput)
ON_COMMAND(ID_SEND_LENGTH, OnSendLength)
ON_COMMAND(ID_SEND_CI, OnSendCi)
ON_COMMAND(ID_VALI_JIYUAN, OnValiJiyuan)
//}}AFX_MSG_MAP
//ON_MESSAGE(WM_WZD_MESSAGE,OnWzdMessage)
// 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()
BEGIN_EVENTSINK_MAP(CDlqView, CView)
ON_EVENT(CDlqView,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE)
END_EVENTSINK_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlqView construction/destruction
CDlqView::CDlqView()
{
input=0;x=0;istimer2=0;
isopen=0;needdraw=0;zero=510;
//HICON hicon=AfxGetApp()->LoadIcon(IDR_DLQTYPE);
//AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)hicon);
// TODO: add construction code here
}
CDlqView::~CDlqView()
{
}
BOOL CDlqView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.lpszClass=AfxRegisterWndClass(
CS_DBLCLKS,
AfxGetApp()->LoadStandardCursor(IDC_CROSS),
(HBRUSH)(COLOR_WINDOW+1),
AfxGetApp()->LoadIcon(IDR_MAINFRAME));
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDlqView drawing
void CDlqView::OnDraw(CDC* pDC)
{
CDlqDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString s;unsigned char t;
if(!isopen){
DWORD style=WS_VISIBLE|WS_CHILD;
isopen=1;
if(!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL))
TRACE0("不能建立串口\n");
else setcom();}
if(pDoc->beilichang)
{
switch(pDoc->m_beili){
case 1:t=0;break;
case 2:t=1;break;
case 4:t=2;break;
case 8:t=3;break;
default:t=1;
}
sendbeili(t); pDoc->beilichang=0;}
if(!x){pDC->SetViewportOrg(0,0); drawmeter(pDC);}
else {
drawtable(pDC);drawstart(pDC);
if(pDoc->m_beili==1)s.Format("%d",2000);
else if(pDoc->m_beili==2)s.Format("%d",1000);
else if(pDoc->m_beili==4)s.Format("%d",500);
else if(pDoc->m_beili==8)s.Format("%d",250);
pDC->TextOut(700,100,"放大倍数 "+s);
pDC->TextOut(700,200,"单位 微米");
pDC->TextOut(700,300,"名称 "+pDoc->m_name2);
s.Format("%d",pDoc->m_zz);pDC->TextOut(700,400,"齿数 "+s);
s.Format("%4.2f",pDoc->m_momo);pDC->TextOut(700,500,"模数 "+s);
s.Format("%4.4f",pDoc->m_aa);pDC->TextOut(700,600,"压力角 "+s);
s.Format("%4.4f",pDoc->m_bb);pDC->TextOut(700,700,"螺旋角 "+s);
if(pDoc->m_fxfx==0)s="左旋";
else if(pDoc->m_fxfx==1)s="直齿";
else if(pDoc->m_fxfx==2)s="右旋";
pDC->TextOut(700,800,"齿型 "+s);
SYSTEMTIME systime;
GetLocalTime(&systime);
s.Format("%d 年%d 月%d 日%d 时%d 分",systime.wYear,systime.wMonth,
systime.wDay,systime.wHour,systime.wMinute);
pDC->TextOut(100,1000,"检测时间:"+s);
for(int y=0;y<12;y++){for(int k=0;k<400;k++)
if(pDoc->data[y][k]!=0)drawdot(pDC,k,0,y);}}
//if(pDoc->first>5)pDC->OffsetViewportOrg(0,480);else pDC->OffsetViewportOrg(0,0);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CDlqView printing
BOOL CDlqView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CDlqView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDlqView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CDlqView diagnostics
#ifdef _DEBUG
void CDlqView::AssertValid() const
{
CScrollView::AssertValid();
}
void CDlqView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CDlqDoc* CDlqView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDlqDoc)));
return (CDlqDoc*)m_pDocument;
}
#endif //_DEBUG
void CDlqView::setcom()
{
m_ComPort.SetCommPort(1);
m_ComPort.SetInBufferSize(0);
m_ComPort.SetOutBufferSize(0);
m_ComPort.SetInBufferSize(2048);
m_ComPort.SetOutBufferSize(512);
if(!m_ComPort.GetPortOpen())m_ComPort.SetPortOpen(TRUE);
m_ComPort.SetInputMode(1);
m_ComPort.SetSettings("9600,n,8,1");
m_ComPort.SetRThreshold(2);
m_ComPort.SetInputLen(0);
// if((!x)&&(!istimer2)){SetTimer(1,2,NULL);istimer2=1;}
}
void CDlqView::OnCommMscomm()
{
if(m_ComPort.GetCommEvent()==2){
variant_inp.vt=VT_ARRAY ;
variant_inp=m_ComPort.GetInput();
safearray_inp=variant_inp;
for(k=0;k<2;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<2;k++)bt[k]=*(char*)(rxdata+k);
if(bt[0]==0xfe){
switch(bt[1]){
case 1:AfxGetMainWnd()->SendMessage(WM_COMMAND,ID_DIS_OR_REC);break;
case 2:AfxGetMainWnd()->SendMessage(WM_COMMAND,ID_INPUT_DATA);break;
case 3:AfxGetMainWnd()->SendMessage(WM_COMMAND,ID_STOP_INPUT);break;
case 4:AfxGetMainWnd()->SendMessage(WM_COMMAND,ID_FILE_PRINT);break;
}}
else{
if(((bt[0]*256+bt[1])>(input+1))||((bt[0]*256+bt[1])<(input-1))||(!d))
{input=bt[0]*256+bt[1];
if(!x)drawline();}}
/* else
{
CDlqDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(pDoc->count<600){pDoc->data[pDoc->first][pDoc->count]=input;
pDoc->count++;//rect.left=0;rect.right=600;rect.bottom=pDoc->count+1;rect.top=pDoc->count-1;
//InvalidateRect(&rect);
drawdot();
needdraw=1;}
else if(pDoc->first<11)pDoc->first++;else pDoc->first=0;
//if(pDoc->count>599)pDoc->count=0;
}*/
}
}
void CDlqView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_ComPort.SetRThreshold(2);
m_ComPort.SetInputLen(0);
CView::OnTimer(nIDEvent);
}
void CDlqView::drawmeter(CDC *pDC)
{
CDlqDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int x1,y1,x2,y2;
int i;
float r;
CPen pen1;
CPen pen2;
pen1.CreatePen(1,4,RGB(0,0,100));
pen2.CreatePen(1,2,RGB(0,0,100));
CPen *oldpen=pDC->SelectObject(&pen1);
pDC->Arc(10,10,590,590,590,250,10,250);
for(i=0;i<=60;i++){
r=i*3.14*1.3/180;
x1=300+290*sin(r);y1=300-290*cos(r);
x2=300+280*sin(r);y2=300-280*cos(r);
if((i%10)==0){pDC->SelectObject(&pen2);
x2=300+270*sin(r);y2=300-270*cos(r);
if((i/10)==0)pDC->TextOut(x2-3,y2,"0");
else {
CFont font;LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(lf),&lf);
lf.lfHeight=-16;
lf.lfClipPrecision=CLIP_LH_ANGLES;
lf.lfEscapement=3600-i*13;
font.CreateFontIndirect(&lf);
CFont *pOldFont=pDC->SelectObject(&font);
CString str;
str.Format("%d",(i/2*pDoc->m_beili));
pDC->TextOut(x2-2,y2,str);
pDC->SelectObject(pOldFont);
font.DeleteObject();
}
}
else pDC->SelectObject(oldpen);
pDC->MoveTo(x1,y1);pDC->LineTo(x2,y2);
}
for(i=0;i<=60;i++){
r=i*3.14*1.3/180;
x1=300-290*sin(r);y1=300-290*cos(r);
x2=300-280*sin(r);y2=300-280*cos(r);
if((i%10)==0){pDC->SelectObject(&pen2);
x2=300-270*sin(r);y2=300-270*cos(r);
if((i/10)==0);//pDC->TextOut(x2-3,y2,"0");
else {
CFont font2;LOGFONT lf2;
memset(&lf2,0,sizeof(LOGFONT));
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(lf2),&lf2);
lf2.lfHeight=-16;
lf2.lfClipPrecision=CLIP_LH_ANGLES;
lf2.lfEscapement=i*13;
font2.CreateFontIndirect(&lf2);
CFont *pOldFont2=pDC->SelectObject(&font2);
CString str2;
str2.Format("%d",(i/2*pDoc->m_beili));
pDC->TextOut(x2+2,y2+2,str2);
pDC->SelectObject(pOldFont2);
font2.DeleteObject();
}}
else pDC->SelectObject(oldpen);
pDC->MoveTo(x1,y1);pDC->LineTo(x2,y2);
}
pDC->SelectObject(oldpen);
pen1.DeleteObject();
pen2.DeleteObject();d=0;
sendmode(1);m_ComPort.SetRThreshold(2);
}
void CDlqView::drawtable(CDC *pDC)
{
CDlqDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString s;
int x1,y1,x2,y2;
int i;
float r;
CPen pen1;
CPen pen2;
pen1.CreatePen(0,1,RGB(0,0,100));
pen2.CreatePen(2,1,RGB(0,0,100));
CPen *oldpen=pDC->SelectObject(&pen1);
for(i=0;i<=120;i++){
if((i%10)==0){
pDC->SelectObject(&pen2);
pDC->MoveTo(i*5+40,40);
pDC->LineTo(i*5+40,440);
pDC->MoveTo(i*5+40,490);
pDC->LineTo(i*5+40,890);
if(i<=60)s.Format("%d",(60-i)/2*pDoc->m_beili);
else s.Format("%d",(i-60)/2*pDoc->m_beili);
pDC->TextOut(i*5+36,20,s);
}
else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -