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

📄 goodsframe.cpp

📁 用VC编写的立体仓库的管理软件源程序和设计说明书。
💻 CPP
字号:
// GoodsFrame.cpp: implementation of the CGoodsFrame class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GoodsFrame.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CGoodsFrame::CGoodsFrame()
:	m_iRowNum(0), 
	m_iColNum(0),
	m_brushNull	(RGB(255, 255, 255)),	//无货
	m_brushHave	(RGB(  0, 255,   0)),	//有货
	m_brushUsing(RGB(  0, 204,   0)),	//有货占用
	m_brushStop1(RGB(204, 204, 204)),	//无货占用
	m_brushStop2(RGB(255, 102, 102)),	//暂时禁用
	m_brushStop3(RGB(255,   0,   0)),	//永久禁用
	m_brushStep1(RGB(  0,   0, 255)),
	m_brushStep2(RGB(255, 255, 255)),

	m_pen(PS_SOLID, 2, RGB(0, 0, 255))	{}

void CGoodsFrame::SetRowCol(const int &r, const int &c)
{
	m_iRowNum = r; m_iColNum = c;
	for (int row = 0; row < m_iRowNum; ++row)
	for (int col = 0; col < m_iColNum; ++col)
	{
		m_rectFrameArra.Add(NULL);		//设置货位矩形数组	
		m_iStateArra.Add(0);			//设置货位状态数组
	}
}



CGoodsFrame::~CGoodsFrame()
{

}

void CGoodsFrame::SetRect(const CRect &rectAll) 
{
	m_rectAll = rectAll;

	//每个矩形的高度和宽度
	int iEachRectHeight = static_cast<int>(m_rectAll.Height() / (m_iRowNum + 2));
	int iEachRectWidth = static_cast<int>(m_rectAll.Width() /  (m_iColNum  + 2));
	
	//起始矩形的左和底坐标
	int iLeft	= m_rectAll.left	+ (m_rectAll.Width()  - iEachRectWidth  * (m_iColNum + 2)) / 2 + iEachRectWidth;
	int iBottom	= m_rectAll.bottom  - (m_rectAll.Height() - iEachRectHeight * (m_iRowNum + 2)) / 2 - iEachRectHeight;

	//给货位矩形数组赋值(按层排列)
	for (int row = 0; row < m_iRowNum; ++row)
	for (int col = 0; col < m_iColNum; ++col)
		m_rectFrameArra[ToIndex(row, col)]
			= CRect(iLeft	+ col		* iEachRectWidth, 
				    iBottom - (row + 1) * iEachRectHeight, 
				    iLeft	+ (col + 1) * iEachRectWidth, 
				    iBottom	- row		* iEachRectHeight);
	
}


void CGoodsFrame::Draw(CDC *pDC,int num)
{
	CPen    *pOldPen;
	CBrush  brh, *pOldBrush;

	//按分区信息刷新背景颜色
	int row, col,iBgnCol,iEndCol;
	int m_r,m_g,m_b;
	CRect rect;
	CString szSQL;
	szSQL.Format("select * from T_Goods_Area_Manage where F_Line = %d",num);
	pDC->SelectStockObject(NULL_PEN);
	CAdoConnection cn;
	cn.OpenUDLFile(gstrConSQLSer);
	CAdoRecordSet rs;
	rs.SetAdoConnection(&cn);
	rs.Open(szSQL,adCmdText);

	if (rs.GetRecordCount() != 0)
	{
		rs.MoveFirst();
		while (!rs.IsEOF())
		{
			rs.GetCollect("F_nRed"	  , m_r);
			rs.GetCollect("F_nGreen"  , m_g);
			rs.GetCollect("F_nBlue"	  , m_b);
			rs.GetCollect("F_BeginSite" ,iBgnCol);
			rs.GetCollect("F_EndSite"	,iEndCol);

			rect.left	= m_rectFrameArra[(iBgnCol - 1) + m_iRowNum * m_iColNum - m_iColNum].left;
			rect.top	= m_rectFrameArra[(iBgnCol - 1) + m_iRowNum * m_iColNum - m_iColNum].top;
			rect.right	= m_rectFrameArra[iEndCol - 1].right;
			rect.bottom = m_rectFrameArra[iEndCol - 1].bottom;

			brh.CreateSolidBrush(RGB(m_r,m_g,m_b));
			pOldBrush = pDC->SelectObject(&brh);

			pDC->Rectangle(rect);
			pDC->SelectObject(pOldBrush);
			brh.DeleteObject();

			rs.MoveNext();
		}
	}

	rs.Close();
	cn.Close();

	// 画货架
	pOldPen	  = pDC->SelectObject(&m_pen);
	for (row = 0; row < m_iRowNum; ++row)
	for (col = 0; col < m_iColNum; ++col)
	{
		switch(GetState(row, col))
		{
		case 0:		pDC->SelectObject(&m_brushNull);	break;
		case 1:		pDC->SelectObject(&m_brushHave);	break;
		case 2:		pDC->SelectObject(&m_brushUsing);	break;
		case 3:		pDC->SelectObject(&m_brushStop1);	break;
		case 4:		pDC->SelectObject(&m_brushStop2);	break;
		case 5:		pDC->SelectObject(&m_brushStop3);	break;
		}
		pDC->Rectangle(GetMinRect(row, col));
	}

//	DrawStep(pDC);

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

}

CRect CGoodsFrame::GetMinRect(const int &r, const int &c)
{
	CRect rect, rectMax = m_rectFrameArra[ToIndex(r, c)];

	rect.left	= static_cast<int> (rectMax.left + rectMax.Width() * 0.15);
	rect.right	= static_cast<int> (rectMax.left + rectMax.Width() * 0.85);
			
	rect.top	= static_cast<int> (rectMax.top + rectMax.Height() * 0.15);
	rect.bottom	= static_cast<int> (rectMax.top + rectMax.Height() * 0.85);
	
	return rect;
}


void CGoodsFrame::DrawStep(CDC *pDC)
{
	int row, col, i;
	// 画横轴
	for (col = 0, i = 0; col < m_iColNum; col ++, ++i)
	{
		(i % 2) ? pDC->SelectObject(m_brushStep1) : pDC->SelectObject(m_brushStep2);
		pDC->Rectangle(	m_rectFrameArra[ToIndex(0, col)].left,
						m_rectFrameArra[ToIndex(0, col)].bottom,
						m_rectFrameArra[ToIndex(0, m_iColNum - 1)].right,
						m_rectFrameArra[ToIndex(0, m_iColNum - 1)].bottom + 5);
	}

	// 画纵轴
	for (row = 0, i = 0; row < m_iRowNum; row ++, ++i)
	{
		(i % 2) ? pDC->SelectObject(m_brushStep1) : pDC->SelectObject(m_brushStep2);
		pDC->Rectangle(	m_rectFrameArra[ToIndex(row, 0)].left - 5,
						m_rectFrameArra[ToIndex(row, 0)].bottom,
						m_rectFrameArra[ToIndex(m_iRowNum - 1, 0)].left,
						m_rectFrameArra[ToIndex(m_iRowNum - 1, 0)].top);
	}
}


BOOL CGoodsFrame::PointInRect(const CPoint &point, int &r, int &c)
{
	int row;
	int col;

	for (row = 0; row < m_iRowNum; ++row)
	for (col = 0; col < m_iColNum; ++col)
	{
		if (GetMinRect(row, col).PtInRect(point))
		{
			r = row;
			c = col;
			return (m_iStateArra[ToIndex(row, col)] == 1) ? TRUE : FALSE;
		}
	}
	return FALSE;
}

⌨️ 快捷键说明

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