📄 flowunit.cpp
字号:
#include "stdafx.h"
#include "FlowUnit.h"
#include "FlowCtrl.h"
#include "FlowImpl.h"
CFlowUnit::CFlowUnit()
{
m_pParentWnd = NULL;
}
CFlowUnit::~CFlowUnit()
{
}
void CFlowUnit::Draw(CDC *pDC, CRect &rcClient)
{
CBrush pBackBrush, *pOldBrush;
if (m_pParentWnd == NULL)
{
return;
}
pBackBrush.CreateSolidBrush(m_pParentWnd->GetUnitBackColor());
pOldBrush = (CBrush *)pDC->SelectObject(&pBackBrush);
switch (m_pParentWnd->GetUnitPattern())
{
case UP_RECTANGLE:
pDC->FillRect(&m_rectClient, &pBackBrush);
break;
case UP_CIRCLE:
pDC->SelectObject(::GetStockObject(NULL_PEN));
pDC->Ellipse(&m_rectClient);
break;
case UP_DLINE:
{
int xCenter = 0, yCenter = 0;
if ((m_pParentWnd->GetUnitDLinePattern() == DP_RIGHT) || (m_pParentWnd->GetUnitDLinePattern() == DP_LEFT))
{
xCenter = m_rectClient.left + (m_rectClient.right - m_rectClient.left) / 2;
yCenter = (rcClient.bottom - rcClient.top) / 2;
}
else
{
xCenter = (rcClient.right - rcClient.left) / 2;
yCenter = m_rectClient.top + (m_rectClient.bottom - m_rectClient.top) / 2;
}
DrawDLine(pDC, CPoint(xCenter, yCenter));
}
break;
case UP_TRIANGLE:
pDC->SelectObject(::GetStockObject(NULL_PEN));
DrawTriangle(pDC);
break;
}
pDC->SelectObject(pOldBrush);
pBackBrush.DeleteObject();
}
void CFlowUnit::DrawDLine(CDC *pDC, CPoint ptCenter)
{
if (m_pParentWnd == NULL)
{
return;
}
switch (m_pParentWnd->GetUnitDLinePattern())
{
case DP_RIGHT:
_D_LINE_H(ptCenter.x + 0, ptCenter.y + 0, m_pParentWnd->GetUnitBackColor());
_D_LINE_H(ptCenter.x + 1, ptCenter.y + 1, m_pParentWnd->GetUnitBackColor());
_D_LINE_H(ptCenter.x + 2, ptCenter.y + 2, m_pParentWnd->GetUnitBackColor());
_D_LINE_H(ptCenter.x + 1, ptCenter.y + 3, m_pParentWnd->GetUnitBackColor());
_D_LINE_H(ptCenter.x + 0, ptCenter.y + 4, m_pParentWnd->GetUnitBackColor());
break;
case DP_LEFT:
_D_LINE_H(ptCenter.x + 2, ptCenter.y + 0, m_pParentWnd->GetUnitBackColor());
_D_LINE_H(ptCenter.x + 1, ptCenter.y + 1, m_pParentWnd->GetUnitBackColor());
_D_LINE_H(ptCenter.x + 0, ptCenter.y + 2, m_pParentWnd->GetUnitBackColor());
_D_LINE_H(ptCenter.x + 1, ptCenter.y + 3, m_pParentWnd->GetUnitBackColor());
_D_LINE_H(ptCenter.x + 2, ptCenter.y + 4, m_pParentWnd->GetUnitBackColor());
break;
case DP_DOWN:
_D_LINE_V(ptCenter.x + 0, ptCenter.y + 0, m_pParentWnd->GetUnitBackColor());
_D_LINE_V(ptCenter.x + 1, ptCenter.y + 1, m_pParentWnd->GetUnitBackColor());
_D_LINE_V(ptCenter.x + 2, ptCenter.y + 2, m_pParentWnd->GetUnitBackColor());
_D_LINE_V(ptCenter.x + 3, ptCenter.y + 1, m_pParentWnd->GetUnitBackColor());
_D_LINE_V(ptCenter.x + 4, ptCenter.y + 0, m_pParentWnd->GetUnitBackColor());
break;
case DP_UP:
_D_LINE_V(ptCenter.x + 0, ptCenter.y + 2, m_pParentWnd->GetUnitBackColor());
_D_LINE_V(ptCenter.x + 1, ptCenter.y + 1, m_pParentWnd->GetUnitBackColor());
_D_LINE_V(ptCenter.x + 2, ptCenter.y + 0, m_pParentWnd->GetUnitBackColor());
_D_LINE_V(ptCenter.x + 3, ptCenter.y + 1, m_pParentWnd->GetUnitBackColor());
_D_LINE_V(ptCenter.x + 4, ptCenter.y + 2, m_pParentWnd->GetUnitBackColor());
break;
default:
break;
}
}
void CFlowUnit::DrawTriangle(CDC *pDC)
{
if (m_pParentWnd == NULL)
{
return;
}
CPoint ptRgn[3];
switch (m_pParentWnd->GetFlowCtrl()->GetDirectionType())
{
case LEFT_TO_RIGHT:
ptRgn[0].x = m_rectClient.left;
ptRgn[0].y = m_rectClient.top;
ptRgn[1].x = m_rectClient.left;
ptRgn[1].y = m_rectClient.bottom;
ptRgn[2].x = m_rectClient.right;
ptRgn[2].y = m_rectClient.top + (m_rectClient.bottom - m_rectClient.top) / 2;
break;
case RIGHT_TO_LEFT:
ptRgn[0].x = m_rectClient.right;
ptRgn[0].y = m_rectClient.top;
ptRgn[1].x = m_rectClient.right;
ptRgn[1].y = m_rectClient.bottom;
ptRgn[2].x = m_rectClient.left;
ptRgn[2].y = m_rectClient.top + (m_rectClient.bottom - m_rectClient.top) / 2;
break;
case TOP_TO_BOTTOM:
ptRgn[0].x = m_rectClient.left;
ptRgn[0].y = m_rectClient.top;
ptRgn[1].x = m_rectClient.right;
ptRgn[1].y = m_rectClient.top;
ptRgn[2].x = m_rectClient.left + (m_rectClient.right - m_rectClient.left) / 2;
ptRgn[2].y = m_rectClient.bottom;
break;
case BOTTOM_TO_TOP:
ptRgn[0].x = m_rectClient.left;
ptRgn[0].y = m_rectClient.bottom;
ptRgn[1].x = m_rectClient.right;
ptRgn[1].y = m_rectClient.bottom;
ptRgn[2].x = m_rectClient.left + (m_rectClient.right - m_rectClient.left) / 2;
ptRgn[2].y = m_rectClient.top;
break;
default:
break;
}
CBrush pBackBrush, *pOldBrush;
pBackBrush.CreateSolidBrush(m_pParentWnd->GetUnitBackColor());
pOldBrush = (CBrush *)pDC->SelectObject(&pBackBrush);
pDC->SetPolyFillMode(WINDING);
pDC->Polygon(ptRgn, 3);
pDC->SelectObject(pOldBrush);
pBackBrush.DeleteObject();
}
void CFlowUnit::SetParentWnd(CFlowImpl *pParentWnd)
{
m_pParentWnd = pParentWnd;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -