📄 manage_whview.cpp
字号:
// 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 + -