⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlqview.cpp

📁 齿轮检测软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -