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

📄 manage_whview.cpp

📁 用VC编写的立体仓库的管理软件源程序和设计说明书。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// Manage_WHView.cpp : implementation of the CManage_WHView class
//

#include "stdafx.h"
#include "Manage_WH.h"

#include "Manage_WHDoc.h"
#include "Manage_WHView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CManage_WHView

IMPLEMENT_DYNCREATE(CManage_WHView, CView)

BEGIN_MESSAGE_MAP(CManage_WHView, CView)
	//{{AFX_MSG_MAP(CManage_WHView)
	ON_WM_ERASEBKGND()
	ON_WM_CREATE()
	ON_WM_TIMER()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CManage_WHView construction/destruction

CManage_WHView::CManage_WHView()
:	m_pen(PS_SOLID, 1, RGB(255, 247, 47)),
	m_liftBrush(RGB(228, 211, 5)),
	m_lgvErrorBrush(RGB(204,51,255)),
	m_lgvWaitBrush(RGB(255,255,204)),
	m_lgvBrush(RGB(51, 255, 51)),
	m_haveGoodsBrush(RGB(51, 255,  51)),
	m_haveBoxBrush(RGB(51,255,255)),
	m_haveTrayBrush(RGB(255,153,255)),
	m_bkBrush(RGB(0, 0, 0))
{
	// TODO: add construction code here
	m_iOverTime = 0;
	m_iGetGoodsPos = 0;
	m_iRobortArmCurPos = 1;
	m_iThreeCoordinateCurPos = 1;
}

CManage_WHView::~CManage_WHView()
{
}

BOOL CManage_WHView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CManage_WHView drawing

void CManage_WHView::OnDraw(CDC* pDC)
{
	CManage_WHDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	if (!gpDoc->m_bTimeDealing)
	{
		gpDoc->m_bTimeDealing = TRUE;
		CRect rc;
		GetClientRect(&rc);
		m_W = rc.Width();
		m_H = rc.Height();
		
		DeviceNarrate(pDC);
		DeviceMap(pDC);
		RefreshDeviceStatus(pDC);
		switch (m_iRobortArmCurPos)
		{
		case 1:RobortArmStep1(pDC,TRUE);break;
		case 2:RobortArmStep2(pDC,TRUE);break;
		case 3:RobortArmStep3(pDC,TRUE);break;
		case 4:RobortArmStep4(pDC,TRUE);break;
		case 5:RobortArmStep5(pDC,TRUE);break;
		case 6:RobortArmStep6(pDC,TRUE);break;
		case 7:RobortArmStep7(pDC,TRUE);break;
		}
		switch (m_iThreeCoordinateCurPos)
		{
		case 1:ThreeCoordinateStep1(pDC,TRUE);break;
		case 2:ThreeCoordinateStep2(pDC,TRUE);break;
		case 3:ThreeCoordinateStep3(pDC,TRUE);break;
		case 4:ThreeCoordinateStep4(pDC,TRUE);break;
		case 5:ThreeCoordinateStep5(pDC,TRUE);break;
		case 6:ThreeCoordinateStep6(pDC,TRUE);break;
		}

		gpDoc->m_bTimeDealing = FALSE;
	}
}

/////////////////////////////////////////////////////////////////////////////
// CManage_WHView diagnostics

#ifdef _DEBUG
void CManage_WHView::AssertValid() const
{
	CView::AssertValid();
}

void CManage_WHView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CManage_WHDoc* CManage_WHView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CManage_WHDoc)));
	return (CManage_WHDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CManage_WHView message handlers

BOOL CManage_WHView::OnEraseBkgnd(CDC* pDC) 
{
	//填充背景色
	CBrush brush(RGB(0,0,0));
	CBrush* pOldBrush=pDC->SelectObject(&brush);
	CRect rcClip;
	pDC->GetClipBox(&rcClip);
	pDC->PatBlt(rcClip.left,rcClip.top,rcClip.Width(),rcClip.Height(),PATCOPY);
	return TRUE;
}

int CManage_WHView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	SetTimer(1,1100,NULL);
	SetTimer(2,500, NULL);
	SetTimer(3,2100,NULL);
	SetTimer(4,2310,NULL);
	return 0;
}

void CManage_WHView::DeviceNarrate(CDC *pDC)
{
	//标示颜色
	CBrush *pOldBrush;
	pOldBrush = pDC->SelectObject(&this->m_haveGoodsBrush);
	pDC->Rectangle((int)(m_W*0.85),(int)(m_H*0.02),(int)(m_W*0.87),(int)(m_H*0.05));
	pOldBrush = pDC->SelectObject(&this->m_haveBoxBrush);
	pDC->Rectangle((int)(m_W*0.85),(int)(m_H*0.06),(int)(m_W*0.87),(int)(m_H*0.09));
	pOldBrush = pDC->SelectObject(&this->m_haveTrayBrush);
	pDC->Rectangle((int)(m_W*0.85),(int)(m_H*0.1),(int)(m_W*0.87),(int)(m_H*0.13));

	//设置注释内容字体
	LOGFONT nFont;
	memset(&nFont,0,sizeof(LOGFONT));
	nFont.lfHeight = 20; //字高
	lstrcpy(nFont.lfFaceName,"Arial");  //设置字体

	CFont ftNote,*pOldFont;
	ftNote.CreateFontIndirect(&nFont); 
	pOldFont = pDC->SelectObject(&ftNote);

	//写注释内容
	CRect rcGoods((int)(m_W*0.89),(int)(m_H*0.02),(int)(m_W*0.99),(int)(m_H*0.05)),
		  rcBox((int)(m_W*0.89)	 ,(int)(m_H*0.06),(int)(m_W*0.99),(int)(m_H*0.09)),
		  rcTray((int)(m_W*0.89) ,(int)(m_H*0.1) ,(int)(m_W*0.99),(int)(m_H*0.13));

	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(051,255,051));
	pDC->DrawText("货物",&rcGoods,DT_VCENTER|DT_LEFT|DT_SINGLELINE);

	pDC->SetTextColor(RGB(051,255,255));
	pDC->DrawText("箱子",&rcBox,DT_VCENTER|DT_LEFT|DT_SINGLELINE);

	pDC->SetTextColor(RGB(255,255,051));
	pDC->DrawText("托盘",&rcTray,DT_VCENTER|DT_LEFT|DT_SINGLELINE);
	
	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldFont);
}

void CManage_WHView::DeviceMap(CDC *pDC)
{
	CPen   *pOldPen;
	CBrush *pOldBrush;
	pOldPen = pDC->SelectObject(&m_pen);
	pOldBrush = pDC->SelectObject(&m_bkBrush);

	/*=====货位=====*/
	pDC->Rectangle((int)(m_W*0.69),(int)(m_H*0.44),(int)(m_W*0.99),(int)(m_H*0.5));
	pDC->Rectangle((int)(m_W*0.69),(int)(m_H*0.55),(int)(m_W*0.99),(int)(m_H*0.61));

	double ratio = 0.3/16;
	for (int i=1;i<16;i++)
	{
		pDC->MoveTo((int)(m_W*(0.69+ratio*i)),(int)(m_H*0.44));
		pDC->LineTo((int)(m_W*(0.69+ratio*i)),(int)(m_H*0.5));

		pDC->MoveTo((int)(m_W*(0.69+ratio*i)),(int)(m_H*0.55));
		pDC->LineTo((int)(m_W*(0.69+ratio*i)),(int)(m_H*0.61));
	}

	/*=====主轨道、托盘辊道、码盘机=====*/
	pDC->Rectangle((int)(m_W*0.01),(int)(m_H*0.55),(int)(m_W*0.69),(int)(m_H*0.61));
	CPoint salver1[5] = {CPoint((int)(m_W*0.013),(int)(m_H*0.44)),
						 CPoint((int)(m_W*0.013),(int)(m_H*0.72)),
						 CPoint((int)(m_W*0.063),(int)(m_H*0.72)),
						 CPoint((int)(m_W*0.063),(int)(m_H*0.44)),
						 CPoint((int)(m_W*0.013),(int)(m_H*0.44))};
	pDC->Polyline(salver1,5);
	CPoint salver2[5] = {CPoint((int)(m_W*0.068),(int)(m_H*0.44)),
						 CPoint((int)(m_W*0.068),(int)(m_H*0.72)),
						 CPoint((int)(m_W*0.118),(int)(m_H*0.72)),
						 CPoint((int)(m_W*0.118),(int)(m_H*0.44)),
						 CPoint((int)(m_W*0.068),(int)(m_H*0.44))};
	pDC->Polyline(salver2,5);
	CPoint salver3[5] = {CPoint((int)(m_W*0.29)	,(int)(m_H*0.44)),
						 CPoint((int)(m_W*0.29)	,(int)(m_H*0.72)),
						 CPoint((int)(m_W*0.34)	,(int)(m_H*0.72)),
						 CPoint((int)(m_W*0.34)	,(int)(m_H*0.44)),
						 CPoint((int)(m_W*0.29)	,(int)(m_H*0.44))};
	pDC->Polyline(salver3,5);
	CPoint salver4[5] = {CPoint((int)(m_W*0.58)	,(int)(m_H*0.44)),
						 CPoint((int)(m_W*0.58)	,(int)(m_H*0.72)),
						 CPoint((int)(m_W*0.63)	,(int)(m_H*0.72)),
						 CPoint((int)(m_W*0.63)	,(int)(m_H*0.44)),
						 CPoint((int)(m_W*0.58)	,(int)(m_H*0.44))};
	pDC->Polyline(salver4,5);
	//码盘机
	pDC->Rectangle((int)(m_W*0.41),(int)(m_H*0.545),(int)(m_W*0.48),(int)(m_H*0.615));
	pDC->Rectangle((int)(m_W*0.42),(int)(m_H*0.54), (int)(m_W*0.47),(int)(m_H*0.545));
	pDC->Rectangle((int)(m_W*0.42),(int)(m_H*0.615),(int)(m_W*0.47),(int)(m_H*0.62));

	//货箱辊道1
	CPoint box1[7] = {CPoint((int)(m_W*0.119),(int)(m_H*0.44)),
					  CPoint((int)(m_W*0.209),(int)(m_H*0.44)),
					  CPoint((int)(m_W*0.209),(int)(m_H*0.205)),
					  CPoint((int)(m_W*0.239),(int)(m_H*0.205)),
					  CPoint((int)(m_W*0.239),(int)(m_H*0.485)),
					  CPoint((int)(m_W*0.119),(int)(m_H*0.485)),
					  CPoint((int)(m_W*0.119),(int)(m_H*0.44))};
	pDC->Polyline(box1,7);
	//货箱辊道2
	CPoint box2[5] = {CPoint((int)(m_W*0.119),(int)(m_H*0.485)),
					  CPoint((int)(m_W*0.119),(int)(m_H*0.53)),
					  CPoint((int)(m_W*0.269),(int)(m_H*0.53)),
					  CPoint((int)(m_W*0.269),(int)(m_H*0.205)),
					  CPoint((int)(m_W*0.239),(int)(m_H*0.205))};
	pDC->Polyline(box2,5);
	//货箱辊道3
	CPoint box3[5] = {CPoint((int)(m_W*0.209),(int)(m_H*0.25)),
					  CPoint((int)(m_W*0.209),(int)(m_H*0.205)),
					  CPoint((int)(m_W*0.565),(int)(m_H*0.205)),
					  CPoint((int)(m_W*0.565),(int)(m_H*0.25)),
					  CPoint((int)(m_W*0.209),(int)(m_H*0.25))};
	pDC->Polyline(box3,5);

	pDC->MoveTo((int)(m_W*0.149),(int)(m_H*0.44));
	pDC->LineTo((int)(m_W*0.149),(int)(m_H*0.53));

	pDC->MoveTo((int)(m_W*0.209),(int)(m_H*0.44));
	pDC->LineTo((int)(m_W*0.209),(int)(m_H*0.485));

	pDC->MoveTo((int)(m_W*0.209),(int)(m_H*0.44));
	pDC->LineTo((int)(m_W*0.239),(int)(m_H*0.44));

	pDC->MoveTo((int)(m_W*0.239),(int)(m_H*0.485));
	pDC->LineTo((int)(m_W*0.239),(int)(m_H*0.53));

	pDC->MoveTo((int)(m_W*0.239),(int)(m_H*0.485));
	pDC->LineTo((int)(m_W*0.269),(int)(m_H*0.485));

	//货物辊道1
	CPoint goods1[5] = {CPoint((int)(m_W*0.35),(int)(m_H*0.44)),
						CPoint((int)(m_W*0.56),(int)(m_H*0.44)),
						CPoint((int)(m_W*0.56),(int)(m_H*0.47)),
						CPoint((int)(m_W*0.35),(int)(m_H*0.47)),
						CPoint((int)(m_W*0.35),(int)(m_H*0.44))};
	pDC->Polyline(goods1,5);

	pDC->MoveTo((int)(m_W*0.38),(int)(m_H*0.44));
	pDC->LineTo((int)(m_W*0.38),(int)(m_H*0.53));

	pDC->MoveTo((int)(m_W*0.41),(int)(m_H*0.44));
	pDC->LineTo((int)(m_W*0.41),(int)(m_H*0.53));

	pDC->MoveTo((int)(m_W*0.44),(int)(m_H*0.44));
	pDC->LineTo((int)(m_W*0.44),(int)(m_H*0.53));

	pDC->MoveTo((int)(m_W*0.47),(int)(m_H*0.44));
	pDC->LineTo((int)(m_W*0.47),(int)(m_H*0.53));

	pDC->MoveTo((int)(m_W*0.50),(int)(m_H*0.44));
	pDC->LineTo((int)(m_W*0.50),(int)(m_H*0.47));

	pDC->MoveTo((int)(m_W*0.53),(int)(m_H*0.44));
	pDC->LineTo((int)(m_W*0.53),(int)(m_H*0.47));
	//货物辊道2
	CPoint goods2[3] = {CPoint((int)(m_W*0.35),(int)(m_H*0.47)),
						CPoint((int)(m_W*0.35),(int)(m_H*0.50)),
						CPoint((int)(m_W*0.47),(int)(m_H*0.50))};
	pDC->Polyline(goods2,3);
	
	//货物辊道3
	CPoint goods3[3] = {CPoint((int)(m_W*0.35),(int)(m_H*0.47)),
						CPoint((int)(m_W*0.35),(int)(m_H*0.53)),
						CPoint((int)(m_W*0.47),(int)(m_H*0.53))};
	pDC->Polyline(goods3,3);
	//堆垛机轨道
	DrawLiftPath(pDC);

	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);
}

