📄 goodsframe.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 + -