void CManage_WHView::RefreshDeviceStatus(CDC *pDC)
{
	CBrush *pOldBrush;
	for (int i=0;i<gpDoc->m_iDeviceStatusArra.GetSize();i++)
	{
		//如果设备当前位置有货,则画货物。无货不画
		if (gpDoc->m_iDeviceStatusArra[i] == 1)
		{
			CRect rectAll,rc;
			rectAll.SetRect((int)(m_W*gpDoc->m_dCoordinateX1Arra[i]),
							(int)(m_H*gpDoc->m_dCoordinateY1Arra[i]),
							(int)(m_W*gpDoc->m_dCoordinateX2Arra[i]),
							(int)(m_H*gpDoc->m_dCoordinateY2Arra[i]));

			rc.left	  = (int)(rectAll.left + rectAll.Width()  * 0.2);
			rc.right  = (int)(rectAll.left + rectAll.Width()  * 0.9);
			rc.top    = (int)(rectAll.top  + rectAll.Height() * 0.2);
			rc.bottom = (int)(rectAll.top  + rectAll.Height() * 0.9);

			switch(gpDoc->m_iDeviceKind[i])
			{
			case 1:	pOldBrush = pDC->SelectObject(&this->m_haveGoodsBrush);	break;
			case 2:	pOldBrush = pDC->SelectObject(&this->m_haveBoxBrush);	break;
			case 3:	pOldBrush = pDC->SelectObject(&this->m_haveTrayBrush);	break;
			}

			pDC->SelectStockObject(NULL_PEN);
			pDC->Rectangle(rc);
			
			//如果是货箱或者托盘,则显示当前货物数量
			if (gpDoc->m_iDeviceKind[i] == 2 || gpDoc->m_iDeviceKind[i] == 3)
			{
				CString sCount;
				sCount.Format("%d",gpDoc->m_iNowNum[i]);
				LOGFONT nFont;
				memset(&nFont,0,sizeof(LOGFONT));
				nFont.lfHeight = 15; //字高
				lstrcpy(nFont.lfFaceName,"Arial");  //设置字体
				
				CFont ftNote,*pOldFont;
				ftNote.CreateFontIndirect(&nFont); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -